|
1 | 1 | use crate::domain::object::account::{Account, AccountId};
|
2 | 2 | use crate::domain::repository::account::AccountRepository;
|
3 |
| -use anyhow::Result; |
| 3 | +use crate::server::request::account::AccountRequest; |
| 4 | +use actix_web::web::Json; |
| 5 | +use anyhow; |
4 | 6 |
|
5 |
| -pub fn post_account(repository: &mut impl AccountRepository, account: &Account) -> Result<()> { |
| 7 | +pub fn post_account( |
| 8 | + repository: &mut impl AccountRepository, |
| 9 | + account: &Account, |
| 10 | +) -> anyhow::Result<()> { |
6 | 11 | repository.insert(account)
|
7 | 12 | }
|
8 | 13 |
|
9 |
| -pub fn get_account_list(repository: &mut impl AccountRepository) -> Result<Vec<Account>> { |
| 14 | +pub fn get_account_list(repository: &mut impl AccountRepository) -> anyhow::Result<Vec<Account>> { |
10 | 15 | repository.list()
|
11 | 16 | }
|
12 | 17 |
|
13 | 18 | pub fn get_account(
|
14 | 19 | repository: &mut impl AccountRepository,
|
15 | 20 | account_id: &AccountId,
|
16 |
| -) -> Result<Account> { |
| 21 | +) -> anyhow::Result<Account> { |
17 | 22 | repository.find_by_id(account_id)
|
18 | 23 | }
|
19 | 24 |
|
| 25 | +pub fn put_account( |
| 26 | + repository: &mut impl AccountRepository, |
| 27 | + request: &Json<AccountRequest>, |
| 28 | + account_id: &AccountId, |
| 29 | +) -> anyhow::Result<()> { |
| 30 | + let account = repository.find_by_id(account_id)?; |
| 31 | + let updated_account = request.model(account.id, account.created_at); |
| 32 | + repository.update(&updated_account) |
| 33 | +} |
| 34 | + |
20 | 35 | pub fn delete_account(
|
21 | 36 | repository: &mut impl AccountRepository,
|
22 | 37 | account_id: &AccountId,
|
23 |
| -) -> Result<()> { |
| 38 | +) -> anyhow::Result<()> { |
24 | 39 | let account = repository.find_by_id(account_id)?;
|
25 | 40 | repository.delete(&account)
|
26 | 41 | }
|
@@ -136,6 +151,31 @@ mod tests {
|
136 | 151 | assert!(result.is_err());
|
137 | 152 | }
|
138 | 153 |
|
| 154 | + #[test] |
| 155 | + fn success_put_account() { |
| 156 | + let mut repository = MockAccountRepository { |
| 157 | + pool: RefCell::new(HashMap::new()), |
| 158 | + }; |
| 159 | + |
| 160 | + let test_account = Account { |
| 161 | + id: AccountId::new(1), |
| 162 | + username: "test_user".to_string(), |
| 163 | + grade: 4, |
| 164 | + expiration_date: Local::now().naive_local() + Duration::hours(1), |
| 165 | + created_at: Local::now().naive_local(), |
| 166 | + }; |
| 167 | + |
| 168 | + let update_account = AccountRequest { |
| 169 | + username: "update_user".to_string(), |
| 170 | + grade: 3, |
| 171 | + expiration_date: Local::now().naive_local() + Duration::hours(2), |
| 172 | + }; |
| 173 | + |
| 174 | + let _ = repository.insert(&test_account); |
| 175 | + let result = put_account(&mut repository, &Json(update_account), &test_account.id); |
| 176 | + assert!(result.is_ok()); |
| 177 | + } |
| 178 | + |
139 | 179 | #[test]
|
140 | 180 | fn success_delete_account() {
|
141 | 181 | let mut repository = MockAccountRepository {
|
|
0 commit comments