fish_lib/game/services/
pond_service.rs

1use crate::game::errors::GameResult;
2use crate::game::repositories::pond_repository::PondRepositoryInterface;
3use crate::models::pond::{NewPond, Pond};
4use crate::models::user::User;
5use std::sync::Arc;
6
7pub trait PondServiceInterface: Send + Sync {
8    fn create_and_save_pond(&self, owner_user: &User, capacity: i32) -> GameResult<Pond>;
9}
10
11pub struct PondService {
12    pond_repository: Arc<dyn PondRepositoryInterface>,
13}
14
15impl PondService {
16    pub fn new(pond_repository: Arc<dyn PondRepositoryInterface>) -> PondService {
17        PondService { pond_repository }
18    }
19}
20
21impl PondServiceInterface for PondService {
22    fn create_and_save_pond(&self, owner_user: &User, capacity: i32) -> GameResult<Pond> {
23        let pond = NewPond {
24            user_id: owner_user.id,
25            capacity,
26        };
27        Ok(self.pond_repository.create(pond)?)
28    }
29}