Add category level and turn the reticle into a background watermark
CI / test (push) Successful in 1m12s
CI / build-and-push (push) Successful in 2m53s

This commit is contained in:
2026-08-02 19:15:20 +02:00
parent 20beeeb420
commit 87c8f27e73
14 changed files with 464 additions and 63 deletions
+73
View File
@@ -0,0 +1,73 @@
import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-sqlite'
/**
* Kategorie se z pevného výběru stávají vlastní kolekcí.
*
* Psáno ručně, protože generátor se u přechodu `kategorie` (text) →
* `kategorie_id` (vazba) interaktivně ptá, jestli jde o přejmenování sloupce,
* nebo o nový. Jde o nový — a starý se převede na vazbu, ať položky nepřijdou
* o zařazení.
*/
export async function up({ db }: MigrateUpArgs): Promise<void> {
await db.run(sql`CREATE TABLE \`categories\` (
\`id\` integer PRIMARY KEY NOT NULL,
\`nazev\` text NOT NULL,
\`slug\` text,
\`poradi\` numeric DEFAULT 0,
\`obrazek_id\` integer,
\`popis\` text,
\`updated_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL,
\`created_at\` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL,
FOREIGN KEY (\`obrazek_id\`) REFERENCES \`media\`(\`id\`) ON UPDATE no action ON DELETE set null
);
`)
await db.run(sql`CREATE UNIQUE INDEX \`categories_slug_idx\` ON \`categories\` (\`slug\`);`)
await db.run(sql`CREATE INDEX \`categories_obrazek_idx\` ON \`categories\` (\`obrazek_id\`);`)
await db.run(sql`CREATE INDEX \`categories_updated_at_idx\` ON \`categories\` (\`updated_at\`);`)
await db.run(sql`CREATE INDEX \`categories_created_at_idx\` ON \`categories\` (\`created_at\`);`)
// Tři kategorie, které dosud byly natvrdo v kódu. Na prázdné databázi
// slouží jako výchozí obsah, na existující jako cíl převodu.
await db.run(sql`INSERT INTO \`categories\` (\`nazev\`, \`slug\`, \`poradi\`) VALUES
('Zbraně', 'zbrane', 1),
('Střelivo', 'strelivo', 2),
('Doplňky', 'doplnky', 3);`)
await db.run(sql`ALTER TABLE \`products\` ADD \`kategorie_id\` integer REFERENCES categories(id);`)
await db.run(sql`CREATE INDEX \`products_kategorie_idx\` ON \`products\` (\`kategorie_id\`);`)
// Převod původní textové hodnoty na vazbu.
await db.run(sql`UPDATE \`products\` SET \`kategorie_id\` = (
SELECT \`id\` FROM \`categories\` WHERE \`categories\`.\`slug\` = \`products\`.\`kategorie\`
);`)
await db.run(sql`ALTER TABLE \`products\` DROP COLUMN \`kategorie\`;`)
// Payload si sem ukládá zámky rozepsaných dokumentů; bez sloupce by
// administrace u kategorií hlásila chybu.
await db.run(
sql`ALTER TABLE \`payload_locked_documents_rels\` ADD \`categories_id\` integer REFERENCES categories(id);`,
)
await db.run(
sql`CREATE INDEX \`payload_locked_documents_rels_categories_id_idx\` ON \`payload_locked_documents_rels\` (\`categories_id\`);`,
)
}
export async function down({ db }: MigrateDownArgs): Promise<void> {
await db.run(
sql`ALTER TABLE \`products\` ADD \`kategorie\` text DEFAULT 'zbrane' NOT NULL;`,
)
await db.run(sql`UPDATE \`products\` SET \`kategorie\` = COALESCE((
SELECT \`slug\` FROM \`categories\` WHERE \`categories\`.\`id\` = \`products\`.\`kategorie_id\`
), 'zbrane');`)
await db.run(sql`DROP INDEX IF EXISTS \`products_kategorie_idx\`;`)
await db.run(sql`ALTER TABLE \`products\` DROP COLUMN \`kategorie_id\`;`)
await db.run(sql`DROP INDEX IF EXISTS \`payload_locked_documents_rels_categories_id_idx\`;`)
await db.run(
sql`ALTER TABLE \`payload_locked_documents_rels\` DROP COLUMN \`categories_id\`;`,
)
await db.run(sql`DROP TABLE \`categories\`;`)
}
+6
View File
@@ -1,4 +1,5 @@
import * as migration_20260730_102034_initial from './20260730_102034_initial';
import * as migration_20260731_180000_kategorie from './20260731_180000_kategorie';
export const migrations = [
{
@@ -6,4 +7,9 @@ export const migrations = [
down: migration_20260730_102034_initial.down,
name: '20260730_102034_initial'
},
{
up: migration_20260731_180000_kategorie.up,
down: migration_20260731_180000_kategorie.down,
name: '20260731_180000_kategorie'
},
];