Add SQLite repository implementation and update domain models for persistence

This commit is contained in:
2026-05-04 01:34:52 +02:00
parent 65bab7fd44
commit f60cc368b6
4 changed files with 108 additions and 9 deletions

View File

@@ -10,3 +10,9 @@ sqlx = { version = "0.8.6", features = [
"uuid",
"macros",
] }
domain = { workspace = true }
uuid = { workspace = true }
chrono = { workspace = true }
tracing = { workspace = true }
async-trait = { workspace = true }

View File

@@ -1,14 +1,64 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
use domain::{
errors::DomainError,
events::DomainEvent,
models::{DiaryEntry, DiaryFilter, Movie, Review, ReviewHistory, collections::Paginated},
ports::MovieRepository,
value_objects::{ExternalMetadataId, MovieId, MovieTitle, ReleaseYear},
};
use sqlx::SqlitePool;
pub struct SqliteMovieRepository {
pool: SqlitePool,
}
#[cfg(test)]
mod tests {
use super::*;
impl SqliteMovieRepository {
pub fn new(pool: SqlitePool) -> Self {
Self { pool }
}
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
fn map_err(e: sqlx::Error) -> DomainError {
tracing::error!("Database error: {:?}", e);
DomainError::InfrastructureError("Database operation failed".into())
}
}
#[async_trait::async_trait]
impl MovieRepository for SqliteMovieRepository {
async fn get_movie_by_external_id(
&self,
external_metadata_id: &ExternalMetadataId,
) -> Result<Option<Movie>, DomainError> {
todo!()
}
async fn get_movie_by_id(&self, movie_id: &MovieId) -> Result<Option<Movie>, DomainError> {
todo!()
}
async fn get_movies_by_title_and_year(
&self,
title: &MovieTitle,
year: &ReleaseYear,
) -> Result<Vec<Movie>, DomainError> {
todo!()
}
async fn upsert_movie(&self, movie: &Movie) -> Result<(), DomainError> {
todo!()
}
async fn save_review(&self, review: &Review) -> Result<DomainEvent, DomainError> {
todo!()
}
async fn query_diary(
&self,
filter: &DiaryFilter,
) -> Result<Paginated<DiaryEntry>, DomainError> {
todo!()
}
async fn get_review_history(&self, movie_id: &MovieId) -> Result<ReviewHistory, DomainError> {
todo!()
}
}