feat: return reports in audit log entries
This commit is contained in:
parent
53006ea313
commit
dc9c11ec52
5 changed files with 61 additions and 5 deletions
|
@ -43,7 +43,9 @@ public class AuditLogController(DatabaseContext db, ModerationRendererService mo
|
|||
_ => limit,
|
||||
};
|
||||
|
||||
IQueryable<AuditLogEntry> query = db.AuditLog.OrderByDescending(e => e.Id);
|
||||
IQueryable<AuditLogEntry> query = db
|
||||
.AuditLog.Include(e => e.Report)
|
||||
.OrderByDescending(e => e.Id);
|
||||
|
||||
if (before != null)
|
||||
query = query.Where(e => e.Id < before.Value);
|
||||
|
|
|
@ -41,12 +41,23 @@ public record AuditLogResponse(
|
|||
AuditLogEntity? TargetUser,
|
||||
[property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||
AuditLogEntity? TargetMember,
|
||||
[property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)] Snowflake? ReportId,
|
||||
[property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)] PartialReport? Report,
|
||||
AuditLogEntryType Type,
|
||||
string? Reason,
|
||||
[property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)] string[]? ClearedFields
|
||||
);
|
||||
|
||||
public record PartialReport(
|
||||
Snowflake Id,
|
||||
Snowflake ReporterId,
|
||||
Snowflake TargetUserId,
|
||||
[property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||
Snowflake? TargetMemberId,
|
||||
ReportReason Reason,
|
||||
string? Context,
|
||||
ReportTargetType TargetType
|
||||
);
|
||||
|
||||
public record NotificationResponse(
|
||||
Snowflake Id,
|
||||
NotificationType Type,
|
||||
|
|
|
@ -46,12 +46,26 @@ public class ModerationRendererService(
|
|||
|
||||
public AuditLogResponse RenderAuditLogEntry(AuditLogEntry entry)
|
||||
{
|
||||
PartialReport? report = null;
|
||||
if (entry.Report != null)
|
||||
{
|
||||
report = new PartialReport(
|
||||
entry.Report.Id,
|
||||
entry.Report.ReporterId,
|
||||
entry.Report.TargetUserId,
|
||||
entry.Report.TargetMemberId,
|
||||
entry.Report.Reason,
|
||||
entry.Report.Context,
|
||||
entry.Report.TargetType
|
||||
);
|
||||
}
|
||||
|
||||
return new AuditLogResponse(
|
||||
Id: entry.Id,
|
||||
Moderator: ToEntity(entry.ModeratorId, entry.ModeratorUsername)!,
|
||||
TargetUser: ToEntity(entry.TargetUserId, entry.TargetUsername),
|
||||
TargetMember: ToEntity(entry.TargetMemberId, entry.TargetMemberName),
|
||||
ReportId: entry.ReportId,
|
||||
Report: report,
|
||||
Type: entry.Type,
|
||||
Reason: entry.Reason,
|
||||
ClearedFields: entry.ClearedFields
|
||||
|
|
|
@ -45,7 +45,7 @@ export type AuditLogEntry = {
|
|||
moderator: AuditLogEntity;
|
||||
target_user?: AuditLogEntity;
|
||||
target_member?: AuditLogEntity;
|
||||
report_id?: string;
|
||||
report?: PartialReport;
|
||||
type: AuditLogEntryType;
|
||||
reason: string | null;
|
||||
cleared_fields?: string[];
|
||||
|
@ -59,3 +59,13 @@ export enum AuditLogEntryType {
|
|||
WarnUserAndClearProfile = "WARN_USER_AND_CLEAR_PROFILE",
|
||||
SuspendUser = "SUSPEND_USER",
|
||||
}
|
||||
|
||||
export type PartialReport = {
|
||||
id: string;
|
||||
reporter_id: string;
|
||||
target_user_id: string;
|
||||
target_member_id?: string;
|
||||
reason: ReportReason;
|
||||
context: string | null;
|
||||
target_type: "USER" | "MEMBER";
|
||||
};
|
||||
|
|
|
@ -39,12 +39,31 @@
|
|||
|
||||
<small class="text-secondary">{date}</small>
|
||||
</h6>
|
||||
|
||||
{#if entry.type === "IGNORE_REPORT"}
|
||||
{#if entry.report}
|
||||
<details>
|
||||
<summary>Report</summary>
|
||||
<ul>
|
||||
<li><strong>From:</strong> {entry.report.reporter_id}</li>
|
||||
<li><strong>Target:</strong> {entry.report.target_user_id}</li>
|
||||
<li><strong>Reason:</strong> {entry.report.reason}</li>
|
||||
{#if entry.report.context}
|
||||
<li><strong>Context:</strong> {entry.report.context}</li>
|
||||
{/if}
|
||||
</ul>
|
||||
</details>
|
||||
{:else}
|
||||
<p><em>(the ignored report has been deleted)</em></p>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
{#if reason}
|
||||
<details>
|
||||
<summary>Reason</summary>
|
||||
{@html reason}
|
||||
</details>
|
||||
{:else}
|
||||
<em>(no reason given)</em>
|
||||
<p><em>(no reason given)</em></p>
|
||||
{/if}
|
||||
</div>
|
||||
|
|
Loading…
Reference in a new issue