refactor: deps cleanup, split openapi, extract api-types crate

This commit is contained in:
2026-05-12 11:54:00 +02:00
parent 2d6121239f
commit 99ce81efe5
46 changed files with 695 additions and 808 deletions

View File

@@ -24,6 +24,7 @@ apple-native-keyring-store = { version = "1.0.0", optional = true, features = [
zbus-secret-service-keyring-store = { version = "1.0.0", optional = true }
windows-native-keyring-store = { version = "1.0.0", optional = true }
api-types = { workspace = true }
reqwest = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
@@ -32,5 +33,3 @@ anyhow = { workspace = true }
uuid = { workspace = true }
thiserror = { workspace = true }
[dev-dependencies]
tempfile = "3"

View File

@@ -1,4 +1,4 @@
use crate::client::{DiaryEntryDto, LogReviewRequest, ReviewHistoryResponse};
use api_types::{DiaryEntryDto, LogReviewRequest, ReviewHistoryResponse};
use crate::config::Config;
use uuid::Uuid;
@@ -995,7 +995,7 @@ pub fn update(app: &mut App, action: Action) -> Vec<Command> {
#[cfg(test)]
mod tests {
use super::*;
use crate::client::{DiaryEntryDto, MovieDto, ReviewDto};
use api_types::{DiaryEntryDto, MovieDto, ReviewDto};
use uuid::Uuid;
fn setup_app() -> App {
@@ -1038,6 +1038,7 @@ mod tests {
title: "The Matrix".into(),
release_year: 1999,
director: None,
poster_path: None,
},
review: ReviewDto {
id: Uuid::new_v4(),

View File

@@ -1,92 +1,9 @@
use serde::{Deserialize, Serialize};
use api_types::{
ActorListResponse, ActorUrlRequest, DiaryResponse, FollowRequest, LogReviewRequest,
LoginRequest, LoginResponse, ReviewHistoryResponse,
};
use uuid::Uuid;
// ── DTOs (mirror backend dtos.rs exactly) ────────────────────────────────────
#[derive(Debug, Clone, Serialize)]
pub struct LoginRequest {
pub email: String,
pub password: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct LoginResponse {
pub token: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LogReviewRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub external_metadata_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub manual_title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub manual_release_year: Option<u16>,
#[serde(skip_serializing_if = "Option::is_none")]
pub manual_director: Option<String>,
pub rating: u8,
#[serde(skip_serializing_if = "Option::is_none")]
pub comment: Option<String>,
pub watched_at: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct DiaryResponse {
pub items: Vec<DiaryEntryDto>,
pub total_count: u64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct DiaryEntryDto {
pub movie: MovieDto,
pub review: ReviewDto,
}
#[derive(Debug, Clone, Deserialize)]
pub struct MovieDto {
pub id: Uuid,
pub title: String,
pub release_year: u16,
pub director: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ReviewDto {
pub id: Uuid,
pub rating: u8,
pub comment: Option<String>,
pub watched_at: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ReviewHistoryResponse {
pub movie: MovieDto,
pub viewings: Vec<ReviewDto>,
pub trend: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct FollowRequest {
pub handle: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct ActorUrlRequest {
pub actor_url: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct RemoteActorDto {
pub handle: String,
pub display_name: Option<String>,
pub url: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ActorListResponse {
pub actors: Vec<RemoteActorDto>,
}
// ── Error ─────────────────────────────────────────────────────────────────────
#[derive(Debug, thiserror::Error)]