From 5dbdd5d84dd13227388474ddfa1fd73d4e5a282e Mon Sep 17 00:00:00 2001 From: aleidk Date: Fri, 7 Feb 2025 13:32:59 -0300 Subject: [PATCH] feat: create entry form --- .justfile | 2 +- docker/Dockerfile | 2 +- docker/docker-compose.yaml | 10 ++ src/app/entries/create.sql | 107 ++++++++++++++++++ src/app/index.sql | 21 +++- src/{shared => app}/style.css | 0 ...07152518_add_table_desambiguator_types.sql | 35 ++++++ src/shared/shell.json | 2 +- 8 files changed, 174 insertions(+), 5 deletions(-) create mode 100644 src/app/entries/create.sql rename src/{shared => app}/style.css (100%) create mode 100644 src/db/migrations/20250207152518_add_table_desambiguator_types.sql diff --git a/.justfile b/.justfile index cfd6374..36d7661 100644 --- a/.justfile +++ b/.justfile @@ -8,7 +8,7 @@ compose-exec +ARGS: [working-directory: 'docker'] dev: - docker compose up + docker compose up --build dbmate +ARGS: (compose-exec "index dbmate" ARGS) diff --git a/docker/Dockerfile b/docker/Dockerfile index 4cadceb..0fdea99 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,7 +1,7 @@ FROM ghcr.io/linuxcontainers/debian-slim:latest COPY --from=ghcr.io/amacneil/dbmate /usr/local/bin/dbmate /usr/local/bin/dbmate -COPY --from=lovasoa/sqlpage:latest /usr/local/bin/sqlpage /usr/local/bin/sqlpage +COPY --from=lovasoa/sqlpage:main /usr/local/bin/sqlpage /usr/local/bin/sqlpage WORKDIR /app diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index af21718..9863428 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -17,5 +17,15 @@ services: volumes: - db_data:/var/lib/postgresql/data + adminer: + image: ghcr.io/shyim/adminerevo:latest + restart: always + ports: + - 8080:8080 + env_file: ../.env + environment: + ADMINER_DEFAULT_DRIVER: psql + ADMINER_DEFAULT_SERVER: db + volumes: db_data: diff --git a/src/app/entries/create.sql b/src/app/entries/create.sql new file mode 100644 index 0000000..3a33cc4 --- /dev/null +++ b/src/app/entries/create.sql @@ -0,0 +1,107 @@ +SELECT + 'dynamic' AS component, + sqlpage.read_file_as_text('../shared/shell.json') AS properties; + +SELECT + 'form' AS component, + TRUE AS auto_submit; + +SELECT + 'source_id' AS name, + 'Source - group' AS label, + 'select' AS "type", + FALSE AS autocomplete, + ( + SELECT + jsonb_agg( + jsonb_build_object( + 'label', + format('%s - %s', src.name, lg.name), + 'value', + lg.id, + 'selected', + lg.id = $source_id :: int + ) + ORDER BY + src.name, + lg.name + ) + FROM + public.logic_groups AS lg + INNER JOIN public.sources AS src ON lg.source_id = src.id + ) AS options; + +SELECT + 'form' AS component, + 'Create' AS validate; + +SELECT + 'Date' AS label, + 'date' AS name, + 'date' AS "type", + CURRENT_DATE AS value, + 6 AS width; + +SELECT + 'Time' AS label, + 'time' AS name, + 'time' AS "type", + LOCALTIME(0) AS value, + 6 AS width; + +SELECT + 'UID' AS label, + 'uid' AS name, + 'SOURCE:LOGIC-GROUP:DESAMBIGUATOR:ATOM' AS placeholder, + TRUE AS disabled; + +-- ── Desambiguator Definitions Start ───────────────────────────────── +SET + input = +SELECT + jsonb_build_object( + 'id', + dtp.id, + 'input_type', + dtp.input_type, + 'placeholder', + dtp.placeholder + ) AS obj +FROM + public.desambiguator_types dtp + INNER JOIN public.sources AS src ON src.desambiguator_type_id = dtp.id + INNER JOIN public.logic_groups AS lg ON lg.source_id = src.id +WHERE + lg.id = $source_id :: int; + +SELECT + 'Desambiguator' AS label, + 'desambiguator' AS name, + $input :: jsonb ->> 'input_type' AS "type", + $input :: jsonb ->> 'placeholder' AS placeholder, + 6 AS width +WHERE + $input :: jsonb ->> 'id' = '1'; + +SELECT + 'Desambiguator' AS label, + 'desambiguator' AS name, + $input :: jsonb ->> 'input_type' AS "type", + $input :: jsonb ->> 'placeholder' AS placeholder, + CURRENT_DATE AS value, + 6 AS width +WHERE + $input :: jsonb ->> 'id' = '2'; + +-- ── Desambiguator Definitions End ─────────────────────────────────── +SELECT + 'Atom' AS label, + 'atom' AS name, + 'FFF' AS placeholder, + 6 AS width; + +SELECT + 'Description' AS label, + 'text' AS name, + 'What is this entry about?' AS placeholder, + 'textarea' AS "type"; diff --git a/src/app/index.sql b/src/app/index.sql index e6efa5b..f7e1c35 100644 --- a/src/app/index.sql +++ b/src/app/index.sql @@ -4,17 +4,34 @@ SELECT SELECT 'form' AS component, - 'entries' AS "action", + 'entries/search.sql' AS "action", 'Entries' AS title, - 'Search' AS validate, + '' AS validate, 'GET' AS method; SELECT 'query' AS name, '' AS label, 'Search query...' AS placeholder, + 10 AS width, TRUE AS autofocus; +SELECT + 'search' AS name, + '' AS label, + 'Search' AS value, + 2 AS width, + 'btn btn-info' AS class, + 'submit' AS "type"; + +SELECT + 'new' AS name, + '' AS label, + 'New' AS value, + 'entries/create.sql' AS "formaction", + 'btn btn-success' AS class, + 'submit' AS "type"; + SELECT 'list' AS component, 'Lastes entries' AS title, diff --git a/src/shared/style.css b/src/app/style.css similarity index 100% rename from src/shared/style.css rename to src/app/style.css diff --git a/src/db/migrations/20250207152518_add_table_desambiguator_types.sql b/src/db/migrations/20250207152518_add_table_desambiguator_types.sql new file mode 100644 index 0000000..b311997 --- /dev/null +++ b/src/db/migrations/20250207152518_add_table_desambiguator_types.sql @@ -0,0 +1,35 @@ +-- migrate:up +CREATE TABLE public.desambiguator_types( + id serial PRIMARY KEY, + name varchar(15) NOT NULL, + input_type varchar(15) NOT NULL, + placeholder varchar(30), + created_at timestamp WITH time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at timestamp WITH time zone, + deleted_at timestamp WITH time zone +); + +INSERT INTO + public.desambiguator_types(name, input_type, placeholder) +VALUES + ('Text', 'text', 'XXX-XXX-XXX'), + ('Date', 'date', '2020-12-31'); + +ALTER TABLE + public.sources +ADD + COLUMN desambiguator_type_id int NOT NULL DEFAULT 1; + +ALTER TABLE + public.sources +ADD + CONSTRAINT fk_desambiguator_type FOREIGN KEY (desambiguator_type_id) REFERENCES public.desambiguator_types(id); + +-- migrate:down +ALTER TABLE + public.sources DROP CONSTRAINT fk_desambiguator_type; + +ALTER TABLE + public.sources DROP COLUMN desambiguator_type_id; + +DROP TABLE public.desambiguator_types; diff --git a/src/shared/shell.json b/src/shared/shell.json index 581385c..b58e301 100644 --- a/src/shared/shell.json +++ b/src/shared/shell.json @@ -5,7 +5,7 @@ "layout": "boxed", "sidebar": true, "theme": "dark", - "css": "style.css", + "css": "/style.css", "menu_item": [ { "link": "index.sql", "title": "Home" }, {