add initial crates and apps
This commit is contained in:
parent
5c87ba3519
commit
1ca300098f
113 changed files with 28169 additions and 0 deletions
39
crates/chattyness-user-ui/src/api/avatars.rs
Normal file
39
crates/chattyness-user-ui/src/api/avatars.rs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
//! Avatar API handlers for user UI.
|
||||
//!
|
||||
//! Handles avatar rendering data retrieval.
|
||||
//! Note: Emotion switching is now handled via WebSocket.
|
||||
|
||||
use axum::{
|
||||
extract::{Path, State},
|
||||
Json,
|
||||
};
|
||||
use sqlx::PgPool;
|
||||
|
||||
use chattyness_db::{
|
||||
models::AvatarRenderData,
|
||||
queries::{avatars, realms},
|
||||
};
|
||||
use chattyness_error::AppError;
|
||||
|
||||
use crate::auth::AuthUser;
|
||||
|
||||
/// Get current avatar render data.
|
||||
///
|
||||
/// GET /api/realms/{slug}/avatar/current
|
||||
///
|
||||
/// Returns the render data for the user's active avatar in this realm.
|
||||
pub async fn get_current_avatar(
|
||||
State(pool): State<PgPool>,
|
||||
AuthUser(user): AuthUser,
|
||||
Path(slug): Path<String>,
|
||||
) -> Result<Json<AvatarRenderData>, AppError> {
|
||||
// Get realm
|
||||
let realm = realms::get_realm_by_slug(&pool, &slug)
|
||||
.await?
|
||||
.ok_or_else(|| AppError::NotFound(format!("Realm '{}' not found", slug)))?;
|
||||
|
||||
// Get render data
|
||||
let render_data = avatars::get_avatar_render_data(&pool, user.id, realm.id).await?;
|
||||
|
||||
Ok(Json(render_data))
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue