From 8b6c7a8461082af62b304e76059b1f7be9eccdec Mon Sep 17 00:00:00 2001 From: Nano Taboada <87288+nanotaboada@users.noreply.github.com> Date: Wed, 8 Apr 2026 11:24:05 -0300 Subject: [PATCH 1/2] refactor(services): wrap read/delete errors in PlayerServiceError (#56) Co-authored-by: Claude Sonnet 4.6 --- CHANGELOG.md | 1 + src/services/player_service.rs | 25 +++++++++++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) 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..bcd03c8 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. @@ -135,6 +146,8 @@ pub fn update( pub fn delete( conn: &mut SqliteConnection, squad_number: u32, -) -> Result { - player_repository::delete(conn, squad_number as i32).map(|affected| affected > 0) +) -> Result { + player_repository::delete(conn, squad_number as i32) + .map(|affected| affected > 0) + .map_err(PlayerServiceError::Database) } From a4a3d75f8840867615756275ee187c1742cc3d16 Mon Sep 17 00:00:00 2001 From: Nano Taboada <87288+nanotaboada@users.noreply.github.com> Date: Wed, 8 Apr 2026 11:35:00 -0300 Subject: [PATCH 2/2] style(services): apply rustfmt to delete signature (#56) Co-authored-by: Claude Sonnet 4.6 --- src/services/player_service.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/services/player_service.rs b/src/services/player_service.rs index bcd03c8..96db1fc 100644 --- a/src/services/player_service.rs +++ b/src/services/player_service.rs @@ -143,10 +143,7 @@ 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 { +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)