migration GeräteEvents hinzugefügt; Entities erstellt
This commit is contained in:
parent
e94bc657e8
commit
530b8c31d6
15
README.md
15
README.md
@ -1,2 +1,17 @@
|
|||||||
# HIGurke
|
# HIGurke
|
||||||
|
|
||||||
|
## Generate Seaography entities
|
||||||
|
|
||||||
|
```console
|
||||||
|
# List all available commands
|
||||||
|
sea-orm-cli -h
|
||||||
|
|
||||||
|
# List all subcommands available in `generate` command
|
||||||
|
sea-orm-cli generate -h
|
||||||
|
|
||||||
|
# Show how to use `generate entity` subcommand
|
||||||
|
sea-orm-cli generate entity -h
|
||||||
|
|
||||||
|
# Generate Seaography entities
|
||||||
|
sea-orm-cli generate entity --output-dir ./database/src/entities --with-serde both --with-copy-enums
|
||||||
|
```
|
||||||
|
43
database/src/entities/benutzer.rs
Normal file
43
database/src/entities/benutzer.rs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.4
|
||||||
|
|
||||||
|
use sea_orm::entity::prelude::*;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)]
|
||||||
|
#[sea_orm(table_name = "benutzer")]
|
||||||
|
pub struct Model {
|
||||||
|
#[sea_orm(primary_key, auto_increment = false)]
|
||||||
|
pub id: Uuid,
|
||||||
|
#[sea_orm(unique)]
|
||||||
|
pub e_mail: String,
|
||||||
|
#[sea_orm(unique)]
|
||||||
|
pub kennung: String,
|
||||||
|
pub password_hash: String,
|
||||||
|
pub nachname: String,
|
||||||
|
pub vorname: String,
|
||||||
|
pub erstellt_am: DateTimeWithTimeZone,
|
||||||
|
pub geaendert_am: DateTimeWithTimeZone,
|
||||||
|
pub ist_aktiv: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
|
||||||
|
pub enum Relation {
|
||||||
|
#[sea_orm(has_one = "super::hardware::Entity")]
|
||||||
|
Hardware,
|
||||||
|
#[sea_orm(has_many = "super::hardware_events::Entity")]
|
||||||
|
HardwareEvents,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Related<super::hardware::Entity> for Entity {
|
||||||
|
fn to() -> RelationDef {
|
||||||
|
Relation::Hardware.def()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Related<super::hardware_events::Entity> for Entity {
|
||||||
|
fn to() -> RelationDef {
|
||||||
|
Relation::HardwareEvents.def()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ActiveModelBehavior for ActiveModel {}
|
42
database/src/entities/hardware.rs
Normal file
42
database/src/entities/hardware.rs
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.4
|
||||||
|
|
||||||
|
use super::sea_orm_active_enums::StatusType;
|
||||||
|
use sea_orm::entity::prelude::*;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)]
|
||||||
|
#[sea_orm(table_name = "hardware")]
|
||||||
|
pub struct Model {
|
||||||
|
#[sea_orm(primary_key, auto_increment = false)]
|
||||||
|
pub id: Uuid,
|
||||||
|
pub name: String,
|
||||||
|
#[sea_orm(unique)]
|
||||||
|
pub seriennummer: String,
|
||||||
|
#[sea_orm(column_type = "Text")]
|
||||||
|
pub beschreibung: String,
|
||||||
|
pub status: StatusType,
|
||||||
|
#[sea_orm(unique)]
|
||||||
|
pub benutzer_id: Uuid,
|
||||||
|
pub erstellt_am: DateTimeWithTimeZone,
|
||||||
|
pub geaendert_am: DateTimeWithTimeZone,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
|
||||||
|
pub enum Relation {
|
||||||
|
#[sea_orm(
|
||||||
|
belongs_to = "super::benutzer::Entity",
|
||||||
|
from = "Column::BenutzerId",
|
||||||
|
to = "super::benutzer::Column::Id",
|
||||||
|
on_update = "NoAction",
|
||||||
|
on_delete = "SetNull"
|
||||||
|
)]
|
||||||
|
Benutzer,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Related<super::benutzer::Entity> for Entity {
|
||||||
|
fn to() -> RelationDef {
|
||||||
|
Relation::Benutzer.def()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ActiveModelBehavior for ActiveModel {}
|
41
database/src/entities/hardware_events.rs
Normal file
41
database/src/entities/hardware_events.rs
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.4
|
||||||
|
|
||||||
|
use super::sea_orm_active_enums::EventType;
|
||||||
|
use sea_orm::entity::prelude::*;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)]
|
||||||
|
#[sea_orm(table_name = "hardware_events")]
|
||||||
|
pub struct Model {
|
||||||
|
#[sea_orm(primary_key, auto_increment = false)]
|
||||||
|
pub id: Uuid,
|
||||||
|
#[sea_orm(unique)]
|
||||||
|
pub hardware_id: Uuid,
|
||||||
|
#[sea_orm(unique)]
|
||||||
|
pub event: EventType,
|
||||||
|
pub payload: Json,
|
||||||
|
pub version: i32,
|
||||||
|
#[sea_orm(unique)]
|
||||||
|
pub erstellt_am: DateTimeWithTimeZone,
|
||||||
|
pub benutzer_id: Uuid,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
|
||||||
|
pub enum Relation {
|
||||||
|
#[sea_orm(
|
||||||
|
belongs_to = "super::benutzer::Entity",
|
||||||
|
from = "Column::BenutzerId",
|
||||||
|
to = "super::benutzer::Column::Id",
|
||||||
|
on_update = "NoAction",
|
||||||
|
on_delete = "SetNull"
|
||||||
|
)]
|
||||||
|
Benutzer,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Related<super::benutzer::Entity> for Entity {
|
||||||
|
fn to() -> RelationDef {
|
||||||
|
Relation::Benutzer.def()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ActiveModelBehavior for ActiveModel {}
|
8
database/src/entities/mod.rs
Normal file
8
database/src/entities/mod.rs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.4
|
||||||
|
|
||||||
|
pub mod prelude;
|
||||||
|
|
||||||
|
pub mod benutzer;
|
||||||
|
pub mod hardware;
|
||||||
|
pub mod hardware_events;
|
||||||
|
pub mod sea_orm_active_enums;
|
5
database/src/entities/prelude.rs
Normal file
5
database/src/entities/prelude.rs
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.4
|
||||||
|
|
||||||
|
pub use super::benutzer::Entity as Benutzer;
|
||||||
|
pub use super::hardware::Entity as Hardware;
|
||||||
|
pub use super::hardware_events::Entity as HardwareEvents;
|
33
database/src/entities/sea_orm_active_enums.rs
Normal file
33
database/src/entities/sea_orm_active_enums.rs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.4
|
||||||
|
|
||||||
|
use sea_orm::entity::prelude::*;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Copy, Serialize, Deserialize)]
|
||||||
|
#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "event_type")]
|
||||||
|
pub enum EventType {
|
||||||
|
#[sea_orm(string_value = "erstellt")]
|
||||||
|
Erstellt,
|
||||||
|
#[sea_orm(string_value = "geaendert")]
|
||||||
|
Geaendert,
|
||||||
|
#[sea_orm(string_value = "geloescht")]
|
||||||
|
Geloescht,
|
||||||
|
}
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Copy, Serialize, Deserialize)]
|
||||||
|
#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "status_type")]
|
||||||
|
pub enum StatusType {
|
||||||
|
#[sea_orm(string_value = "verfuegbar")]
|
||||||
|
Verfuegbar,
|
||||||
|
#[sea_orm(string_value = "in_benutzung")]
|
||||||
|
InBenutzung,
|
||||||
|
#[sea_orm(string_value = "in_wartung")]
|
||||||
|
InWartung,
|
||||||
|
#[sea_orm(string_value = "in_reparatur")]
|
||||||
|
InReparatur,
|
||||||
|
#[sea_orm(string_value = "verloren")]
|
||||||
|
Verloren,
|
||||||
|
#[sea_orm(string_value = "defekt")]
|
||||||
|
Defekt,
|
||||||
|
#[sea_orm(string_value = "re_invest")]
|
||||||
|
ReInvest,
|
||||||
|
}
|
38
database/src/models/benutzer.rs
Normal file
38
database/src/models/benutzer.rs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#[derive(Debug, Serialize, Deserialize, Validate)]
|
||||||
|
pub struct ErstelleBenutzerDto {
|
||||||
|
#[validate(length(min = 10, max = 255))]
|
||||||
|
pub e_mail: String,
|
||||||
|
|
||||||
|
#[validate(length(min = 8, max = 8))]
|
||||||
|
pub kennung: String,
|
||||||
|
|
||||||
|
#[validate(length(max = 100))]
|
||||||
|
pub nachname: String,
|
||||||
|
|
||||||
|
#[validate(length(max = 100))]
|
||||||
|
pub vorname: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Serialize)]
|
||||||
|
pub struct DeviceResponse {
|
||||||
|
pub id: Uuid,
|
||||||
|
pub name: String,
|
||||||
|
pub serial_number: String,
|
||||||
|
pub description: Option<String>,
|
||||||
|
pub status: String,
|
||||||
|
pub created_at: chrono::DateTime<chrono::Utc>,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conversion from Entity to Response Model
|
||||||
|
impl From<entities::devices::Model> for DeviceResponse {
|
||||||
|
fn from(entity: entities::devices::Model) -> Self {
|
||||||
|
Self {
|
||||||
|
id: entity.id,
|
||||||
|
name: entity.name,
|
||||||
|
serial_number: entity.serial_number,
|
||||||
|
description: entity.description,
|
||||||
|
status: entity.status,
|
||||||
|
created_at: entity.created_at,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1
database/src/models/mod.rs
Normal file
1
database/src/models/mod.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
pub mod benutzer;
|
1
database/src/models/prelude.rs
Normal file
1
database/src/models/prelude.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
pub use super::benutzer::ErstelleBenutzerDto as ErstelleBenutzer;
|
@ -2,6 +2,7 @@ pub use sea_orm_migration::prelude::*;
|
|||||||
|
|
||||||
mod m20250202_000233_benutzer;
|
mod m20250202_000233_benutzer;
|
||||||
mod m20250202_225521_hardware;
|
mod m20250202_225521_hardware;
|
||||||
|
mod m20250203_214832_hardware_events;
|
||||||
|
|
||||||
pub struct Migrator;
|
pub struct Migrator;
|
||||||
|
|
||||||
@ -11,6 +12,7 @@ impl MigratorTrait for Migrator {
|
|||||||
vec![
|
vec![
|
||||||
Box::new(m20250202_000233_benutzer::Migration),
|
Box::new(m20250202_000233_benutzer::Migration),
|
||||||
Box::new(m20250202_225521_hardware::Migration),
|
Box::new(m20250202_225521_hardware::Migration),
|
||||||
|
Box::new(m20250203_214832_hardware_events::Migration),
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,8 +9,8 @@ use crate::m20250202_000233_benutzer::Benutzer;
|
|||||||
pub struct Migration;
|
pub struct Migration;
|
||||||
|
|
||||||
#[derive(DeriveIden)]
|
#[derive(DeriveIden)]
|
||||||
#[sea_orm(iden = "status_type_enum")]
|
#[sea_orm(iden = "status_type")]
|
||||||
struct StatusTypeEnum;
|
struct StatusType;
|
||||||
|
|
||||||
#[derive(DeriveIden, EnumIter)]
|
#[derive(DeriveIden, EnumIter)]
|
||||||
pub enum StatusVarianten {
|
pub enum StatusVarianten {
|
||||||
@ -36,7 +36,7 @@ impl MigrationTrait for Migration {
|
|||||||
manager
|
manager
|
||||||
.create_type(
|
.create_type(
|
||||||
Type::create()
|
Type::create()
|
||||||
.as_enum(StatusTypeEnum)
|
.as_enum(StatusType)
|
||||||
.values(StatusVarianten::iter())
|
.values(StatusVarianten::iter())
|
||||||
.to_owned(),
|
.to_owned(),
|
||||||
)
|
)
|
||||||
@ -53,7 +53,7 @@ impl MigrationTrait for Migration {
|
|||||||
.col(text(Hardware::Beschreibung))
|
.col(text(Hardware::Beschreibung))
|
||||||
.col(enumeration(
|
.col(enumeration(
|
||||||
Hardware::Status,
|
Hardware::Status,
|
||||||
StatusTypeEnum,
|
StatusType,
|
||||||
StatusVarianten::iter(),
|
StatusVarianten::iter(),
|
||||||
))
|
))
|
||||||
.col(uuid(Hardware::BenutzerId))
|
.col(uuid(Hardware::BenutzerId))
|
||||||
@ -71,7 +71,8 @@ impl MigrationTrait for Migration {
|
|||||||
ForeignKey::create()
|
ForeignKey::create()
|
||||||
.name("fk_hardware_benutzer")
|
.name("fk_hardware_benutzer")
|
||||||
.from(Hardware::Table, Hardware::BenutzerId)
|
.from(Hardware::Table, Hardware::BenutzerId)
|
||||||
.to(Benutzer::Table, Benutzer::Id),
|
.to(Benutzer::Table, Benutzer::Id)
|
||||||
|
.on_delete(ForeignKeyAction::SetNull),
|
||||||
)
|
)
|
||||||
.to_owned(),
|
.to_owned(),
|
||||||
)
|
)
|
||||||
@ -106,7 +107,7 @@ impl MigrationTrait for Migration {
|
|||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
manager
|
manager
|
||||||
.drop_type(Type::drop().name(StatusTypeEnum).to_owned())
|
.drop_type(Type::drop().name(StatusType).to_owned())
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
123
migration/src/m20250203_214832_hardware_events.rs
Normal file
123
migration/src/m20250203_214832_hardware_events.rs
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
use chrono::Utc;
|
||||||
|
use extension::postgres::Type;
|
||||||
|
use sea_orm::{EnumIter, Iterable};
|
||||||
|
use sea_orm_migration::{prelude::*, schema::*};
|
||||||
|
|
||||||
|
use crate::m20250202_000233_benutzer::Benutzer;
|
||||||
|
|
||||||
|
#[derive(DeriveMigrationName)]
|
||||||
|
pub struct Migration;
|
||||||
|
|
||||||
|
#[derive(DeriveIden)]
|
||||||
|
#[sea_orm(iden = "event_type")]
|
||||||
|
struct EventType;
|
||||||
|
|
||||||
|
#[derive(DeriveIden, EnumIter)]
|
||||||
|
pub enum EventVarianten {
|
||||||
|
#[sea_orm(iden = "erstellt", string_value = "Erstellt")]
|
||||||
|
Erstellt,
|
||||||
|
#[sea_orm(iden = "geaendert", string_value = "Geändert")]
|
||||||
|
Geaendert,
|
||||||
|
#[sea_orm(iden = "geloescht", string_value = "Gelöscht")]
|
||||||
|
Geloescht,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
impl MigrationTrait for Migration {
|
||||||
|
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||||||
|
manager
|
||||||
|
.create_type(
|
||||||
|
Type::create()
|
||||||
|
.as_enum(EventType)
|
||||||
|
.values(EventVarianten::iter())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
manager
|
||||||
|
.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(HardwareEvents::Table)
|
||||||
|
.if_not_exists()
|
||||||
|
.col(pk_uuid(HardwareEvents::Id))
|
||||||
|
.col(uuid(HardwareEvents::HardwareId))
|
||||||
|
.col(enumeration(
|
||||||
|
HardwareEvents::Event,
|
||||||
|
EventType,
|
||||||
|
EventVarianten::iter(),
|
||||||
|
))
|
||||||
|
.col(json(HardwareEvents::Payload))
|
||||||
|
.col(integer(HardwareEvents::Version).not_null().default(1))
|
||||||
|
.col(
|
||||||
|
timestamp_with_time_zone(HardwareEvents::ErstelltAm)
|
||||||
|
.not_null()
|
||||||
|
.default(Utc::now()),
|
||||||
|
)
|
||||||
|
.col(uuid(HardwareEvents::BenutzerId))
|
||||||
|
.foreign_key(
|
||||||
|
ForeignKey::create()
|
||||||
|
.name("fk_hardware_event_benutzer")
|
||||||
|
.from(HardwareEvents::Table, HardwareEvents::BenutzerId)
|
||||||
|
.to(Benutzer::Table, Benutzer::Id)
|
||||||
|
.on_delete(ForeignKeyAction::SetNull),
|
||||||
|
)
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
manager
|
||||||
|
.create_index(
|
||||||
|
Index::create()
|
||||||
|
.unique()
|
||||||
|
.name("idx_hardware_events_hardware_id")
|
||||||
|
.table(HardwareEvents::Table)
|
||||||
|
.col(HardwareEvents::HardwareId)
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
manager
|
||||||
|
.create_index(
|
||||||
|
Index::create()
|
||||||
|
.unique()
|
||||||
|
.name("idx_hardware_events_erstellt_am")
|
||||||
|
.table(HardwareEvents::Table)
|
||||||
|
.col(HardwareEvents::ErstelltAm)
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
manager
|
||||||
|
.create_index(
|
||||||
|
Index::create()
|
||||||
|
.unique()
|
||||||
|
.name("idx_hardware_events_event")
|
||||||
|
.table(HardwareEvents::Table)
|
||||||
|
.col(HardwareEvents::Event)
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||||||
|
manager
|
||||||
|
.drop_table(Table::drop().table(HardwareEvents::Table).to_owned())
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
manager
|
||||||
|
.drop_type(Type::drop().name(EventType).to_owned())
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(DeriveIden)]
|
||||||
|
enum HardwareEvents {
|
||||||
|
Table,
|
||||||
|
Id,
|
||||||
|
HardwareId,
|
||||||
|
Event,
|
||||||
|
Payload,
|
||||||
|
Version,
|
||||||
|
ErstelltAm,
|
||||||
|
BenutzerId,
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user