Adding fill functions

This commit is contained in:
Julia Lange 2026-01-20 16:36:14 -08:00
parent 440e897edf
commit 162ba78430
Signed by: Julia
SSH key fingerprint: SHA256:5DJcfxa5/fKCYn57dcabJa2vN2e6eT0pBerYi5SUbto
3 changed files with 53 additions and 3 deletions

View file

@ -32,6 +32,7 @@ CREATE TABLE items (
CREATE TABLE feeds (
id INTEGER PRIMARY KEY,
user_id INTEGER NOT NULL,
title TEXT NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id)
);

View file

@ -40,7 +40,7 @@ impl FetchedRSSItem {
}
pub struct FetchedRSSChannel {
title: String,
link: Url,
link: Url,
description: String,
items: Vec<FetchedRSSItem>,
@ -96,6 +96,8 @@ pub struct Channel {
}
impl Channel {
pub async fn get_all(pool: &SqlitePool) -> Result<Vec<Self>> {
let channels: Result<Vec<Channel>> = sqlx::query_as!(
UnparsedChannel,

View file

@ -2,7 +2,11 @@ use crate::{
Result,
Item,
Channel,
channel::UnparsedChannel,
channel::{
UnparsedChannel,
ChannelId,
},
user::UserId,
};
use sqlx::SqlitePool;
@ -10,11 +14,54 @@ pub struct FeedId(pub i64);
impl From<i64> for FeedId { fn from(id: i64) -> Self { FeedId(id) } }
impl From<FeedId> for i64 { fn from(id: FeedId) -> Self { id.0 } }
pub struct UnparsedFeed {
pub id: i64,
pub title: String,
pub user_id: i64
}
impl UnparsedFeed {
pub fn parse(self) -> Result<Feed> {
Ok(Feed {
id: FeedId(self.id),
title: self.title,
user_id: UserId(self.user_id),
})
}
}
pub struct Feed {
pub id: FeedId,
pub title: String,
pub user_id: UserId,
}
impl Feed {
pub async fn create(
pool: &SqlitePool, id: UserId, name: &str
) -> Result<Self> {
let new_feed = sqlx::query_as!(
UnparsedFeed,
"INSERT INTO feeds (user_id, title)
VALUES (?, ?)
RETURNING id as `id!`, user_id, title",
id.0, name
).fetch_one(pool).await?.parse();
new_feed
}
pub async fn add_channel(
pool: &SqlitePool, id: FeedId, channel_id: ChannelId
) -> Result<()> {
sqlx::query!(
"INSERT INTO feed_channels (feed_id, channel_id)
VALUES (?, ?)",
id.0, channel_id.0
).execute(pool).await?;
Ok(())
}
pub async fn get_items(
pool: &SqlitePool, id: FeedId, limit: u8, offset: u32
) -> Result<Vec<Item>> {