96 lines
2.7 KiB
Rust
96 lines
2.7 KiB
Rust
use ext_calckey_model_migration::{Expr, SimpleExpr};
|
|
use magnetar_sdk::types::{EndFilter, RangeFilter, SpanFilter, StartFilter};
|
|
use sea_orm::Iden;
|
|
|
|
pub trait PaginatedModel: 'static {
|
|
fn time_column() -> impl Iden;
|
|
fn id_column() -> impl Iden;
|
|
|
|
fn range_into_expr(filter: &SpanFilter) -> Option<SimpleExpr> {
|
|
match filter {
|
|
SpanFilter::Range(RangeFilter {
|
|
time_start,
|
|
time_end,
|
|
id_start,
|
|
id_end,
|
|
}) => Some(
|
|
Expr::tuple([
|
|
Expr::col(Self::time_column()).into(),
|
|
Expr::col(Self::id_column()).into(),
|
|
])
|
|
.between(
|
|
Expr::tuple([
|
|
Expr::value(time_start.clone()),
|
|
Expr::value(id_start.clone()),
|
|
]),
|
|
Expr::tuple([Expr::value(time_end.clone()), Expr::value(id_end.clone())]),
|
|
),
|
|
),
|
|
SpanFilter::Start(StartFilter {
|
|
id_start,
|
|
time_start,
|
|
}) => Some(
|
|
Expr::tuple([
|
|
Expr::col(Self::time_column()).into(),
|
|
Expr::col(Self::id_column()).into(),
|
|
])
|
|
.gt(Expr::tuple([
|
|
Expr::value(time_start.clone()),
|
|
Expr::value(id_start.clone()),
|
|
])),
|
|
),
|
|
SpanFilter::End(EndFilter { id_end, time_end }) => Some(
|
|
Expr::tuple([
|
|
Expr::col(Self::time_column()).into(),
|
|
Expr::col(Self::id_column()).into(),
|
|
])
|
|
.lt(Expr::tuple([
|
|
Expr::value(time_end.clone()),
|
|
Expr::value(id_end.clone()),
|
|
])),
|
|
),
|
|
SpanFilter::None(_) => None,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl PaginatedModel for ck::note::Model {
|
|
fn time_column() -> impl Iden {
|
|
ck::note::Column::CreatedAt
|
|
}
|
|
|
|
fn id_column() -> impl Iden {
|
|
ck::note::Column::Id
|
|
}
|
|
}
|
|
|
|
impl PaginatedModel for ck::user::Model {
|
|
fn time_column() -> impl Iden {
|
|
ck::user::Column::CreatedAt
|
|
}
|
|
|
|
fn id_column() -> impl Iden {
|
|
ck::user::Column::Id
|
|
}
|
|
}
|
|
|
|
impl PaginatedModel for ck::following::Model {
|
|
fn time_column() -> impl Iden {
|
|
ck::following::Column::CreatedAt
|
|
}
|
|
|
|
fn id_column() -> impl Iden {
|
|
ck::following::Column::Id
|
|
}
|
|
}
|
|
|
|
impl PaginatedModel for ck::follow_request::Model {
|
|
fn time_column() -> impl Iden {
|
|
ck::follow_request::Column::CreatedAt
|
|
}
|
|
|
|
fn id_column() -> impl Iden {
|
|
ck::follow_request::Column::Id
|
|
}
|
|
}
|