feat: implement user follow/unfollow functionality and thought retrieval by user
- Added follow and unfollow endpoints for users. - Implemented logic to retrieve thoughts by a specific user. - Updated user error handling to include cases for already following and not following. - Created persistence layer for follow relationships. - Enhanced user and thought schemas to support new features. - Added tests for follow/unfollow endpoints and thought retrieval. - Updated frontend to display thoughts and allow posting new thoughts.
This commit is contained in:
10
thoughts-backend/doc/src/feed.rs
Normal file
10
thoughts-backend/doc/src/feed.rs
Normal file
@@ -0,0 +1,10 @@
|
||||
use api::{models::ApiErrorResponse, routers::feed::*};
|
||||
use models::schemas::thought::{ThoughtListSchema, ThoughtSchema};
|
||||
use utoipa::OpenApi;
|
||||
|
||||
#[derive(OpenApi)]
|
||||
#[openapi(
|
||||
paths(feed_get),
|
||||
components(schemas(ThoughtSchema, ThoughtListSchema, ApiErrorResponse))
|
||||
)]
|
||||
pub(super) struct FeedApi;
|
@@ -3,7 +3,9 @@ use utoipa::OpenApi;
|
||||
use utoipa_scalar::{Scalar, Servable as ScalarServable};
|
||||
use utoipa_swagger_ui::SwaggerUi;
|
||||
|
||||
mod feed;
|
||||
mod root;
|
||||
mod thought;
|
||||
mod user;
|
||||
|
||||
#[derive(OpenApi)]
|
||||
@@ -11,11 +13,15 @@ mod user;
|
||||
nest(
|
||||
(path = "/", api = root::RootApi),
|
||||
(path = "/users", api = user::UserApi),
|
||||
(path = "/thoughts", api = thought::ThoughtApi),
|
||||
(path = "/feed", api = feed::FeedApi),
|
||||
),
|
||||
tags(
|
||||
(name = "root", description = "Root API"),
|
||||
(name = "user", description = "User API"),
|
||||
)
|
||||
(name = "user", description = "User & Social API"),
|
||||
(name = "thought", description = "Thoughts API"),
|
||||
(name = "feed", description = "Feed API"),
|
||||
),
|
||||
)]
|
||||
struct _ApiDoc;
|
||||
|
||||
|
18
thoughts-backend/doc/src/thought.rs
Normal file
18
thoughts-backend/doc/src/thought.rs
Normal file
@@ -0,0 +1,18 @@
|
||||
use api::{
|
||||
models::{ApiErrorResponse, ParamsErrorResponse},
|
||||
routers::thought::*,
|
||||
};
|
||||
use models::{params::thought::CreateThoughtParams, schemas::thought::ThoughtSchema};
|
||||
use utoipa::OpenApi;
|
||||
|
||||
#[derive(OpenApi)]
|
||||
#[openapi(
|
||||
paths(thoughts_post, thoughts_delete),
|
||||
components(schemas(
|
||||
CreateThoughtParams,
|
||||
ThoughtSchema,
|
||||
ApiErrorResponse,
|
||||
ParamsErrorResponse
|
||||
))
|
||||
)]
|
||||
pub(super) struct ThoughtApi;
|
@@ -1,18 +1,29 @@
|
||||
use utoipa::OpenApi;
|
||||
|
||||
use models::params::user::CreateUserParams;
|
||||
use models::schemas::user::{UserListSchema, UserSchema};
|
||||
|
||||
use api::models::{ApiErrorResponse, ParamsErrorResponse};
|
||||
use api::routers::user::*;
|
||||
use models::params::user::CreateUserParams;
|
||||
use models::schemas::{
|
||||
thought::{ThoughtListSchema, ThoughtSchema},
|
||||
user::{UserListSchema, UserSchema},
|
||||
};
|
||||
|
||||
#[derive(OpenApi)]
|
||||
#[openapi(
|
||||
paths(users_get, users_id_get, users_post),
|
||||
paths(
|
||||
users_get,
|
||||
users_id_get,
|
||||
users_post,
|
||||
user_thoughts_get,
|
||||
user_follow_post,
|
||||
user_follow_delete
|
||||
),
|
||||
components(schemas(
|
||||
CreateUserParams,
|
||||
UserListSchema,
|
||||
UserSchema,
|
||||
ThoughtSchema,
|
||||
ThoughtListSchema,
|
||||
ApiErrorResponse,
|
||||
ParamsErrorResponse,
|
||||
))
|
||||
|
Reference in New Issue
Block a user