fix report edit

This commit is contained in:
2025-06-21 22:37:05 +02:00
parent 54a780d999
commit 4e615fe211
6 changed files with 25 additions and 5 deletions

View File

@ -151,6 +151,8 @@ export const report = {
reportId: input.reportId,
strikeReasonId: input.strikeReasonId
});
} else {
await db.deleteStrike({ reportId: input.reportId });
}
});

View File

@ -20,12 +20,12 @@
let status = $state<'open' | 'closed' | null>(null);
let notice = $state<string | null>(null);
let statement = $state<string | null>(null);
let strikeReason = $state<string | null>(null);
let strikeReason = $state<string | null>(String(report?.strike?.strikeReasonId ?? null));
// consts
const strikeReasonValues = strikeReasons.reduce(
(prev, curr) => Object.assign(prev, { [curr.id]: `${curr.name} (${curr.weight})` }),
{}
{ [null]: 'Kein Vergehen' }
);
// lifetime
@ -82,8 +82,7 @@
label="Bearbeitungsstatus"
dynamicWidth
/>
<Select bind:value={strikeReason} values={strikeReasonValues} defaultValue="" label="Vergehen" dynamicWidth
></Select>
<Select bind:value={strikeReason} values={strikeReasonValues} label="Vergehen" dynamicWidth></Select>
<div class="divider mt-0 mb-2"></div>
<button class="btn mt-auto" onclick={onSaveButtonClick}>Speichern</button>
</div>

View File

@ -1,6 +1,7 @@
<script lang="ts">
import type { Snippet } from 'svelte';
// types
interface Props {
id?: string;
value?: string | null;
@ -19,6 +20,7 @@
notice?: Snippet;
}
// inputs
let {
id,
value = $bindable(),

View File

@ -130,6 +130,8 @@ import {
deleteStrikeReason
} from '@db/schema/strikeReason.ts';
import {
deleteStrike,
type DeleteStrikeReq,
editStrike,
type EditStrikeReq,
getStrikeByReportId,
@ -288,6 +290,7 @@ export class Database {
/* strikes */
editStrike = (values: EditStrikeReq) => editStrike(this.db, values);
deleteStrike = (values: DeleteStrikeReq) => deleteStrike(this.db, values);
getStrikeByReportId = (values: GetStrikeByReportIdReq) => getStrikeByReportId(this.db, values);
getStrikesByTeamId = (values: GetStrikesByTeamIdReq) => getStrikesByTeamId(this.db, values);

View File

@ -5,6 +5,8 @@ import { reportStatus } from './reportStatus.ts';
import { generateRandomString } from '@util/random.ts';
import { team } from '@db/schema/team.ts';
import { BASE_PATH } from 'astro:env/server';
import { strikeReason } from '@db/schema/strikeReason.ts';
import { strike } from '@db/schema/strike.ts';
type Database = MySql2Database<{ report: typeof report }>;
@ -113,12 +115,17 @@ export async function getReports(db: Database, values: GetReportsReq) {
status: reportStatus.status,
notice: reportStatus.notice,
statement: reportStatus.statement
},
strike: {
strikeReasonId: strikeReason.id
}
})
.from(report)
.innerJoin(reporterTeam, eq(report.reporterTeamId, reporterTeam.id))
.leftJoin(reportedTeam, eq(report.reportedTeamId, reportedTeam.id))
.leftJoin(reportStatus, eq(report.id, reportStatus.reportId))
.leftJoin(strike, eq(report.id, strike.reportId))
.leftJoin(strikeReason, eq(strike.strikeReasonId, strikeReason.id))
.where(
and(
values.reporter != null ? eq(report.reporterTeamId, reporterIdSubquery!.id) : undefined,

View File

@ -3,7 +3,6 @@ import { strikeReason } from '@db/schema/strikeReason.ts';
import type { MySql2Database } from 'drizzle-orm/mysql2';
import { eq } from 'drizzle-orm';
import { report } from '@db/schema/report.ts';
import { strikeReasons } from '@app/admin/strikeReasons/strikeReasons.ts';
type Database = MySql2Database<{ strike: typeof strike }>;
@ -23,6 +22,10 @@ export type EditStrikeReq = {
strikeReasonId: number;
};
export type DeleteStrikeReq = {
reportId: number;
};
export type GetStrikeByReportIdReq = {
reportId: number;
};
@ -47,6 +50,10 @@ export async function editStrike(db: Database, values: EditStrikeReq) {
});
}
export async function deleteStrike(db: Database, values: DeleteStrikeReq) {
return db.delete(strike).where(eq(strike.reportId, values.reportId)).limit(1);
}
export async function getStrikeByReportId(db: Database, values: GetStrikeByReportIdReq) {
const strikes = await db
.select({