Add generated database entity, just recipe and fix config table missing PK

This commit is contained in:
GW_MC
2025-11-13 20:13:05 +08:00
parent 7a1617e1ee
commit 25c0756e70
9 changed files with 96 additions and 1 deletions

3
.gitignore vendored
View File

@@ -21,3 +21,6 @@ target
# and can be added to the global gitignore or merged into this file. For a more nuclear # and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder. # option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/ #.idea/
# generated environment variables file
.env.generated

View File

@@ -1,3 +1,6 @@
set dotenv-load := true
set dotenv-filename := "./public/database/.env.generated"
simulate *args: simulate *args:
cd apps/container && \ cd apps/container && \
if [ -n "{{args}}" ]; then \ if [ -n "{{args}}" ]; then \
@@ -5,3 +8,32 @@ simulate *args:
else \ else \
cargo run --bin container-simulate; \ cargo run --bin container-simulate; \
fi fi
# Usage: (following SeaORM migration commands)
# init: Initialize migration directory
# generate: Generate a new migration file
# up: Apply all pending migrations
# up -n 10: Apply 10 pending migrations
# down: Rollback last applied migration
# down -n 10: Rollback last 10 applied migrations
# status: Check the status of all migrations
# fresh: Drop all tables from the database, then reapply all migrations
# refresh: Rollback all applied migrations, then reapply all migrations
# reset: Rollback all applied migrations
migrate *args:
cd public/migration && \
if [ -n "{{args}}" ]; then \
cargo run -- {{args}}; \
else \
cargo run; \
fi
generate-entity:
# load development environment variables
# sea-orm-cli will also load .env file by default
cd public/migration && \
sea-orm-cli generate entity \
-o ../database/src/generated/entities \
--with-serde both \
--date-time-crate chrono

View File

@@ -0,0 +1 @@
pub mod entities;

View File

@@ -0,0 +1,19 @@
//! `SeaORM` Entity, @generated by sea-orm-codegen 2.0.0-rc.18
use sea_orm::entity::prelude::*;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize, Deserialize)]
#[sea_orm(table_name = "config")]
pub struct Model {
#[sea_orm(unique, primary_key, auto_increment = false)]
pub key: String,
pub value: String,
pub created_at: DateTimeUtc,
pub updated_at: DateTimeUtc,
}
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {}
impl ActiveModelBehavior for ActiveModel {}

View File

@@ -0,0 +1,6 @@
//! `SeaORM` Entity, @generated by sea-orm-codegen 2.0.0-rc.18
pub mod prelude;
pub mod config;
pub mod user;

View File

@@ -0,0 +1,4 @@
//! `SeaORM` Entity, @generated by sea-orm-codegen 2.0.0-rc.18
pub use super::config::Entity as Config;
pub use super::user::Entity as User;

View File

@@ -0,0 +1,23 @@
//! `SeaORM` Entity, @generated by sea-orm-codegen 2.0.0-rc.18
use sea_orm::entity::prelude::*;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize, Deserialize)]
#[sea_orm(table_name = "user")]
pub struct Model {
#[sea_orm(primary_key, auto_increment = false)]
pub id: Uuid,
#[sea_orm(unique)]
pub name: String,
pub is_admin: bool,
pub password_hash: String,
pub salt: String,
pub created_at: DateTimeUtc,
pub updated_at: DateTimeUtc,
}
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {}
impl ActiveModelBehavior for ActiveModel {}

View File

@@ -1,5 +1,7 @@
use sea_orm::ConnectOptions; use sea_orm::ConnectOptions;
pub mod generated;
pub async fn get_connection<T: FnOnce(&mut ConnectOptions) -> &mut ConnectOptions>( pub async fn get_connection<T: FnOnce(&mut ConnectOptions) -> &mut ConnectOptions>(
connection_string: &str, connection_string: &str,
option_fn: Option<T>, option_fn: Option<T>,

View File

@@ -22,7 +22,12 @@ impl MigrationTrait for Migration {
Table::create() Table::create()
.table(Config::Table) .table(Config::Table)
.if_not_exists() .if_not_exists()
.col(ColumnDef::new(Config::Key).string().not_null().unique_key()) .col(
ColumnDef::new(Config::Key)
.string()
.not_null()
.primary_key(),
)
.col(ColumnDef::new(Config::Value).string().not_null()) .col(ColumnDef::new(Config::Value).string().not_null())
.col( .col(
ColumnDef::new(Config::CreatedAt) ColumnDef::new(Config::CreatedAt)