diff --git a/src/app/entries/create.sql b/src/app/entries/create.sql index 18c1d9b..4701f2d 100644 --- a/src/app/entries/create.sql +++ b/src/app/entries/create.sql @@ -53,7 +53,7 @@ SET :date, :time, :og_desambiguator, - $extra_data :: jsonb ->> 'lg_uid' + :lg_id ); INSERT INTO @@ -71,5 +71,7 @@ VALUES :text, :lg_id :: int, :date :: date + :time :: time - ) RETURNING 'redirect' AS component, + ) +RETURNING + 'redirect' AS component, $return_link AS link; diff --git a/src/app/index.sql b/src/app/index.sql index 0d2c9e8..0a592e5 100644 --- a/src/app/index.sql +++ b/src/app/index.sql @@ -4,7 +4,6 @@ SELECT SELECT 'form' AS component, - 'entries/search.sql' AS "action", 'Entries' AS title, '' AS validate, 'GET' AS method; @@ -13,6 +12,7 @@ SELECT 'query' AS name, '' AS label, 'Search query...' AS placeholder, + $query as value, 10 AS width, TRUE AS autofocus; @@ -20,10 +20,11 @@ SELECT 'search' AS name, '' AS label, 'Search' AS value, - 2 AS width, 'btn btn-info' AS class, + 2 AS width, 'submit' AS "type"; + SELECT 'new' AS name, '' AS label, @@ -47,7 +48,9 @@ SELECT text AS description FROM public.entries +WHERE + ($query IS NULL OR search_vector @@ to_tsquery('es_en', $query)) ORDER BY created_at LIMIT - 10; + 30; diff --git a/src/app/logic_groups/index.sql b/src/app/logic_groups/index.sql index feb95dd..46531b4 100644 --- a/src/app/logic_groups/index.sql +++ b/src/app/logic_groups/index.sql @@ -16,7 +16,6 @@ SELECT 'Source' AS label, 'select' AS TYPE, TRUE AS required, - TRUE AS searchable, 'Select...' AS empty_option, ( SELECT diff --git a/src/app/sources/create.sql b/src/app/sources/create.sql index cf0f0f8..401374f 100644 --- a/src/app/sources/create.sql +++ b/src/app/sources/create.sql @@ -1,7 +1,7 @@ INSERT INTO - public.sources(name, uid, uri) + public.sources(name, uid, uri, desambiguator_type_id) VALUES - (:name, :uid, :uri) -RETURNING 'redirect' AS component, 'index.sql' AS link -; - + (:name, :uid, :uri, :desambiguator_type_id :: int) +RETURNING + 'redirect' AS component, + 'index.sql' AS link; diff --git a/src/app/sources/index.sql b/src/app/sources/index.sql index 2c763c5..d75a025 100644 --- a/src/app/sources/index.sql +++ b/src/app/sources/index.sql @@ -25,6 +25,19 @@ SELECT 1 AS minlength, TRUE AS required; +SELECT + 'desambiguator_type_id' AS name, + 'Deseambiguator Type' AS label, + 'select' AS TYPE, + TRUE AS required, + 'Select...' AS empty_option, + ( + SELECT + jsonb_agg(jsonb_build_object('label', name, 'value', id)) + FROM + public.desambiguator_types + ) AS options; + SELECT 'uri' AS name, 'URI' AS label; @@ -38,6 +51,12 @@ SELECT TRUE AS search; SELECT - * + src.id, + src.name, + src.uid, + dts.name AS "Deseambiguator Type", + src.uri, + to_char(src.created_at, 'YYYY-MM-DD HH12:MI:SS TZ') AS "Created At" FROM - public.sources; + public.sources AS src + INNER JOIN public.desambiguator_types AS dts ON src.desambiguator_type_id = dts.id; diff --git a/src/db/migrations/20250207213321_add_text_search_to_entries.sql b/src/db/migrations/20250207213321_add_text_search_to_entries.sql new file mode 100644 index 0000000..3697826 --- /dev/null +++ b/src/db/migrations/20250207213321_add_text_search_to_entries.sql @@ -0,0 +1,27 @@ +-- migrate:up +CREATE TEXT SEARCH CONFIGURATION es_en (COPY = pg_catalog.english); + +ALTER TEXT SEARCH CONFIGURATION es_en ALTER MAPPING FOR asciiword, +asciihword, +hword_asciipart, +word, +hword, +hword_part WITH spanish_stem, +english_stem; + +ALTER TABLE + public.entries +ADD + COLUMN search_vector tsvector GENERATED ALWAYS AS ( + to_tsvector( + 'es_en', + coalesce(uid, '') || ' ' || coalesce(text, '') + ) + ) STORED; + +CREATE INDEX entry_full_text_search ON public.entries USING gin (search_vector); + +-- migrate:down +DROP INDEX IF EXISTS entry_full_text_search; + +DROP TEXT SEARCH CONFIGURATION IF EXISTS es_en; diff --git a/src/shared/shell.json b/src/shared/shell.json index b58e301..de849df 100644 --- a/src/shared/shell.json +++ b/src/shared/shell.json @@ -7,22 +7,16 @@ "theme": "dark", "css": "/style.css", "menu_item": [ - { "link": "index.sql", "title": "Home" }, + { "icon": "home", "link": "/", "title": "Home" }, { - "title": "Dependencies", - "icon": "brand-stackshare", - "submenu": [ - { - "link": "/logic_groups/index.sql", - "title": "Logic Groups", - "icon": "folder" - }, - { - "link": "/sources/index.sql", - "title": "Sources", - "icon": "external-link" - } - ] + "link": "/logic_groups/index.sql", + "title": "Logic Groups", + "icon": "folder" + }, + { + "link": "/sources/index.sql", + "title": "Sources", + "icon": "external-link" } ] }