Skip to content
Clone
a06673b
47 lines 1.5 KB Rust
use db::conn::sea_orm::*;
use db::issue::issue as issue_entity;
use db::issue::issues as issues_entity;
use uuid::Uuid;
use crate::error::{IssueError, IssueResult};
use crate::features::IssueService;
pub fn require_authenticated(actor: Uuid) -> IssueResult<()> {
if actor.is_nil() {
return Err(IssueError::Unauthorized("authentication required".into()));
}
Ok(())
}
pub async fn load_collection(
svc: &IssueService,
channel_id: Uuid,
) -> IssueResult<issues_entity::Model> {
use crate::features::issues::usecase::load_default_collection as outer_load;
let db = svc.db.reader();
let row = issues_entity::Entity::find()
.filter(issues_entity::COLUMN.channel_id.eq(channel_id))
.order_by_asc(issues_entity::COLUMN.created_at)
.one(&db)
.await?
.ok_or_else(|| {
IssueError::NotFound(format!("issues board for channel {channel_id}"))
})?;
let _ = outer_load; // kept to document cross-module reuse possibility
Ok(row)
}
pub async fn load_issue(
svc: &IssueService,
channel_id: Uuid,
issue_id: Uuid,
) -> IssueResult<issue_entity::Model> {
let collection = load_collection(svc, channel_id).await?;
let db = svc.db.reader();
let it = issue_entity::Entity::find_by_id(issue_id)
.filter(issue_entity::COLUMN.collection_id.eq(collection.id))
.one(&db)
.await?
.ok_or_else(|| IssueError::NotFound(format!("issue {issue_id}")))?;
Ok(it)
}