edit reported team in admin ui
All checks were successful
deploy / build-and-deploy (/testvaro, /opt/website-test, website-test) (push) Successful in 28s
deploy / build-and-deploy (/varo, /opt/website, website) (push) Successful in 13s

This commit is contained in:
2025-06-22 00:11:10 +02:00
parent e9e44f67a2
commit d7b05deff2
7 changed files with 52 additions and 10 deletions

View File

@ -117,6 +117,20 @@ export const report = {
};
}
}),
editReport: defineAction({
input: z.object({
reportId: z.number(),
reported: z.number().nullable()
}),
handler: async (input, context) => {
Session.actionSessionFromCookies(context.cookies, Permissions.Reports);
await db.editReport({
id: input.reportId,
reportedTeamId: input.reported
});
}
}),
reportStatus: defineAction({
input: z.object({
reportId: z.number()

View File

@ -1,5 +1,5 @@
<script lang="ts">
import type { Report, ReportStatus, StrikeReasons } from './reports.ts';
import { editReport, type Report, type ReportStatus, type StrikeReasons } from './reports.ts';
import Input from '@components/input/Input.svelte';
import Textarea from '@components/input/Textarea.svelte';
import Select from '@components/input/Select.svelte';
@ -17,6 +17,7 @@
let { strikeReasons, report }: Props = $props();
// states
let reportedTeam = $state<{ id: number; name: string } | null>(report?.reported ?? null);
let status = $state<'open' | 'closed' | null>(null);
let notice = $state<string | null>(null);
let statement = $state<string | null>(null);
@ -46,13 +47,18 @@
$confirmPopupState = {
title: 'Änderungen speichern?',
message: 'Sollen die Änderungen am Report gespeichert werden?',
onConfirm: async () =>
editReportStatus(report!, {
onConfirm: async () => {
if (reportedTeam?.id != report?.reported?.id) {
report!.reported = reportedTeam;
await editReport(report!);
}
await editReportStatus(report!, {
status: status,
notice: notice,
statement: statement,
strikeReasonId: Number(strikeReason)
} as ReportStatus)
} as ReportStatus);
}
};
}
</script>
@ -64,7 +70,7 @@
<button class="btn btn-sm btn-circle btn-ghost absolute right-2 top-2" onclick={() => (report = null)}>✕</button>
<div class="w-[34rem]">
<TeamSearch value={report?.reporter.name} label="Report Team" readonly mustMatch />
<TeamSearch value={report?.reported?.name} label="Reportetes Team" />
<TeamSearch value={report?.reported?.name} label="Reportetes Team" onSubmit={(team) => (reportedTeam = team)} />
<Textarea bind:value={notice} label="Interne Notizen" rows={8} />
</div>
<div class="divider divider-horizontal"></div>

View File

@ -59,6 +59,17 @@ export async function getReportStatus(report: Report) {
return data.reportStatus;
}
export async function editReport(report: Report) {
const { error } = await actions.report.editReport({
reportId: report.id,
reported: report.reported?.id ?? null
});
if (error) {
actionErrorPopup(error);
}
}
export async function editReportStatus(report: Report, reportStatus: ReportStatus) {
const { error } = await actions.report.editReportStatus({
reportId: report.id,

View File

@ -48,10 +48,7 @@
<tr>
<td>
<div class="flex items-center gap-x-2">
<div
class="rounded-sm min-w-3 w-3 min-h-3 h-3"
style="background-color: {team.color}"
></div>
<div class="rounded-sm min-w-3 w-3 min-h-3 h-3" style="background-color: {team.color}"></div>
<h3
class="text-xs sm:text-xl break-all"
class:line-through={team.memberOne.dead && team.memberTwo.dead}

View File

@ -107,6 +107,8 @@ import {
import {
addReport,
type AddReportReq,
editReport,
type EditReportReq,
getReportById,
type GetReportById,
getReportByUrlHash,
@ -270,6 +272,7 @@ export class Database {
/* report */
addReport = (values: AddReportReq) => addReport(this.db, values);
editReport = (values: EditReportReq) => editReport(this.db, values);
submitReport = (values: SubmitReportReq) => submitReport(this.db, values);
getReports = (values: GetReportsReq) => getReports(this.db, values);
getReportById = (values: GetReportById) => getReportById(this.db, values);

View File

@ -28,6 +28,11 @@ export type AddReportReq = {
reportedTeamId?: number | null;
};
export type EditReportReq = {
id: number;
reportedTeamId: number | null;
};
export type SubmitReportReq = {
urlHash: string;
reason: string;
@ -65,6 +70,12 @@ export async function addReport(db: Database, values: AddReportReq) {
return Object.assign(r[0], { url: `${BASE_PATH}/report/${urlHash}` });
}
export async function editReport(db: Database, values: EditReportReq) {
return db.update(report).set({
reportedTeamId: values.reportedTeamId
});
}
export async function submitReport(db: Database, values: SubmitReportReq) {
return db
.update(report)

View File

@ -23,7 +23,7 @@ export async function sendWebhook<T extends WebhookAction>(action: T, data: Webh
'Content-Type': 'application/json',
'x-webhook-action': action
},
body: JSON.stringify(data),
body: JSON.stringify(data)
});
if (response.status === 200) return;