From d70015c887ec410e50b3d6db337b37c6eb7dd2ea Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Fri, 5 Sep 2025 22:26:39 +0200 Subject: [PATCH] feat: update API endpoints and enhance feed retrieval logic, add CORS support --- thoughts-backend/.env | 2 +- thoughts-backend/Cargo.toml | 2 +- thoughts-backend/api/Cargo.toml | 2 +- thoughts-backend/api/src/routers/feed.rs | 7 +++++-- thoughts-backend/api/src/routers/mod.rs | 4 ++++ thoughts-frontend/app/page.tsx | 4 ++-- 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/thoughts-backend/.env b/thoughts-backend/.env index e12049f..4c97af8 100644 --- a/thoughts-backend/.env +++ b/thoughts-backend/.env @@ -3,4 +3,4 @@ PORT=8000 #DATABASE_URL="sqlite://dev.db" DATABASE_URL="postgresql://postgres:postgres@localhost/thoughts" #DATABASE_URL=postgres://thoughts_user:postgres@database:5432/thoughts_db -PREFORK=1 +PREFORK=0 diff --git a/thoughts-backend/Cargo.toml b/thoughts-backend/Cargo.toml index fd42018..f8de477 100644 --- a/thoughts-backend/Cargo.toml +++ b/thoughts-backend/Cargo.toml @@ -14,8 +14,8 @@ readme = "README.md" members = ["api", "app", "doc", "models", "migration", "utils"] [workspace.dependencies] -axum = { version = "0.8.4", default-features = false } tower = { version = "0.5.2", default-features = false } +axum = { version = "0.8.4", default-features = false } sea-orm = { version = "1.1.12" } sea-query = { version = "0.32.6" } # Added sea-query dependency serde = { version = "1.0.219", features = ["derive"] } diff --git a/thoughts-backend/api/Cargo.toml b/thoughts-backend/api/Cargo.toml index 87e8ae9..ee4e29d 100644 --- a/thoughts-backend/api/Cargo.toml +++ b/thoughts-backend/api/Cargo.toml @@ -15,7 +15,7 @@ tower = { workspace = true } tracing = { workspace = true } validator = { workspace = true, features = ["derive"] } -tower-http = { version = "0.6.6", features = ["fs"] } +tower-http = { version = "0.6.6", features = ["fs", "cors"] } tower-cookies = "0.11.0" anyhow = "1.0.98" dotenvy = "0.15.7" diff --git a/thoughts-backend/api/src/routers/feed.rs b/thoughts-backend/api/src/routers/feed.rs index b3dba6b..e778ae6 100644 --- a/thoughts-backend/api/src/routers/feed.rs +++ b/thoughts-backend/api/src/routers/feed.rs @@ -10,7 +10,7 @@ use crate::{error::ApiError, extractor::AuthUser}; #[utoipa::path( get, - path = "/feed", + path = "/", responses( (status = 200, description = "Authenticated user's feed", body = ThoughtListSchema) ), @@ -24,7 +24,10 @@ async fn feed_get( auth_user: AuthUser, ) -> Result { let followed_ids = get_followed_ids(&state.conn, auth_user.id).await?; - let thoughts_with_authors = get_feed_for_user(&state.conn, followed_ids).await?; + let mut thoughts_with_authors = get_feed_for_user(&state.conn, followed_ids).await?; + + let own_thoughts = get_feed_for_user(&state.conn, vec![auth_user.id]).await?; + thoughts_with_authors.extend(own_thoughts); let thoughts_schema: Vec = thoughts_with_authors .into_iter() diff --git a/thoughts-backend/api/src/routers/mod.rs b/thoughts-backend/api/src/routers/mod.rs index 56a96bd..c956091 100644 --- a/thoughts-backend/api/src/routers/mod.rs +++ b/thoughts-backend/api/src/routers/mod.rs @@ -7,15 +7,19 @@ pub mod user; use app::state::AppState; use root::create_root_router; +use tower_http::cors::CorsLayer; use user::create_user_router; use crate::routers::{feed::create_feed_router, thought::create_thought_router}; pub fn create_router(state: AppState) -> Router { + let cors = CorsLayer::permissive(); + Router::new() .merge(create_root_router()) .nest("/users", create_user_router()) .nest("/thoughts", create_thought_router()) .nest("/feed", create_feed_router()) .with_state(state) + .layer(cors) } diff --git a/thoughts-frontend/app/page.tsx b/thoughts-frontend/app/page.tsx index d6743ed..d6c90fa 100644 --- a/thoughts-frontend/app/page.tsx +++ b/thoughts-frontend/app/page.tsx @@ -23,7 +23,7 @@ export default function Home() { const fetchFeed = async () => { try { setError(null); - const response = await fetch("http://localhost:8000/api/feed"); + const response = await fetch("http://localhost:8000/feed"); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } @@ -51,7 +51,7 @@ export default function Home() { if (!newThoughtContent.trim()) return; // Prevent empty posts try { - const response = await fetch("http://localhost:8000/api/thoughts", { + const response = await fetch("http://localhost:8000/thoughts", { method: "POST", headers: { "Content-Type": "application/json",