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:
29
thoughts-backend/api/src/extractor/auth.rs
Normal file
29
thoughts-backend/api/src/extractor/auth.rs
Normal file
@@ -0,0 +1,29 @@
|
||||
use axum::{
|
||||
extract::FromRequestParts,
|
||||
http::{request::Parts, StatusCode},
|
||||
};
|
||||
|
||||
use app::state::AppState;
|
||||
|
||||
// A dummy struct to represent an authenticated user.
|
||||
// In a real app, this would contain user details from a validated JWT.
|
||||
pub struct AuthUser {
|
||||
pub id: i32,
|
||||
}
|
||||
|
||||
impl FromRequestParts<AppState> for AuthUser {
|
||||
type Rejection = (StatusCode, &'static str);
|
||||
|
||||
async fn from_request_parts(
|
||||
_parts: &mut Parts,
|
||||
_state: &AppState,
|
||||
) -> Result<Self, Self::Rejection> {
|
||||
// For now, we'll just return a hardcoded user.
|
||||
// In a real implementation, you would:
|
||||
// 1. Extract the `Authorization: Bearer <token>` header.
|
||||
// 2. Validate the JWT.
|
||||
// 3. Extract the user ID from the token claims.
|
||||
// 4. Return an error if the token is invalid or missing.
|
||||
Ok(AuthUser { id: 1 }) // Assume user with ID 1 is always authenticated.
|
||||
}
|
||||
}
|
@@ -1,5 +1,7 @@
|
||||
mod auth;
|
||||
mod json;
|
||||
mod valid;
|
||||
|
||||
pub use auth::AuthUser;
|
||||
pub use json::Json;
|
||||
pub use valid::Valid;
|
||||
|
Reference in New Issue
Block a user