diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b2b579..ce63b4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Consolidated `commitlint`, `format`, and `lint` CI jobs into a single `lint` job (#42) +- `get_all`, `get_by_id`, `get_by_squad_number`, and `delete` in `player_service` now return `Result` instead of `Result`, aligning with the `CreateError`/`UpdateError` pattern (#56) - `codecov.yml` `ignore` list extended with `src/**/mod.rs` to exclude module re-exports from coverage reporting (#78) - `codecov.yml` comment updated to reflect goal of maximum coverage on business logic layers (#78) diff --git a/src/services/player_service.rs b/src/services/player_service.rs index eb7f6cf..96db1fc 100644 --- a/src/services/player_service.rs +++ b/src/services/player_service.rs @@ -10,6 +10,13 @@ use crate::repositories::player_repository; use diesel::SqliteConnection; use uuid::Uuid; +/// Error type for player read and delete operations. +#[derive(Debug)] +pub enum PlayerServiceError { + /// An unexpected database error occurred. + Database(#[allow(dead_code)] diesel::result::Error), +} + /// Error types for player creation operations. #[derive(Debug)] pub enum CreateError { @@ -29,26 +36,30 @@ pub enum UpdateError { } /// Retrieves all players ordered by squad number. -pub fn get_all(conn: &mut SqliteConnection) -> Result, diesel::result::Error> { +pub fn get_all(conn: &mut SqliteConnection) -> Result, PlayerServiceError> { player_repository::get_all(conn) .map(|players| players.into_iter().map(PlayerResponse::from).collect()) + .map_err(PlayerServiceError::Database) } /// Finds a player by UUID (surrogate key, admin route). pub fn get_by_id( conn: &mut SqliteConnection, id: &str, -) -> Result, diesel::result::Error> { - player_repository::get_by_id(conn, id).map(|opt| opt.map(PlayerResponse::from)) +) -> Result, PlayerServiceError> { + player_repository::get_by_id(conn, id) + .map(|opt| opt.map(PlayerResponse::from)) + .map_err(PlayerServiceError::Database) } /// Finds a player by squad number (natural key). pub fn get_by_squad_number( conn: &mut SqliteConnection, squad_number: u32, -) -> Result, diesel::result::Error> { +) -> Result, PlayerServiceError> { player_repository::get_by_squad_number(conn, squad_number as i32) .map(|opt| opt.map(PlayerResponse::from)) + .map_err(PlayerServiceError::Database) } /// Creates a new player with an auto-generated UUID. @@ -132,9 +143,8 @@ pub fn update( /// Deletes a player by squad number (natural key). /// /// Returns `true` if a row was deleted, `false` if no match was found. -pub fn delete( - conn: &mut SqliteConnection, - squad_number: u32, -) -> Result { - player_repository::delete(conn, squad_number as i32).map(|affected| affected > 0) +pub fn delete(conn: &mut SqliteConnection, squad_number: u32) -> Result { + player_repository::delete(conn, squad_number as i32) + .map(|affected| affected > 0) + .map_err(PlayerServiceError::Database) }