3.0 KiB
3.0 KiB
Visione Database Schema
Schema truth is migrations/*.sql. This file is compact human map of current DB.
Migration Set
001_initial_schema.sqlbase auth, users, reports, areas, teams, messages, feedback, rewards004_report_workflow.sqlreports.assigned_operator_id, workflow indexes, richer media columns006_completion_features.sqlnotifications, moderation flags, reward uniqueness007_reference_data_and_intervention_links.sqlcategory-to-team-category mapping, public intervention links
Core Auth Tables
usersidentity, profile, password hash, points,banned,must_change_passwordrolespermissionsrole_permissionsuser_rolesotp_challengesOTP flow, hashed codes, expiry, consumptionapi_tokensbearer token hashes, expiry, revocation
Reference Data
report_categoriescitizen-facing report categories,activeareasnamed municipal areas, GeoJSON polygon inboundary_geojson,activeteam_categoriescategory of external intervention teamteamsexternal teams, optionalarea_id,team_category_id,activereport_category_team_categoriesexplicit compatibility mapping: report category -> team category
Report Domain
reportsowner citizen, category, inferred area, coordinates, address, description, status,assigned_operator_idreport_status_historyimmutable workflow logassignmentshistorical report -> external team assignments, active row hasended_at IS NULLreport_photoshistorical name; stores both images and videos current columns includeoriginal_filename,content_type,media_kind,size_bytesmessagescitizen/operator conversation per reportfeedbackone row per report, unique onreport_id
Engagement / Moderation
reward_eventspoints ledger, unique(report_id, reason)notificationslocal in-app notificationsmoderation_flagsoperator-created flags, admin-resolved moderation queueintervention_access_linkspublic revocable hashed links for external teams, tied toreport_idandassignment_id
Ownership Model
- Platform owner of report:
reports.assigned_operator_id - External team linkage:
assignments - Public field-team access:
intervention_access_links
Status Model
reports.status enum:
OPENUNDER_REVIEWASSIGNEDIN_PROGRESSRESOLVEDREJECTEDCLOSED
Important Constraints / Semantics
users.emailuniqueusers.fiscal_codeuniqueteams.nameuniqueareas.nameuniquereport_categories.nameuniquefeedback.report_iduniquereward_events(report_id, reason)uniqueapi_tokens.token_hashuniqueintervention_access_links.token_hashunique
Current Query Model
- No generated ORM models
- No
Mapper<T> - Raw parameterized SQL through
drogon::orm::DbClient - JSON serialization helpers in
repositories/Sql.*
Current Gaps
- No dedicated table for external team personnel
- No route-optimization/routing tables
- No audit table for intervention link access beyond
last_accessed_at