bitque/actors/database-actor/src/issue_statuses.rs
2021-04-16 15:20:25 +02:00

55 lines
1.4 KiB
Rust

use diesel::prelude::*;
use jirs_data::{IssueStatus, IssueStatusId, Position, ProjectId, TitleString};
use crate::{db_create, db_delete, db_load, db_update};
db_load! {
LoadIssueStatuses,
msg => issue_statuses => issue_statuses
.distinct_on(id)
.filter(project_id.eq(msg.project_id)),
IssueStatus,
project_id => ProjectId
}
db_create! {
CreateIssueStatus,
msg => issue_statuses => diesel::insert_into(issue_statuses).values((
project_id.eq(msg.project_id),
name.eq(msg.name),
position.eq(msg.position),
)),
IssueStatus,
project_id => ProjectId,
position => i32,
name => TitleString
}
db_delete! {
DeleteIssueStatus,
msg => issue_statuses => diesel::delete(issue_statuses)
.filter(id.eq(msg.issue_status_id))
.filter(project_id.eq(msg.project_id)
),
IssueStatus,
project_id => ProjectId,
issue_status_id => IssueStatusId
}
db_update! {
UpdateIssueStatus,
msg => issue_statuses => diesel::update(issue_statuses)
.set((
name.eq(msg.name),
position.eq(msg.position),
updated_at.eq(chrono::Utc::now().naive_utc()),
))
.filter(id.eq(msg.issue_status_id))
.filter(project_id.eq(msg.project_id)),
IssueStatus,
issue_status_id => IssueStatusId,
project_id => ProjectId,
position => Position,
name => TitleString
}