fish_lib/game/services/
pond_service.rs1use 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}