Flexibele kluissoorten: soorten in de database, beheer op de website
- Tabellen vault_categories en vault_category_fields (db/21), startrijen handmatig (db/handmatig/21b) - VaultCategoryService met regels voor zichtbaarheid, gebruik en eigen velden - Beheer > Kluissoorten (/beheer/soorten) met gebruikstellers; soort in gebruik niet te verwijderen - Kluis en Nalatenschap (web en app) tonen soorten en eigen velden uit de database - Socketprotocol: vault.categories; GRANTs voor mijnbesluit_app in db/02 - db/20 herhaalbaar gemaakt - App versie 1.1 (versiecode 3) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014MGLqt1uKfNARQHut9ifcx
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
-- MijnBesluit - kluissoorten uit de database in plaats van uit de code
|
||||
--
|
||||
-- Tot nu toe stond de lijst "Wachtwoord, Polis, Uitvaartwens, ..." vast in de code, met per soort
|
||||
-- een eigen invulscherm. Elke nieuwe soort (denk aan "Dementie" of "Niet reanimeren") vroeg dus
|
||||
-- een nieuwe versie van de app in de Play Store en de App Store. Nu staan de soorten hier, en de
|
||||
-- velden van een nieuwe soort ook: de beheerder onderhoudt ze op de website (/beheer/soorten) en
|
||||
-- de app tekent het formulier naar wat de server beschrijft.
|
||||
--
|
||||
-- vault_categories de soorten. De elf ingebouwde en "Overig" (nummer 99) krijgen hier
|
||||
-- hun startrij; nieuwe soorten beginnen bij nummer 100.
|
||||
-- vault_category_fields de velden van een nieuwe soort. Ingebouwde soorten hebben hier geen
|
||||
-- rijen: hun invulscherm zit nog in de app zelf.
|
||||
--
|
||||
-- Regels die de server afdwingt (niet de database):
|
||||
-- * Een soort waar kluisitems mee zijn gemaakt kan niet worden verwijderd, alleen op niet-actief
|
||||
-- gezet. Niet-actief verdwijnt uit de keuzelijst van wie er nog nooit een item mee maakte;
|
||||
-- wie dat wel deed, blijft de soort zien.
|
||||
-- * Nieuwe items kunnen alleen in een actieve soort, of in een soort waar de eigenaar al een
|
||||
-- item van heeft.
|
||||
--
|
||||
-- vault_items.category blijft een gewoon getal; er komt bewust geen foreign key bij, zodat
|
||||
-- bestaande gegevens en oudere apps niet in de weg zitten.
|
||||
--
|
||||
-- Draaien met:
|
||||
-- mysql -u root -p mijnbesluit < db\21_kluissoorten.sql
|
||||
--
|
||||
-- Opnieuw draaien mag: er gebeurt dan niets.
|
||||
--
|
||||
-- Na dit script, eenmalig als root:
|
||||
-- mysql -u root -p < db\02_applicatiegebruiker.sql (rechten op de nieuwe tabellen)
|
||||
-- mysql -u root -p mijnbesluit < db\handmatig\21b_kluissoorten_startrijen.sql (de startrijen)
|
||||
|
||||
USE `mijnbesluit`;
|
||||
|
||||
-- ---------------------------------------------------------------- vault_categories
|
||||
CREATE TABLE IF NOT EXISTS `vault_categories` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`naam` VARCHAR(80) NOT NULL,
|
||||
`uitleg` VARCHAR(500) NULL, -- verschijnt onder de keuzelijst in de app
|
||||
`actief` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`volgorde` INT NOT NULL DEFAULT 1000,
|
||||
`bespreken_met` TINYINT(1) NOT NULL DEFAULT 0, -- mag de eigenaar een beheerder kiezen om vooraf mee te bespreken?
|
||||
`ingebouwd` TINYINT(1) NOT NULL DEFAULT 0, -- 1 = invulscherm zit in de app; velden hier niet te wijzigen
|
||||
`aangemaakt_op` DATETIME(3) NOT NULL,
|
||||
`gewijzigd_op` DATETIME(3) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `ux_vault_categories_naam` (`naam`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=100;
|
||||
|
||||
-- ---------------------------------------------------------------- vault_category_fields
|
||||
CREATE TABLE IF NOT EXISTS `vault_category_fields` (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
||||
`category_id` INT NOT NULL,
|
||||
`sleutel` VARCHAR(40) NOT NULL, -- vaste naam in de versleutelde inhoud; wijzigt nooit
|
||||
`label` VARCHAR(100) NOT NULL,
|
||||
`soort` VARCHAR(10) NOT NULL DEFAULT 'tekst', -- tekst | lang | datum | keuze | uitleg
|
||||
`opties` VARCHAR(1000) NULL, -- bij 'keuze': één optie per regel
|
||||
`hulptekst` VARCHAR(300) NULL,
|
||||
`verplicht` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`actief` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`volgorde` INT NOT NULL DEFAULT 1000,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `ux_vault_category_fields_sleutel` (`category_id`, `sleutel`),
|
||||
CONSTRAINT `fk_vcf_category` FOREIGN KEY (`category_id`) REFERENCES `vault_categories` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- ---------------------------------------------------------------- startrijen
|
||||
-- De startrijen (de elf ingebouwde soorten en Overig) staan NIET hier maar in
|
||||
-- handmatig\21b_kluissoorten_startrijen.sql.
|
||||
--
|
||||
-- Waarom: dit script wordt ook door de uitrolagent gedraaid, met een beperkt databaseaccount dat
|
||||
-- tabellen mag maken maar er geen gegevens in mag zetten. Een INSERT hier laat de hele uitrol
|
||||
-- struikelen (ERROR 1142: INSERT command denied). Gegevens neerzetten is inrichten, en dat doet een
|
||||
-- mens één keer als root, net als de rechten in 02_applicatiegebruiker.sql.
|
||||
|
||||
SELECT 'Klaar. De tabellen voor kluissoorten staan klaar. Vergeet handmatig\\21b_kluissoorten_startrijen.sql en 02_applicatiegebruiker.sql niet (als root).' AS melding;
|
||||
Reference in New Issue
Block a user