Update entity and migration test

This commit is contained in:
fluo10 2025-04-28 20:15:58 +09:00
parent 0de65e6350
commit 1324fb3b70
8 changed files with 299 additions and 5 deletions

208
Cargo.lock generated
View file

@ -200,6 +200,7 @@ dependencies = [
"async-trait",
"base64",
"bytes",
"chrono",
"fast_chemail",
"fnv",
"futures-timer",
@ -453,11 +454,20 @@ version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "base64ct"
version = "1.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3"
[[package]]
name = "bitflags"
version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
dependencies = [
"serde",
]
[[package]]
name = "block-buffer"
@ -527,6 +537,7 @@ dependencies = [
"iana-time-zone",
"js-sys",
"num-traits",
"serde",
"wasm-bindgen",
"windows-link",
]
@ -586,6 +597,12 @@ dependencies = [
"crossbeam-utils",
]
[[package]]
name = "const-oid"
version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
[[package]]
name = "core-foundation"
version = "0.9.4"
@ -686,6 +703,17 @@ dependencies = [
"syn 2.0.100",
]
[[package]]
name = "der"
version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
dependencies = [
"const-oid",
"pem-rfc7468",
"zeroize",
]
[[package]]
name = "digest"
version = "0.10.7"
@ -693,6 +721,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer",
"const-oid",
"crypto-common",
"subtle",
]
@ -1465,6 +1494,9 @@ name = "lazy_static"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
dependencies = [
"spin",
]
[[package]]
name = "libc"
@ -1472,6 +1504,12 @@ version = "0.2.172"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
[[package]]
name = "libm"
version = "0.2.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9627da5196e5d8ed0b0495e61e518847578da83483c37288316d9b2e03a7f72"
[[package]]
name = "libsqlite3-sys"
version = "0.30.1"
@ -1611,6 +1649,43 @@ dependencies = [
"tempfile",
]
[[package]]
name = "num-bigint-dig"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151"
dependencies = [
"byteorder",
"lazy_static",
"libm",
"num-integer",
"num-iter",
"num-traits",
"rand",
"smallvec",
"zeroize",
]
[[package]]
name = "num-integer"
version = "0.1.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
dependencies = [
"num-traits",
]
[[package]]
name = "num-iter"
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.19"
@ -1618,6 +1693,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
"libm",
]
[[package]]
@ -1741,6 +1817,15 @@ dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "pem-rfc7468"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
dependencies = [
"base64ct",
]
[[package]]
name = "percent-encoding"
version = "2.3.1"
@ -1815,6 +1900,27 @@ dependencies = [
"futures-io",
]
[[package]]
name = "pkcs1"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
dependencies = [
"der",
"pkcs8",
"spki",
]
[[package]]
name = "pkcs8"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
dependencies = [
"der",
"spki",
]
[[package]]
name = "pkg-config"
version = "0.3.32"
@ -2010,6 +2116,26 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "rsa"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b"
dependencies = [
"const-oid",
"digest",
"num-bigint-dig",
"num-integer",
"num-traits",
"pkcs1",
"pkcs8",
"rand_core",
"signature",
"spki",
"subtle",
"zeroize",
]
[[package]]
name = "rustc-demangle"
version = "0.1.24"
@ -2121,6 +2247,7 @@ checksum = "21e61af841881c137d4bc8e0d8411cee9168548b404f9e4788e8af7e8f94bd4e"
dependencies = [
"async-stream",
"async-trait",
"chrono",
"futures-util",
"log",
"ouroboros",
@ -2188,6 +2315,7 @@ version = "0.32.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d99447c24da0cded00089e2021e1624af90878c65f7534319448d01da3df869d"
dependencies = [
"chrono",
"inherent",
"ordered-float",
"sea-query-derive",
@ -2199,6 +2327,7 @@ version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0019f47430f7995af63deda77e238c17323359af241233ec768aba1faea7608"
dependencies = [
"chrono",
"sea-query",
"sqlx",
]
@ -2317,6 +2446,17 @@ dependencies = [
"serde",
]
[[package]]
name = "sha1"
version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
dependencies = [
"cfg-if",
"cpufeatures",
"digest",
]
[[package]]
name = "sha2"
version = "0.10.8"
@ -2343,6 +2483,16 @@ version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]]
name = "signature"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
dependencies = [
"digest",
"rand_core",
]
[[package]]
name = "slab"
version = "0.4.9"
@ -2380,6 +2530,16 @@ dependencies = [
"lock_api",
]
[[package]]
name = "spki"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
dependencies = [
"base64ct",
"der",
]
[[package]]
name = "sqlx"
version = "0.8.5"
@ -2388,6 +2548,7 @@ checksum = "f3c3a85280daca669cfd3bcb68a337882a8bc57ec882f72c5d13a430613a738e"
dependencies = [
"sqlx-core",
"sqlx-macros",
"sqlx-mysql",
"sqlx-postgres",
"sqlx-sqlite",
]
@ -2400,6 +2561,7 @@ checksum = "f743f2a3cea30a58cd479013f75550e879009e3a02f616f18ca699335aa248c3"
dependencies = [
"base64",
"bytes",
"chrono",
"crc",
"crossbeam-queue",
"either",
@ -2459,6 +2621,7 @@ dependencies = [
"serde_json",
"sha2",
"sqlx-core",
"sqlx-mysql",
"sqlx-postgres",
"sqlx-sqlite",
"syn 2.0.100",
@ -2467,6 +2630,49 @@ dependencies = [
"url",
]
[[package]]
name = "sqlx-mysql"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0afdd3aa7a629683c2d750c2df343025545087081ab5942593a5288855b1b7a7"
dependencies = [
"atoi",
"base64",
"bitflags",
"byteorder",
"bytes",
"chrono",
"crc",
"digest",
"dotenvy",
"either",
"futures-channel",
"futures-core",
"futures-io",
"futures-util",
"generic-array",
"hex",
"hkdf",
"hmac",
"itoa",
"log",
"md-5",
"memchr",
"once_cell",
"percent-encoding",
"rand",
"rsa",
"serde",
"sha1",
"sha2",
"smallvec",
"sqlx-core",
"stringprep",
"thiserror 2.0.12",
"tracing",
"whoami",
]
[[package]]
name = "sqlx-postgres"
version = "0.8.5"
@ -2477,6 +2683,7 @@ dependencies = [
"base64",
"bitflags",
"byteorder",
"chrono",
"crc",
"dotenvy",
"etcetera",
@ -2511,6 +2718,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c26083e9a520e8eb87a06b12347679b142dc2ea29e6e409f805644a7a979a5bc"
dependencies = [
"atoi",
"chrono",
"flume",
"futures-channel",
"futures-core",

View file

@ -4,7 +4,7 @@ members = ["dpts-*"]
[workspace.dependencies]
dpts-core = {path = "dpts-core"}
dpts-migration = {path = "dpts-migration"}
chrono = "0.4"
chrono = {version = "0.4", features = ["serde"]}
clap = "4.5"
dotenv = "0.15.0"

View file

@ -8,7 +8,7 @@ repository.workspace = true
[dependencies]
dpts-migration = { workspace = true }
anyhow = "1.0"
async-graphql = "7.0"
async-graphql = {version = "7.0", features = ["chrono"]}
axum = "0.8"
chrono = {workspace = true}
clap = {workspace = true}
@ -25,5 +25,6 @@ features = [
"debug-print",
"runtime-tokio-native-tls",
"sqlx-sqlite",
"with-chrono",
]
default-features = false

View file

@ -2,3 +2,27 @@ mod record_detail;
mod record_header;
mod record_tag;
mod user;
pub use user::{
ActiveModel as UserActiveModel,
Entity as UserEntity,
Model as UserModel,
};
pub use record_detail::{
ActiveModel as RecordDetailActiveModel,
Entity as RecordDetailEntity,
Model as RecordDetailModel,
};
pub use record_header::{
ActiveModel as RecordHeaderActiveModel,
Entity as RecordHeaderEntity,
Model as RecordHeaderModel,
};
pub use record_tag::{
ActiveModel as RecordTagActiveModel,
Entity as RecordTagEntity,
Model as RecordTagModel,
};

View file

@ -13,6 +13,10 @@ pub struct Model {
#[serde(skip_deserializing)]
pub user_id: i32,
pub comment: String,
pub created_at: DateTimeWithTimeZone,
pub updated_at: DateTimeWithTimeZone,
#[sea_orm(indexed)]
pub recorded_at: DateTimeWithTimeZone,
}
#[derive(Copy, Clone, Debug, DeriveRelation, EnumIter)]

View file

@ -1,4 +1,5 @@
use async_graphql::*;
use chrono::{DateTime, FixedOffset,};
use sea_orm::entity::prelude::*;
use serde::{Deserialize, Serialize};
@ -11,6 +12,9 @@ pub struct Model {
pub id: i32,
#[sea_orm(unique, indexed)]
pub login_name: String,
pub password_hash: String,
pub created_at: DateTimeWithTimeZone,
pub updated_at: DateTimeWithTimeZone,
}
#[derive(Copy, Clone, Debug, DeriveRelation, EnumIter)]

View file

@ -1,6 +1,8 @@
use core::time::Duration;
use sea_orm::{ConnectOptions, Database};
use std::time::Duration;
use chrono::{offset, FixedOffset, Local, TimeZone};
use sea_orm::{entity::*, query::*, ConnectOptions, Database};
use dpts_migration::{Migrator, MigratorTrait};
use dpts_core::entity::*;
#[tokio::test]
async fn main() {
@ -16,6 +18,53 @@ async fn main() {
//.set_schema_search_path("my_schema"); // Setting default PostgreSQL schema
let db= Database::connect(opt).await.unwrap();
Migrator::fresh(&db).await.unwrap();
let local_date_time = Local::now();
let offset_date_time = local_date_time.with_timezone(local_date_time.offset());
let user = UserActiveModel{
login_name: Set("admin".to_owned()),
password_hash: Set("admin".to_owned()),
created_at: Set(offset_date_time),
updated_at: Set(offset_date_time),
..Default::default()
}.insert(&db)
.await.unwrap();
let record_tag = RecordTagActiveModel{
user_id: Set(user.id),
name: Set("test".to_owned()),
..Default::default()
}.insert(&db)
.await.unwrap();
let record_header = RecordHeaderActiveModel{
user_id: Set(user.id),
created_at: Set(offset_date_time),
updated_at: Set(offset_date_time),
recorded_at: Set(offset_date_time),
comment: Set("".to_owned()),
..Default::default()
}.insert(&db)
.await.unwrap();
RecordDetailActiveModel {
record_header_id: Set(record_header.id),
record_tag_id: Set(record_tag.id),
count: Set(1),
..Default::default()
}.insert(&db)
.await.unwrap();
RecordDetailActiveModel {
record_header_id: Set(record_header.id),
record_tag_id: Set(record_tag.id),
count: Set(2),
..Default::default()
}.insert(&db)
.await.unwrap();
Migrator::reset(&db).await.unwrap();
db.close().await.unwrap();
}

View file

@ -65,7 +65,7 @@ impl MigrationTrait for Migration {
.col(pk_auto(RecordDetail::Id))
.col(integer(RecordDetail::RecordHeaderId))
.col(integer(RecordDetail::RecordTagId))
.col(string(RecordDetail::Count))
.col(integer(RecordDetail::Count))
.foreign_key(
ForeignKey::create()
.name("FK_RecordDetail_RecordHeader")
@ -117,6 +117,10 @@ impl MigrationTrait for Migration {
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
// Replace the sample below with your own migration scripts
manager.drop_index(Index::drop().name("IDX_User_LoginName").to_owned()).await?;
manager.drop_index(Index::drop().name("IDX_RecordHeader_RecordedAt").to_owned()).await?;
manager.drop_index(Index::drop().name("IDX_RecordTag_Name").to_owned()).await?;
manager.drop_table(
Table::drop().table(RecordDetail::Table).to_owned()