Skip to content
Clone

feat(issues): add issues usecase update

zhenyi committed
parent f4cf13c commit 3343a66 Browse files

1 file changed

+41 −0

Added lib/issues/features/issues/usecase/update.rs View lib/issues/features/issues/usecase/update.rs
@@ -0,0 +1,41 @@
1use db::conn::sea_orm::*;
2use time::OffsetDateTime;
3use uuid::Uuid;
4
5use crate::error::{IssueError, IssueResult};
6use crate::features::IssueService;
7
8use super::super::types::{CollectionView, UpdateCollectionOption};
9use super::helpers::{load_collection, require_authenticated};
10
11pub async fn update_collection(
12 svc: &IssueService,
13 actor: Uuid,
14 channel_id: Uuid,
15 collection_id: Uuid,
16 input: UpdateCollectionOption,
17) -> IssueResult<CollectionView> {
18 require_authenticated(actor)?;
19
20 let cur = load_collection(svc, channel_id, collection_id).await?;
21 let db = svc.db.writer();
22
23 let mut active: db::issue::issues::ActiveModel = cur.into();
24 if let Some(new_name) = input.name {
25 let trimmed = new_name.trim().to_string();
26 if trimmed.is_empty() || trimmed.len() > svc.config.max_collection_name_len {
27 return Err(IssueError::BadRequest("collection name length invalid".into()));
28 }
29 active.name = Set(trimmed);
30 }
31 if let Some(opt) = input.icon {
32 active.icon = Set(opt);
33 }
34 if let Some(opt) = input.description {
35 active.description = Set(opt);
36 }
37 active.updated_at = Set(Some(OffsetDateTime::now_utc()));
38
39 let saved = active.update(&db).await?;
40 Ok(CollectionView::from(saved))
41}
No newline at end of file