Files
space-station-14/Content.Shared/Administration/Notes/SharedAdminNote.cs
Pieter-Jan Briers 29b7fc4463 Stable to master (#42599)
Ban database refactor (#42495)

* Ban DB refactor seems to work at a basic level for PostgreSQL

* New ban creation API

Supports all the new functionality (multiple players/addresses/hwids/roles/rounds per ban).

* Make the migration irreversible

* Re-implement ban notifications

The server ID check is no longer done as admins may want to place bans spanning multiple rounds irrelevant of the source server.

* Fix some split query warnings

* Implement migration on SQLite

* More comments

* Remove required from ban reason

SS14.Admin changes would like this

* More missing AsSplitQuery() calls

* Fix missing ban type filter

* Fix old CreateServerBan API with permanent time

* Fix department and role ban commands with permanent time

* Re-add banhits navigation property

Dropped this on accident, SS14.Admin needs it.

* More ban API fixes.

* Don't fetch ban exemption info for role bans

Not relevant, reduces query performance

* Regenerate migrations

* Fix adminnotes command for players that never connected

Would blow up handling null player records. Not a new bug introduced by the refactor, but I ran into it.

* Great shame... I accidentally committed submodule update...

* Update GDPR scripts

* Fix sandbox violation

* Fix bans with duplicate info causing DB exceptions

Most notably happened with role bans, as multiple departments may include the same role.
2026-01-23 15:34:23 +01:00

29 lines
1.5 KiB
C#

using System.Collections.Immutable;
using Content.Shared.Database;
using Robust.Shared.Network;
using Robust.Shared.Serialization;
namespace Content.Shared.Administration.Notes;
[Serializable, NetSerializable]
public sealed record SharedAdminNote(
int Id, // Id of note, message, watchlist, ban or role ban. Should be paired with NoteType to uniquely identify a shared admin note.
ImmutableArray<NetUserId> Players, // Notes player
ImmutableArray<int> Rounds, // Which round was it added in?
string? ServerName, // Which server was this added on?
TimeSpan PlaytimeAtNote, // Playtime at the time of getting the note
NoteType NoteType, // Type of note
string Message, // Attached message
NoteSeverity? NoteSeverity, // Severity of the note, ban or role ban. Otherwise null.
bool Secret, // Is it visible to the player (only relevant if players can see their own notes)
string CreatedByName, // Who created it?
string EditedByName, // Who edited it last?
DateTime CreatedAt, // When was it created?
DateTime? LastEditedAt, // When was it last edited?
DateTime? ExpiryTime, // Does it expire?
ImmutableArray<BanRoleDef>? BannedRoles, // Only valid for role bans. List of banned roles
DateTime? UnbannedTime, // Only valid for bans. Set if unbanned
string? UnbannedByName, // Only valid for bans. Set if unbanned
bool? Seen // Only valid for messages, otherwise should be null. Has the user seen this message?
);