Update for db

This commit is contained in:
2025-06-16 08:03:02 +02:00
parent 15d8f488d6
commit 6e7ac29a27
9 changed files with 229 additions and 2 deletions

0
migrations/.keep Normal file
View File

View File

@@ -0,0 +1,6 @@
-- This file was automatically created by Diesel to setup helper functions
-- and other internal bookkeeping. This file is safe to edit, any future
-- changes will be added to existing projects as new migrations.
DROP FUNCTION IF EXISTS diesel_manage_updated_at(_tbl regclass);
DROP FUNCTION IF EXISTS diesel_set_updated_at();

View File

@@ -0,0 +1,36 @@
-- This file was automatically created by Diesel to setup helper functions
-- and other internal bookkeeping. This file is safe to edit, any future
-- changes will be added to existing projects as new migrations.
-- Sets up a trigger for the given table to automatically set a column called
-- `updated_at` whenever the row is modified (unless `updated_at` was included
-- in the modified columns)
--
-- # Example
--
-- ```sql
-- CREATE TABLE users (id SERIAL PRIMARY KEY, updated_at TIMESTAMP NOT NULL DEFAULT NOW());
--
-- SELECT diesel_manage_updated_at('users');
-- ```
CREATE OR REPLACE FUNCTION diesel_manage_updated_at(_tbl regclass) RETURNS VOID AS $$
BEGIN
EXECUTE format('CREATE TRIGGER set_updated_at BEFORE UPDATE ON %s
FOR EACH ROW EXECUTE PROCEDURE diesel_set_updated_at()', _tbl);
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION diesel_set_updated_at() RETURNS trigger AS $$
BEGIN
IF (
NEW IS DISTINCT FROM OLD AND
NEW.updated_at IS NOT DISTINCT FROM OLD.updated_at
) THEN
NEW.updated_at := current_timestamp;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

View File

@@ -0,0 +1,11 @@
-- This file should undo anything in `up.sql`
DROP INDEX IF EXISTS idx_icon_name;
DROP INDEX IF EXISTS idx_resource_name;
DROP INDEX IF EXISTS idx_resource_title;
DROP INDEX IF EXISTS idx_recipe_type;
DROP TABLE IF EXISTS "ingredient";
DROP TABLE IF EXISTS "recipe";
DROP TABLE IF EXISTS "resource";
DROP TABLE IF EXISTS "icon";

View File

@@ -0,0 +1,56 @@
CREATE TABLE "icon"(
"id" UUID NOT NULL PRIMARY KEY,
"name" VARCHAR(255) NOT NULL,
"content_type" VARCHAR(255),
"url" VARCHAR(512),
"width" INT4,
"height" INT4,
"state" JSON
);
CREATE TABLE "resource"(
"id" UUID NOT NULL PRIMARY KEY,
"name" VARCHAR(255) NOT NULL,
"title" VARCHAR(255) NOT NULL,
"url" VARCHAR(512),
"icon" UUID,
"state" JSON,
FOREIGN KEY ("icon") REFERENCES "icon"("id")
);
CREATE TABLE "recipe"(
"id" UUID NOT NULL PRIMARY KEY,
"resource" UUID NOT NULL,
"recipe_type" VARCHAR(50) NOT NULL,
"duration" INT4 NOT NULL,
"state" JSON,
FOREIGN KEY ("resource") REFERENCES "resource"("id")
);
CREATE TABLE "ingredient"(
"id" UUID NOT NULL PRIMARY KEY,
"resource" UUID NOT NULL,
"quantity" INT4 NOT NULL,
"state" JSON,
"recipe" UUID NOT NULL,
FOREIGN KEY ("resource") REFERENCES "resource"("id"),
FOREIGN KEY ("recipe") REFERENCES "recipe"("id")
);
CREATE INDEX IF NOT EXISTS idx_icon_name
ON icon USING btree
(name COLLATE pg_catalog."default" ASC NULLS LAST);
CREATE INDEX IF NOT EXISTS idx_recipe_type
ON recipe USING btree
(recipe_type COLLATE pg_catalog."default" ASC NULLS LAST);
CREATE INDEX IF NOT EXISTS idx_resource_name
ON resource USING btree
(name COLLATE pg_catalog."default" ASC NULLS LAST);
CREATE INDEX IF NOT EXISTS idx_resource_title
ON resource USING btree
(title COLLATE pg_catalog."default" ASC NULLS LAST);