Cockatrice/servatrice/migrations/servatrice_0037_to_0038.sql
BruebachL 17d2e8d86e
[Server] Add room chat channels with per-channel fan-out and history (#7476)
* [Server] Add room chat channels with per-channel fan-out and history

* Fixup: redact all channel histories on message removal

removeSaidMessages only redacted the main history, so banned/warned
content stayed visible to late joiners on every other channel.
Drop the unused channelId parameter and redact up to amount messages
per channel across the whole channelChatHistory map.

* [Server] Validate room channel ids and fix catalog schema per review

- servatrice.sql: expand rooms_channels access_level enum to full set
  to match 0037->0038 migration
- servatrice.cpp: skip empty, reserved (__main__) and duplicate channel
  ids when loading from ini and DB with qWarning
- server_protocolhandler.cpp: clarify catalog replay comment (filtering
  happens in moderator stack)
- server_room: drop duplicate channelIndex, linear search preserves
  catalog order

* [Server] Fix server_room.cpp formatting per clang-format-18

---------

Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
Co-authored-by: BruebachL <bruebachl@cockatrice.example>
2026-10-16 22:46:38 +02:00

21 lines
No EOL
1 KiB
SQL

-- Servatrice db migration from version 37 to version 38
-- Room chat channels.
--
-- A room now offers a fixed catalog of named message streams in addition to the
-- implicit Main channel. Public channels are broadcast to every room member;
-- restricted channels are only delivered to (and sendable by) members whose
-- privilege level meets the channel's access level.
-- 1. Catalog table, mirroring the config-driven channels of no-DB servers.
CREATE TABLE IF NOT EXISTS `cockatrice_rooms_channels` (
`id_room` int(7) unsigned NOT NULL,
`id_server` tinyint(3) NOT NULL DEFAULT 1,
`channel_id` varchar(50) NOT NULL,
`display_name` varchar(50) NOT NULL,
`access_level` ENUM('public','registered','judge','moderator','admin','developer') NOT NULL DEFAULT 'public',
PRIMARY KEY (`id_room`, `id_server`, `channel_id`),
FOREIGN KEY(`id_room`) REFERENCES `cockatrice_rooms`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
UPDATE cockatrice_schema_version SET version=38 WHERE version=37;