Skip to content
Clone
f9a35c9
71 lines 1.9 KB Rust
use db::issue::issues as issues_entity;
use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
use time::format_description::well_known::Rfc3339;
use utoipa::{IntoParams, ToSchema};
use uuid::Uuid;
fn fmt_ts(ts: OffsetDateTime) -> String {
ts.format(&Rfc3339).unwrap_or_default()
}
fn fmt_ts_opt(ts: Option<OffsetDateTime>) -> Option<String> {
ts.map(fmt_ts)
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct CollectionView {
pub id: Uuid,
pub channel_id: Uuid,
pub name: String,
pub icon: Option<String>,
pub description: Option<String>,
pub nums_open_issue: i64,
pub nums_closed_issue: i64,
pub created_at: String,
pub updated_at: Option<String>,
}
impl From<issues_entity::Model> for CollectionView {
fn from(m: issues_entity::Model) -> Self {
Self {
id: m.id,
channel_id: m.channel_id,
name: m.name,
icon: m.icon,
description: m.description,
nums_open_issue: 0,
nums_closed_issue: 0,
created_at: fmt_ts(m.created_at),
updated_at: fmt_ts_opt(m.updated_at),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct CollectionPage {
pub items: Vec<CollectionView>,
pub total: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct CreateCollectionOption {
pub channel_id: Uuid,
pub name: String,
pub icon: Option<String>,
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct UpdateCollectionOption {
pub name: Option<String>,
pub icon: Option<Option<String>>,
pub description: Option<Option<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, IntoParams)]
pub struct ListCollectionQuery {
pub channel_id: Option<Uuid>,
pub q: Option<String>,
pub limit: Option<u64>,
pub offset: Option<u64>,
}