moved migrations
All checks were successful
Tests / Run Go Tests (push) Successful in 2m7s
Arbeitszeitmessung Deploy / Build Webserver (push) Successful in 2m45s

This commit is contained in:
2026-01-18 22:50:51 +01:00
parent c10ab98997
commit fdda0ea669
20 changed files with 2 additions and 3 deletions

View File

@@ -18,10 +18,9 @@ RUN apk add --no-cache tzdata typst
WORKDIR /app
COPY --from=build /app/server /app/server
COPY ../migrations /app/migrations
COPY migrations /app/migrations
COPY ./doc/static /doc/static
COPY ./doc/templates /doc/templates
COPY doc /doc
COPY /static /app/static
ENTRYPOINT ["./server"]

View File

@@ -0,0 +1,16 @@
-- reverse: create "user_password" table
DROP TABLE "user_password";
-- reverse: create "wochen_report" table
DROP TABLE "wochen_report";
-- reverse: set comment to column: "geschlecht" on table: "personal_daten"
COMMENT ON COLUMN "personal_daten"."geschlecht" IS NULL;
-- reverse: create "personal_daten" table
DROP TABLE "personal_daten";
-- reverse: set comment to column: "geraet_id" on table: "anwesenheit"
COMMENT ON COLUMN "anwesenheit"."geraet_id" IS NULL;
-- reverse: set comment to column: "check_in_out" on table: "anwesenheit"
COMMENT ON COLUMN "anwesenheit"."check_in_out" IS NULL;
-- reverse: create "anwesenheit" table
DROP TABLE "anwesenheit";
-- reverse: create "abwesenheit" table
DROP TABLE "abwesenheit";

View File

@@ -0,0 +1,69 @@
ALTER DEFAULT PRIVILEGES FOR ROLE migrate
IN SCHEMA public
GRANT SELECT ON TABLES TO app_base;
ALTER DEFAULT PRIVILEGES FOR ROLE migrate
IN SCHEMA public
GRANT USAGE, SELECT ON SEQUENCES TO app_base;
-- create "abwesenheit" table
CREATE TABLE "abwesenheit" (
"counter_id" bigserial NOT NULL,
"card_uid" character varying(255) NULL,
"abwesenheit_typ" smallint NULL,
"datum" timestamptz NULL DEFAULT (now())::date,
PRIMARY KEY ("counter_id")
);
-- create "anwesenheit" table
CREATE TABLE "anwesenheit" (
"counter_id" bigserial NOT NULL,
"timestamp" timestamptz NULL DEFAULT CURRENT_TIMESTAMP,
"card_uid" character varying(255) NULL,
"check_in_out" smallint NULL,
"geraet_id" smallint NULL,
PRIMARY KEY ("counter_id")
);
-- set comment to column: "check_in_out" on table: "anwesenheit"
COMMENT ON COLUMN "anwesenheit"."check_in_out" IS '1=Check In 2=Check Out , 3=Check in Manuell, 4=Check out manuell255=Automatic Check Out';
-- set comment to column: "geraet_id" on table: "anwesenheit"
COMMENT ON COLUMN "anwesenheit"."geraet_id" IS 'ID des Lesegerätes';
-- create "personal_daten" table
CREATE TABLE "personal_daten" (
"personal_nummer" integer NOT NULL,
"aktiv_beschaeftigt" boolean NULL,
"vorname" character varying(255) NULL,
"nachname" character varying(255) NULL,
"geburtsdatum" date NULL,
"plz" character varying(255) NULL,
"adresse" character varying(255) NULL,
"geschlecht" smallint NULL,
"card_uid" character varying(255) NULL,
"hauptbeschaeftigungs_ort" smallint NULL,
"arbeitszeit_per_tag" real NULL,
"arbeitszeit_min_start" time NULL,
"arbeitszeit_max_ende" time NULL,
"vorgesetzter_pers_nr" integer NULL,
PRIMARY KEY ("personal_nummer")
);
-- set comment to column: "geschlecht" on table: "personal_daten"
COMMENT ON COLUMN "personal_daten"."geschlecht" IS '1==weiblich, 2==maennlich, 3==divers';
-- create "user_password" table
CREATE TABLE "user_password" (
"personal_nummer" integer NOT NULL,
"pass_hash" text NULL,
"zuletzt_geandert" timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY ("personal_nummer")
);
-- create "wochen_report" table
CREATE TABLE "wochen_report" (
"id" serial NOT NULL,
"personal_nummer" integer NULL,
"woche_start" date NULL,
"bestaetigt" boolean NULL DEFAULT false,
PRIMARY KEY ("id"),
CONSTRAINT "wochen_report_personal_nummer_woche_start_key" UNIQUE ("personal_nummer", "woche_start")
);
GRANT INSERT, UPDATE ON abwesenheit, anwesenheit, wochen_report, user_password TO app_base;
GRANT DELETE ON abwesenheit to app_base;

View File

@@ -0,0 +1,14 @@
-- reverse: remame "personal_daten" table
ALTER TABLE "s_personal_daten" RENAME TO "personal_daten";
-- reverse: create "s_anwesenheit_typen" table
DROP TABLE "s_anwesenheit_typen";
-- reverse: create "s_abwesenheit_typen" table
DROP TABLE "s_abwesenheit_typen";
-- reverse: modify "wochen_report" table
ALTER TABLE "wochen_report" DROP COLUMN "ueberstunden";
-- reverse: modify "anwesenheit" table
ALTER TABLE "anwesenheit" DROP COLUMN "anwesenheit_typ", ALTER COLUMN "check_in_out" DROP NOT NULL, ALTER COLUMN "card_uid" DROP NOT NULL;
-- reverse: rename a constraint from "personal_daten_pkey" to "s_personal_daten_pkey"
ALTER TABLE "s_personal_daten" RENAME CONSTRAINT "s_personal_daten_pkey" TO "personal_daten_pkey";

View File

@@ -0,0 +1,21 @@
-- modify "anwesenheit" table
ALTER TABLE "anwesenheit" ALTER COLUMN "card_uid" SET NOT NULL, ALTER COLUMN "check_in_out" SET NOT NULL, ADD COLUMN "anwesenheit_typ" smallint NULL;
-- modify "wochen_report" table
ALTER TABLE "wochen_report" ADD COLUMN "ueberstunden" smallint NULL;
-- create "s_abwesenheit_typen" table
CREATE TABLE "s_abwesenheit_typen" (
"abwesenheit_id" smallint NOT NULL,
"abwesenheit_name" character varying(255) NULL,
PRIMARY KEY ("abwesenheit_id")
);
-- create "s_anwesenheit_typen" table
CREATE TABLE "s_anwesenheit_typen" (
"anwesenheit_id" smallint NOT NULL,
"anwesenheit_name" character varying(255) NULL,
PRIMARY KEY ("anwesenheit_id")
);
-- rename "s_personal_daten" table
ALTER TABLE "personal_daten" RENAME TO "s_personal_daten";
-- rename a constraint from "personal_daten_pkey" to "s_personal_daten_pkey"
ALTER TABLE "s_personal_daten" RENAME CONSTRAINT "personal_daten_pkey" TO "s_personal_daten_pkey";

View File

@@ -0,0 +1,5 @@
-- update Funktion für pass_hash
DROP FUNCTION update_zuletzt_geandert;
DROP TRIGGER IF EXISTS pass_hash_update ON user_password;

View File

@@ -0,0 +1,19 @@
-- update Funktion für pass_hash
CREATE OR REPLACE FUNCTION update_zuletzt_geandert()
RETURNS TRIGGER AS $$
BEGIN
-- Nur wenn hash geändert wurde
IF NEW.pass_hash IS DISTINCT FROM OLD.pass_hash THEN
NEW.zuletzt_geandert = now();
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER pass_hash_update
BEFORE UPDATE ON user_password
FOR EACH ROW
EXECUTE FUNCTION update_zuletzt_geandert();
-- Adds crypto extension

View File

@@ -0,0 +1,6 @@
-- reverse: modify "wochen_report" table
ALTER TABLE "wochen_report" DROP COLUMN "arbeitszeit", ALTER COLUMN "ueberstunden" TYPE smallint;
-- reverse: modify "s_personal_daten" table
ALTER TABLE "s_personal_daten" DROP COLUMN "arbeitszeit_per_woche";
-- reverse: modify "s_abwesenheit_typen" table
ALTER TABLE "s_abwesenheit_typen" DROP COLUMN "arbeitszeit_equivalent";

View File

@@ -0,0 +1,6 @@
-- modify "s_abwesenheit_typen" table
ALTER TABLE "s_abwesenheit_typen" ADD COLUMN "arbeitszeit_equivalent" real NULL;
-- modify "s_personal_daten" table
ALTER TABLE "s_personal_daten" ADD COLUMN "arbeitszeit_per_woche" real NULL;
-- modify "wochen_report" table
ALTER TABLE "wochen_report" ALTER COLUMN "ueberstunden" TYPE real, ADD COLUMN "arbeitszeit" real NULL;

View File

@@ -0,0 +1,4 @@
-- reverse: modify "s_personal_daten" table
ALTER TABLE "s_personal_daten" ALTER COLUMN "nachname" DROP NOT NULL, ALTER COLUMN "vorname" DROP NOT NULL;
-- reverse: modify "anwesenheit" table
ALTER TABLE "anwesenheit" ALTER COLUMN "anwesenheit_typ" DROP NOT NULL, ALTER COLUMN "geraet_id" DROP NOT NULL, ALTER COLUMN "timestamp" DROP NOT NULL;

View File

@@ -0,0 +1,4 @@
-- modify "anwesenheit" table
ALTER TABLE "anwesenheit" ALTER COLUMN "timestamp" SET NOT NULL, ALTER COLUMN "geraet_id" SET NOT NULL, ALTER COLUMN "anwesenheit_typ" SET NOT NULL;
-- modify "s_personal_daten" table
ALTER TABLE "s_personal_daten" ALTER COLUMN "vorname" SET NOT NULL, ALTER COLUMN "nachname" SET NOT NULL;

View File

@@ -0,0 +1,7 @@
ALTER TABLE wochen_report
ALTER COLUMN ueberstunden TYPE float4
USING
extract(epoch from ueberstunden) / 3600.0,
ALTER COLUMN arbeitszeit TYPE float4
USING
extract(epoch from arbeitszeit) / 3600.0;

View File

@@ -0,0 +1,19 @@
ALTER TABLE wochen_report
ADD COLUMN ueberstunden_interval interval,
ADD COLUMN arbeitszeit_interval interval;
UPDATE wochen_report
SET
ueberstunden_interval = CASE WHEN ueberstunden IS NULL THEN NULL ELSE (ueberstunden::double precision * INTERVAL '1 hour') END,
arbeitszeit_interval = CASE WHEN arbeitszeit IS NULL THEN NULL ELSE (arbeitszeit::double precision * INTERVAL '1 hour') END;
-- when happy, drop old columns and rename new ones
ALTER TABLE wochen_report
DROP COLUMN ueberstunden,
DROP COLUMN arbeitszeit;
ALTER TABLE wochen_report
RENAME COLUMN ueberstunden_interval TO ueberstunden;
ALTER TABLE wochen_report
RENAME COLUMN arbeitszeit_interval TO arbeitszeit;

View File

@@ -0,0 +1,11 @@
-- reverse: modify "wochen_report" table
ALTER TABLE "wochen_report" ALTER COLUMN "personal_nummer" DROP NOT NULL;
-- reverse: modify "s_personal_daten" table
ALTER TABLE "s_anwesenheit_typen" ALTER COLUMN "anwesenheit_name" DROP NOT NULL;
-- reverse: set comment to column: "arbeitszeit_equivalent" on table: "s_abwesenheit_typen"
COMMENT ON COLUMN "s_abwesenheit_typen"."arbeitszeit_equivalent" IS NULL;
-- reverse: modify "s_abwesenheit_typen" table
ALTER TABLE "s_abwesenheit_typen" ALTER COLUMN "arbeitszeit_equivalent" DROP NOT NULL, ALTER COLUMN "abwesenheit_name" DROP NOT NULL;
-- reverse: modify "abwesenheit" table
ALTER TABLE "abwesenheit" DROP COLUMN "datum_to", ALTER COLUMN "datum_from" DROP NOT NULL, ALTER COLUMN "abwesenheit_typ" DROP NOT NULL, ALTER COLUMN "card_uid" DROP NOT NULL;
ALTER TABLE "abwesenheit" RENAME COLUMN "datum_from" TO "datum";

View File

@@ -0,0 +1,11 @@
-- modify "abwesenheit" table
ALTER TABLE "abwesenheit" RENAME COLUMN "datum" TO "datum_from";
ALTER TABLE "abwesenheit" ALTER COLUMN "card_uid" SET NOT NULL, ALTER COLUMN "abwesenheit_typ" SET NOT NULL, ALTER COLUMN "datum_from" SET NOT NULL, ADD COLUMN "datum_to" timestamptz;
-- modify "s_abwesenheit_typen" table
ALTER TABLE "s_abwesenheit_typen" ALTER COLUMN "abwesenheit_name" SET NOT NULL, ALTER COLUMN "arbeitszeit_equivalent" SET NOT NULL;
-- set comment to column: "arbeitszeit_equivalent" on table: "s_abwesenheit_typen"
COMMENT ON COLUMN "s_abwesenheit_typen"."arbeitszeit_equivalent" IS '0=keine Arbeitszeit; 1=Arbeitszeit auffüllen; 2=Arbeitszeit austauschen';
-- modify "s_anwesenheit_typen" table
ALTER TABLE "s_anwesenheit_typen" ALTER COLUMN "anwesenheit_name" SET NOT NULL;
-- modify "s_personal_daten" table
ALTER TABLE "wochen_report" ALTER COLUMN "personal_nummer" SET NOT NULL;

View File

@@ -0,0 +1,4 @@
-- reverse: modify "wochen_report" table
ALTER TABLE "wochen_report" DROP COLUMN "abwesenheiten", DROP COLUMN "anwesenheiten", ALTER COLUMN "arbeitszeit" DROP NOT NULL, ALTER COLUMN "ueberstunden" DROP NOT NULL, ALTER COLUMN "woche_start" DROP NOT NULL;
-- reverse: modify "abwesenheit" table
ALTER TABLE "abwesenheit" ALTER COLUMN "datum_to" DROP NOT NULL;

View File

@@ -0,0 +1,4 @@
-- modify "abwesenheit" table
ALTER TABLE "abwesenheit" ALTER COLUMN "datum_to" SET NOT NULL;
-- modify "wochen_report" table
ALTER TABLE "wochen_report" ALTER COLUMN "woche_start" SET NOT NULL, ALTER COLUMN "ueberstunden" SET NOT NULL, ALTER COLUMN "arbeitszeit" SET NOT NULL, ADD COLUMN "anwesenheiten" integer[] NULL, ADD COLUMN "abwesenheiten" integer[] NULL;

View File

@@ -0,0 +1,6 @@
-- reverse: create index "feiertage_unique_pro_jahr" to table: "s_feiertage"
DROP INDEX "feiertage_unique_pro_jahr";
-- reverse: create "s_feiertage" table
DROP TABLE "s_feiertage";
-- reverse: set comment to column: "arbeitszeit_equivalent" on table: "s_abwesenheit_typen"
COMMENT ON COLUMN "s_abwesenheit_typen"."arbeitszeit_equivalent" IS '0=keine Arbeitszeit; 1=Arbeitszeit auffüllen; 2=Arbeitszeit austauschen';

View File

@@ -0,0 +1,15 @@
-- set comment to column: "arbeitszeit_equivalent" on table: "s_abwesenheit_typen"
COMMENT ON COLUMN "s_abwesenheit_typen"."arbeitszeit_equivalent" IS '0=keine Arbeitszeit; -1=Arbeitszeit auffüllen; <=1 - 100 => Arbeitszeit pro Tag prozentual';
-- create "s_feiertage" table
CREATE TABLE "s_feiertage" (
"counter_id" serial NOT NULL,
"datum" date NOT NULL,
"name" character varying(100) NOT NULL,
"wiederholen" smallint NOT NULL DEFAULT 0,
"arbeitszeit_equivalent" smallint NOT NULL DEFAULT 100,
PRIMARY KEY ("counter_id")
);
-- create index "feiertage_unique_pro_jahr" to table: "s_feiertage"
CREATE UNIQUE INDEX "feiertage_unique_pro_jahr" ON "s_feiertage" ((EXTRACT(year FROM datum)), "name");
GRANT INSERT, UPDATE ON s_feiertage TO app_base;

View File

@@ -0,0 +1,10 @@
h1:1lrLZOm9nGe6v1/TrR1Ij8LBRDCY2igXwwUB+XqEIrc=
20250901201159_initial.up.sql h1:Mb1RlVdFvcxqU9HrSK6oNeURqFa3O4KzB3rDa+6+3gc=
20250901201250_control_tables.up.sql h1:a5LATgR/CRiC4GsqxkJ94TyJOxeTcW74eCnodIy+c1E=
20250901201710_triggers_extension.up.sql h1:z9b6Hk9btE2Ns4mU7B16HjvYBP6EEwHAXVlvPpkn978=
20250903221313_overtime.up.sql h1:t/B435ShW5ZEnzC81jRABWVZ5gNm7tPZPnOO6/ZY6ow=
20250903233030_non_null_contraints.up.sql h1:YKeYgazfh+jPyh7hFT/pV+By8eHnk1taXnlgSLyXSA0=
20250904114004_intervals.up.sql h1:gDdN8cJ4xH1vQhAbbhqD5lwdyEO1N9EIqEYkmWGiWIU=
20250916093608_kurzarbeit.up.sql h1:yDAAMLyUXz6b7+MI6XK/HZMPzutKoT2NNNOCjFaqSts=
20251013212224_buchungs_array.up.sql h1:mbhvnwMUkEFFQQ41NC47auqxbtvNkztziWvpLDFm6tA=
20251217215955_feiertage.up.sql h1:PipbYvfL8YtsidgbJ3oEHYrmiNzffQ7veyaGAxINltE=