From 56f2dfe17f1a601c246739784217a6138fbfd2ef Mon Sep 17 00:00:00 2001 From: Nenad Djukic Date: Sat, 25 Jul 2026 08:40:43 +0200 Subject: [PATCH] Z1: proizvod ASP-Terminia (migracija + registracija u startup listi) Migracija po sablonu 002_seed_products.sql (INSERT IGNORE, idempotentna). limits/features su PLACEHOLDER - vlasnik jos nije odlucio pakete (basic/pro). Bezbedno jer: - server cuva oba polja kao json.RawMessage, cist passthrough, ne tumaci ih - firmware (ASP-TERMINIA repo, licenca.cpp) JOS NE CITA features/limits - parsira samo edition/customer/expires_at/grace_days/machine_fingerprint; enforcement dolazi tek u zadatku Z4 - svaka izdata licenca nosi SVOJE limits/features (ne nasledjuje default posle izdavanja), pa promena default-a kasnije ne trazi novu migraciju cmd/server/main.go: registrovan migrations/004_... u runMigrations() listi (migracije se pokrecu automatski pri svakom startu servisa, ali SAMO iz te liste - nov fajl sam po sebi ne bi se pokrenuo bez ove linije). Resava P3 iz docs/asp-terminia/02-api-ugovor-firmware.md (format limits/features za ASP proizvod) - opisano u poruci commit-a kao odgovor. Co-Authored-By: Claude Sonnet 5 --- cmd/server/main.go | 1 + migrations/004_seed_asp_terminia.sql | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 migrations/004_seed_asp_terminia.sql diff --git a/cmd/server/main.go b/cmd/server/main.go index 8e3f449..9409ffb 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -84,6 +84,7 @@ func runMigrations(db *sql.DB) { "migrations/001_create_tables.sql", "migrations/002_seed_products.sql", "migrations/003_create_admin_users.sql", + "migrations/004_seed_asp_terminia.sql", } for _, f := range files { data, err := os.ReadFile(f) diff --git a/migrations/004_seed_asp_terminia.sql b/migrations/004_seed_asp_terminia.sql new file mode 100644 index 0000000..a7be4d3 --- /dev/null +++ b/migrations/004_seed_asp_terminia.sql @@ -0,0 +1,12 @@ +-- Z1: proizvod ASP-Terminia (ASP repo docs/asp-terminia/03-zadaci.md) +-- +-- limits/features su PLACEHOLDER dok vlasnik ne odluci pakete (basic/pro). +-- Server ih ne tumaci (json.RawMessage, cist passthrough) i firmware ih +-- JOS NE CITA (enforcement dolazi kasnije, zadatak Z4) - menjanje ovih +-- vrednosti kasnije NE trazi novu migraciju, samo UPDATE reda, i ne utice +-- na vec izdate licence (svaka licenca nosi SVOJE limits/features, ne +-- nasledjuje default proizvoda posle izdavanja). +INSERT IGNORE INTO products (code, name, key_prefix, default_limits, available_features) VALUES +('ASP-TERMINIA', 'ASP-Terminia', 'ASP-', + '{"max_readers": 4, "max_cards": 5000}', + '["FEAT_CARDCHECK", "FEAT_ISSUE", "FEAT_PRINT", "FEAT_CATALOG", "FEAT_ANTIPASS", "FEAT_SYNC", "FEAT_OTA"]');