Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I1e9421d79010813992feb2b26c44d6796a6a6964
100 lines
2.6 KiB
Rust
100 lines
2.6 KiB
Rust
use chrono::{DateTime, Utc};
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
// Auth
|
|
#[derive(Debug, Deserialize)]
|
|
pub struct LoginRequest {
|
|
pub username: String,
|
|
pub password: String,
|
|
}
|
|
|
|
#[derive(Debug, Serialize)]
|
|
pub struct LoginResponse {
|
|
pub token: String,
|
|
pub username: String,
|
|
pub role: String,
|
|
}
|
|
|
|
#[derive(Debug, Serialize)]
|
|
pub struct UserInfoResponse {
|
|
pub username: String,
|
|
pub role: String,
|
|
}
|
|
|
|
// Users
|
|
#[derive(Debug, Serialize)]
|
|
pub struct UserResponse {
|
|
pub id: String,
|
|
pub username: String,
|
|
pub role: String,
|
|
pub profile: UserProfileResponse,
|
|
pub created_at: DateTime<Utc>,
|
|
pub updated_at: DateTime<Utc>,
|
|
}
|
|
|
|
#[derive(Debug, Serialize)]
|
|
pub struct UserProfileResponse {
|
|
pub avatar_path: Option<String>,
|
|
pub bio: Option<String>,
|
|
pub preferences: UserPreferencesResponse,
|
|
}
|
|
|
|
#[derive(Debug, Serialize)]
|
|
pub struct UserPreferencesResponse {
|
|
pub theme: Option<String>,
|
|
pub language: Option<String>,
|
|
pub default_video_quality: Option<String>,
|
|
pub auto_play: bool,
|
|
}
|
|
|
|
#[derive(Debug, Serialize)]
|
|
pub struct UserLibraryResponse {
|
|
pub user_id: String,
|
|
pub root_path: String,
|
|
pub permission: String,
|
|
pub granted_at: DateTime<Utc>,
|
|
}
|
|
|
|
#[derive(Debug, Deserialize)]
|
|
pub struct GrantLibraryAccessRequest {
|
|
pub root_path: String,
|
|
pub permission: pinakes_core::users::LibraryPermission,
|
|
}
|
|
|
|
#[derive(Debug, Deserialize)]
|
|
pub struct RevokeLibraryAccessRequest {
|
|
pub root_path: String,
|
|
}
|
|
|
|
impl From<pinakes_core::users::User> for UserResponse {
|
|
fn from(user: pinakes_core::users::User) -> Self {
|
|
Self {
|
|
id: user.id.0.to_string(),
|
|
username: user.username,
|
|
role: user.role.to_string(),
|
|
profile: UserProfileResponse {
|
|
avatar_path: user.profile.avatar_path,
|
|
bio: user.profile.bio,
|
|
preferences: UserPreferencesResponse {
|
|
theme: user.profile.preferences.theme,
|
|
language: user.profile.preferences.language,
|
|
default_video_quality: user.profile.preferences.default_video_quality,
|
|
auto_play: user.profile.preferences.auto_play,
|
|
},
|
|
},
|
|
created_at: user.created_at,
|
|
updated_at: user.updated_at,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<pinakes_core::users::UserLibraryAccess> for UserLibraryResponse {
|
|
fn from(access: pinakes_core::users::UserLibraryAccess) -> Self {
|
|
Self {
|
|
user_id: access.user_id.0.to_string(),
|
|
root_path: access.root_path,
|
|
permission: access.permission.to_string(),
|
|
granted_at: access.granted_at,
|
|
}
|
|
}
|
|
}
|