CREATE TABLE request_type (
key VARCHAR(64) PRIMARY KEY,
name VARCHAR(128) NOT NULL
);
CREATE TABLE request (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
player_uuid BINARY(16) NOT NULL,
type_key VARCHAR(64) NOT NULL,
status VARCHAR(16) NOT NULL, -- OPEN, IN_REVIEW, APPROVED, DENIED, FULFILLED
created_at DATETIME(3) NOT NULL,
updated_at DATETIME(3) NOT NULL,
FOREIGN KEY (type_key) REFERENCES request_type(key)
);
CREATE TABLE request_field_value (
request_id BIGINT NOT NULL,
field_key VARCHAR(64) NOT NULL,
value TEXT NOT NULL,
PRIMARY KEY (request_id, field_key),
FOREIGN KEY (request_id) REFERENCES request(id)
);
CREATE TABLE request_history (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
request_id BIGINT NOT NULL,
actor_uuid BINARY(16) NULL, -- NULL = systeem
from_status VARCHAR(16) NULL,
to_status VARCHAR(16) NOT NULL,
note TEXT NULL,
created_at DATETIME(3) NOT NULL,
FOREIGN KEY (request_id) REFERENCES request(id)
);
-- Optioneel: quota cache per speler × type (voor snelle checks)
CREATE TABLE request_quota (
player_uuid BINARY(16) NOT NULL,
type_key VARCHAR(64) NOT NULL,
fulfilled_count INT NOT NULL DEFAULT 0,
PRIMARY KEY (player_uuid, type_key),
FOREIGN KEY (type_key) REFERENCES request_type(key)
);
Is your feature request related to a problem? Please describe.
We missen een generiek in-game request-systeem waarmee spelers aanvragen kunnen indienen en staff die kan beoordelen/verwerken. Er is behoefte aan:
Concreet use-case: structures aanvragen (bijv. max. 2 Ocean Monuments per speler), handmatig goedkeuren/toewijzen door staff en blijvend zichtbaar voor alle staff.
Describe the solution you'd like
Config-gedreven types & velden
config.ymlper type: sleutel, naam, beschrijving, velden (tekst, keuze, locatie/coords, getal), validatie, optionele quota (limiet per speler), en cooldown.Commands & GUI
Speler:
/request new <type>→ GUI/formulier voor invullen velden/request my→ openstaande/eerdere aanvragen/request history→ volledig persoonlijk archief (read-only)Staff:
/request staff list [status|type|player]/request staff view <id>(alle gegevens + audittrail)/request staff approve <id> [opmerking]/request staff deny <id> [reden]/request staff fulfill <id> [gegevens](eindstap; bij structures: toegewezen structure + locatie)/request staff quota <player> <type> set|add <n>Duidelijke status-updates (chat/actionbar) en een overzichtelijke staff-GUI (tabs per status: OPEN / IN_REVIEW / APPROVED / DENIED / FULFILLED).
Workflow & statussen
OPEN→IN_REVIEW→APPROVED/DENIED→ (optioneel)FULFILLED.Persistent archief
Permissions (indicatief)
request.userequest.staff.view,request.staff.process,request.staff.fulfill,request.staff.quota,request.adminNotificaties (optioneel)
Additional context
Config-schets
DB-schema (compact, uitbreidbaar)
Structures use-case
request_quota.fulfilled_count++ → zichtbaar in staff-GUI per speler (“heeft 2/2 structures gekregen”).Acceptatiecriteria