use sea_orm::sea_query::{ColumnDef, Expr, IntoIden, Table, TableCreateStatement};
use sea_orm_migration::{prelude::Iden, schema::timestamp_with_time_zone, sea_query};
#[derive(Iden)]
enum GeneralIds {
CreatedAt,
UpdatedAt,
}
pub fn table_auto_tz<T>(name: T) -> TableCreateStatement
where
T: IntoIden + 'static,
{
timestamps_tz(Table::create().table(name).if_not_exists().take())
}
pub fn table_auto<T>(name: T) -> TableCreateStatement
where
T: IntoIden + 'static,
{
timestamps(Table::create().table(name).if_not_exists().take())
}
pub fn pk_auto<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name)
.integer()
.not_null()
.auto_increment()
.primary_key()
.take()
}
#[must_use]
pub fn timestamps_tz(t: TableCreateStatement) -> TableCreateStatement {
let mut t = t;
t.col(timestamp_with_time_zone(GeneralIds::CreatedAt).default(Expr::current_timestamp()))
.col(timestamp_with_time_zone(GeneralIds::UpdatedAt).default(Expr::current_timestamp()));
t.take()
}
#[must_use]
pub fn timestamps(t: TableCreateStatement) -> TableCreateStatement {
let mut t = t;
t.col(timestamp(GeneralIds::CreatedAt).default(Expr::current_timestamp()))
.col(timestamp(GeneralIds::UpdatedAt).default(Expr::current_timestamp()));
t.take()
}
pub fn uuid<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).unique_key().uuid().not_null().take()
}
pub fn uuid_col<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).uuid().not_null().take()
}
pub fn uuid_col_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).uuid().take()
}
pub fn string_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).string().take()
}
pub fn timestamptz_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).timestamp_with_time_zone().take()
}
pub fn timestamptz<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name)
.timestamp_with_time_zone()
.not_null()
.take()
}
pub fn string<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
string_null(name).not_null().take()
}
pub fn string_uniq<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
string(name).unique_key().take()
}
pub fn text_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).text().take()
}
pub fn text<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).text().take()
}
pub fn tiny_integer_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).tiny_integer().take()
}
pub fn tiny_integer<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).tiny_integer().not_null().take()
}
pub fn tiny_integer_uniq<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).tiny_integer().unique_key().take()
}
pub fn small_integer_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).small_integer().take()
}
pub fn small_integer<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).small_integer().not_null().take()
}
pub fn small_integer_uniq<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).small_integer().unique_key().take()
}
pub fn integer_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).integer().take()
}
pub fn integer<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).integer().not_null().take()
}
pub fn integer_uniq<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).integer().unique_key().take()
}
pub fn big_integer_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).big_integer().take()
}
pub fn big_integer<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).big_integer().not_null().take()
}
pub fn big_integer_uniq<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).big_integer().unique_key().take()
}
pub fn float_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).float().take()
}
pub fn float<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).float().not_null().take()
}
pub fn double_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).double().take()
}
pub fn double<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).double().not_null().take()
}
pub fn decimal_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).decimal().take()
}
pub fn decimal<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).decimal().not_null().take()
}
pub fn decimal_len_null<T>(name: T, precision: u32, scale: u32) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).decimal_len(precision, scale).take()
}
pub fn decimal_len<T>(name: T, precision: u32, scale: u32) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name)
.decimal_len(precision, scale)
.not_null()
.take()
}
pub fn bool_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).boolean().take()
}
pub fn bool<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).boolean().not_null().take()
}
pub fn date_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).date().take()
}
pub fn date<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).date().not_null().take()
}
pub fn timestamp_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).date_time().take()
}
pub fn timestamp<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).date_time().not_null().take()
}
pub fn json<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).json().not_null().take()
}
pub fn json_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).json().take()
}
pub fn jsonb<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).json_binary().not_null().take()
}
pub fn jsonb_null<T>(name: T) -> ColumnDef
where
T: IntoIden,
{
ColumnDef::new(name).json_binary().take()
}