diff --git a/migrations/20240530183519_init.down.sql b/migrations/20240530183519_init.down.sql index b3180c1..927abf1 100644 --- a/migrations/20240530183519_init.down.sql +++ b/migrations/20240530183519_init.down.sql @@ -1 +1,3 @@ -DROP DOMAIN ULID CASCADE; +DROP DOMAIN ulid CASCADE; +DROP EXTENSION IF EXISTS ltree; +DROP EXTENSION IF EXISTS "uuid-ossp"; diff --git a/migrations/20240530183519_init.up.sql b/migrations/20240530183519_init.up.sql index 7376d6c..c8820b9 100644 --- a/migrations/20240530183519_init.up.sql +++ b/migrations/20240530183519_init.up.sql @@ -1 +1,3 @@ -CREATE DOMAIN ULID AS CHAR(26); +CREATE DOMAIN ulid AS CHAR(26); +CREATE EXTENSION IF NOT EXISTS ltree; +CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; diff --git a/migrations/20240530193528_hersteller.up.sql b/migrations/20240530193528_hersteller.up.sql index 3f31597..bc1e778 100644 --- a/migrations/20240530193528_hersteller.up.sql +++ b/migrations/20240530193528_hersteller.up.sql @@ -1,6 +1,6 @@ CREATE TABLE IF NOT EXISTS hersteller ( hersteller_id UUID PRIMARY KEY, - id CHAR(26) UNIQUE NOT NULL, + id ULID UNIQUE NOT NULL, herstellername VARCHAR NOT NULL, erstellt_am TIMESTAMP WITH TIME ZONE NOT NULL, geaendert_am TIMESTAMP WITH TIME ZONE NOT NULL diff --git a/migrations/20240621222501_gruppen.up.sql b/migrations/20240621222501_gruppen.up.sql index 196dac2..5f79c4a 100644 --- a/migrations/20240621222501_gruppen.up.sql +++ b/migrations/20240621222501_gruppen.up.sql @@ -1,5 +1,6 @@ CREATE TABLE IF NOT EXISTS gruppen ( - id UUID PRIMARY KEY, + gruppe_id UUID PRIMARY KEY, + id ULID UNIQUE NOT NULL, gruppenname VARCHAR NOT NULL, erstellt_am TIMESTAMP WITH TIME ZONE NOT NULL, geaendert_am TIMESTAMP WITH TIME ZONE NOT NULL diff --git a/migrations/20240621222504_rollen.up.sql b/migrations/20240621222504_rollen.up.sql index 2612074..e7ecb1d 100644 --- a/migrations/20240621222504_rollen.up.sql +++ b/migrations/20240621222504_rollen.up.sql @@ -1,5 +1,6 @@ CREATE TABLE IF NOT EXISTS rollen ( - id UUID PRIMARY KEY, + rolle_id UUID PRIMARY KEY, + id ULID UNIQUE NOT NULL, rollenname VARCHAR NOT NULL, erstellt_am TIMESTAMP WITH TIME ZONE NOT NULL, geaendert_am TIMESTAMP WITH TIME ZONE NOT NULL diff --git a/migrations/20240621223132_rollen_gruppen.up.sql b/migrations/20240621223132_rollen_gruppen.up.sql index 1444497..2f6b4ef 100644 --- a/migrations/20240621223132_rollen_gruppen.up.sql +++ b/migrations/20240621223132_rollen_gruppen.up.sql @@ -5,12 +5,12 @@ CREATE TABLE IF NOT EXISTS rollen_gruppen ( CONSTRAINT pk_rollen_gruppen PRIMARY KEY (rolle_id, gruppe_id), CONSTRAINT fk_rollen_gruppen_gruppe FOREIGN KEY (gruppe_id) - REFERENCES gruppen (id) MATCH SIMPLE + REFERENCES gruppen (gruppe_id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT fk_rollen_gruppen_rolle FOREIGN KEY (rolle_id) - REFERENCES rollen (id) MATCH SIMPLE + REFERENCES rollen (rolle_id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE ) diff --git a/migrations/20241128220001_benutzer.up.sql b/migrations/20241128220001_benutzer.up.sql index 3dc9f1a..4b5be59 100644 --- a/migrations/20241128220001_benutzer.up.sql +++ b/migrations/20241128220001_benutzer.up.sql @@ -1,5 +1,6 @@ CREATE TABLE IF NOT EXISTS benutzer ( - id UUID PRIMARY KEY, + benutzer_id UUID PRIMARY KEY, + id ULID UNIQUE NOT NULL, kennung VARCHAR NOT NULL, nachname VARCHAR NOT NULL, vorname VARCHAR NOT NULL, diff --git a/migrations/20241128220014_benutzer_gruppen.up.sql b/migrations/20241128220014_benutzer_gruppen.up.sql index 64dd843..c6aeca2 100644 --- a/migrations/20241128220014_benutzer_gruppen.up.sql +++ b/migrations/20241128220014_benutzer_gruppen.up.sql @@ -5,12 +5,12 @@ CREATE TABLE IF NOT EXISTS benutzer_gruppen ( CONSTRAINT pk_benutzer_gruppen PRIMARY KEY (benutzer_id, gruppe_id), CONSTRAINT fk_benutzer_gruppen_benutzer FOREIGN KEY (benutzer_id) - REFERENCES benutzer (id) MATCH SIMPLE + REFERENCES benutzer (benutzer_id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT fk_benutzer_gruppen_gruppe FOREIGN KEY (gruppe_id) - REFERENCES gruppen (id) MATCH SIMPLE + REFERENCES gruppen (gruppe_id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE ) diff --git a/migrations/20241128220018_benutzer_rollen.up.sql b/migrations/20241128220018_benutzer_rollen.up.sql index 7e7cdc0..3b98a48 100644 --- a/migrations/20241128220018_benutzer_rollen.up.sql +++ b/migrations/20241128220018_benutzer_rollen.up.sql @@ -5,12 +5,12 @@ CREATE TABLE IF NOT EXISTS benutzer_rollen ( CONSTRAINT pk_benutzer_rollen PRIMARY KEY (benutzer_id, rolle_id), CONSTRAINT fk_benutzer_rollen_benutzer FOREIGN KEY (benutzer_id) - REFERENCES benutzer (id) MATCH SIMPLE + REFERENCES benutzer (benutzer_id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT fk_benutzer_rollen_rolle FOREIGN KEY (rolle_id) - REFERENCES rollen (id) MATCH SIMPLE + REFERENCES rollen (rolle_id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE ) diff --git a/migrations/20260528200947_struktur.down.sql b/migrations/20260528200947_struktur.down.sql new file mode 100644 index 0000000..9b1b2b6 --- /dev/null +++ b/migrations/20260528200947_struktur.down.sql @@ -0,0 +1 @@ +DROP TABLE struktur; diff --git a/migrations/20260528200947_struktur.up.sql b/migrations/20260528200947_struktur.up.sql new file mode 100644 index 0000000..c128f1d --- /dev/null +++ b/migrations/20260528200947_struktur.up.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS strukturen ( + id UUID PRIMARY KEY, + parent_id UUID REFERENCES strukturen (id), + dienststelle VARCHAR NOT NULL, + dienststelle_abk VARCHAR NOT NULL, + slug TEXT NOT NULL, + pfad LTREE +); diff --git a/src/domain.rs b/src/domain.rs index 51f5645..5474880 100644 --- a/src/domain.rs +++ b/src/domain.rs @@ -1,4 +1,4 @@ -pub mod benutzer; +// pub mod benutzer; pub mod gruppe; pub mod liegenschaft; pub mod rolle; diff --git a/src/domain/benutzer/model/benutzer.rs b/src/domain/benutzer/model/benutzer.rs index 16fa8dc..de67d55 100644 --- a/src/domain/benutzer/model/benutzer.rs +++ b/src/domain/benutzer/model/benutzer.rs @@ -3,14 +3,14 @@ use async_graphql::{ComplexObject, Context, FieldResult, SimpleObject}; use crate::{ dataloader::LoaderContext, domain::{gruppe::model::Gruppe, rolle::model::Rolle}, - scalar::Id, + scalar::Ulid, }; #[derive(sqlx::FromRow, SimpleObject)] #[graphql(complex)] pub struct Benutzer { - /// Die UUID eines Benutzers - pub id: Id, + /// Die ULid eines Benutzers + pub id: Ulid, /// Die Kennung des Benutzers pub kennung: String, diff --git a/src/domain/benutzer/model/benutzer_create_input.rs b/src/domain/benutzer/model/benutzer_create_input.rs index 3cf69d7..44c9f01 100644 --- a/src/domain/benutzer/model/benutzer_create_input.rs +++ b/src/domain/benutzer/model/benutzer_create_input.rs @@ -1,12 +1,13 @@ -use crate::scalar::Id; use async_graphql::InputObject; +use crate::scalar::Ulid; + #[derive(InputObject)] pub struct BenutzerCreateInput { // #[graphql(validator(min_length = 6, max_length = 8))] pub kennung: String, pub vorname: String, pub nachname: String, - pub rollen: Option>, - pub gruppen: Option>, + pub rollen: Option>, + pub gruppen: Option>, } diff --git a/src/domain/benutzer/model/benutzer_gruppen_ansicht.rs b/src/domain/benutzer/model/benutzer_gruppen_ansicht.rs index 273cc29..0ed7eaf 100644 --- a/src/domain/benutzer/model/benutzer_gruppen_ansicht.rs +++ b/src/domain/benutzer/model/benutzer_gruppen_ansicht.rs @@ -1,7 +1,7 @@ use async_graphql::{ComplexObject, Enum, SimpleObject}; use sqlx::Type; -use crate::scalar::{Id, Time}; +use crate::scalar::{Time, Ulid}; /// Aus welcher Quelle die Gruppe stammt. #[derive(Enum, Clone, Debug, Eq, Copy, PartialEq, Type)] @@ -21,7 +21,7 @@ pub enum Herkunft { #[graphql(complex)] pub struct GruppeAnsicht { /// Die UUID einer Gruppe - pub id: Id, + pub id: Ulid, /// Der Gruppenname pub gruppenname: String, diff --git a/src/domain/gruppe/dataloader/gruppen.rs b/src/domain/gruppe/dataloader/gruppen.rs index ee6600f..1498b3d 100644 --- a/src/domain/gruppe/dataloader/gruppen.rs +++ b/src/domain/gruppe/dataloader/gruppen.rs @@ -5,17 +5,17 @@ use std::sync::Arc; use crate::domain::gruppe::model::Gruppe; use crate::domain::gruppe::service::Service; -use crate::scalar::Id; +use crate::scalar::Ulid; pub struct GruppenLoader { pub pool: sqlx::PgPool, } -impl Loader for GruppenLoader { +impl Loader for GruppenLoader { type Value = Vec; type Error = Arc; - async fn load(&self, keys: &[Id]) -> Result, Self::Error> { + async fn load(&self, keys: &[Ulid]) -> Result, Self::Error> { let rows = Service::new(self.pool.clone()) .gruppe_dataloader(keys) .await?; diff --git a/src/domain/gruppe/entity.rs b/src/domain/gruppe/entity.rs index f351ba0..1dc20fd 100644 --- a/src/domain/gruppe/entity.rs +++ b/src/domain/gruppe/entity.rs @@ -1,2 +1,6 @@ pub mod gruppe; -pub use gruppe::Gruppe; + +pub use gruppe::GruppeDataloader; +pub use gruppe::GruppeErstellen; +pub use gruppe::GruppeLoeschen; +pub use gruppe::GruppeUpdate; diff --git a/src/domain/gruppe/entity/gruppe.rs b/src/domain/gruppe/entity/gruppe.rs index a6b4678..4e1761b 100644 --- a/src/domain/gruppe/entity/gruppe.rs +++ b/src/domain/gruppe/entity/gruppe.rs @@ -1,8 +1,30 @@ -use crate::scalar::{Id, Time}; +use sqlx::FromRow; -pub struct Gruppe { - pub id: Id, +use crate::scalar::{Id, Time, Ulid}; + +pub struct GruppeErstellen { + pub gruppe_id: Id, + pub id: Ulid, pub gruppenname: String, - pub erstellt_am: Option