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…
	
	Add table
		Add a link
		
	
		Reference in a new issue