allow vorgangPIN to be changed on Vorgang page

includes:
- UI and backend logic
- adjustment to `NameItemEditor` to disallow deletion
This commit is contained in:
2025-11-20 12:54:53 +01:00
parent c81196343f
commit 365fb0f2c7
4 changed files with 66 additions and 16 deletions

View File

@@ -15,7 +15,7 @@
export let currentName: string;
export let vorgangToken: string | null;
export let onSave: (n: string, o: string, t?: string) => unknown = () => {};
export let onDelete: (n: string) => unknown = () => {};
export let onDelete: (n: string) => unknown | null = () => {};
let localName = currentName;
let isEditing = false;
@@ -98,13 +98,15 @@
>
<Edit class="w-4 h-4" />
</button>
<button
data-testid="delete-button"
onclick={handleDeleteClick}
class="text-gray-500 hover:text-red-600 transition"
>
<Trash class="w-4 h-4" />
</button>
{#if onDelete}
<button
data-testid="delete-button"
onclick={handleDeleteClick}
class="text-gray-500 hover:text-red-600 transition"
>
<Trash class="w-4 h-4" />
</button>
{/if}
</div>
{/if}

View File

@@ -236,13 +236,15 @@ export const vorgangPINValidation = function (vorgangToken: string, vorgangPIN:
};
/**
* Rename Vorgang
* Change VorgangName or VorgangPIN
* @param vorgangToken
* @param newName
* @returns {int} number of affected lines
*/
export const renameVorgangByToken = function (vorgangToken: string, newName: string) {
const renameSQLStmt = 'UPDATE cases set name = ? WHERE token = ?';
export const updateVorgangAttrByToken = function (vorgangToken: string,
newName: string,
column: string) {
const renameSQLStmt = `UPDATE cases set ${column} = ? WHERE token = ?`;
const statement = db.prepare(renameSQLStmt);
let info;

View File

@@ -190,6 +190,34 @@
}
}
async function savePIN(newVorgangPIN: string, oldVorgangPIN: string) {
open = true;
inProgress = true;
isError = false;
try {
const res = await fetch(API_ROUTES.VORGANG(vorgangToken), {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ vorgangToken, oldVorgangPIN, newVorgangPIN,
changePIN: true})
});
if (!res.ok) {
throw new Error('Fehler beim Speichern');
}
await invalidateAll();
crimesList = data.crimesList;
open = false;
} catch (err) {
console.error('⚠️ Netzwerkfehler beim Speichern', err);
isError = true;
} finally {
inProgress = false;
}
}
async function handleDelete(tatort: string) {
open = true;
inProgress = true;
@@ -251,7 +279,13 @@ Mit freundlichen Grüßen,
<h1 class="text-xl">{vorgangName}</h1>
{#if admin}
Zugangs-PIN: {vorgangPIN}
Zugangs-PIN:
<NameItemEditor
list={[]}
currentName={vorgangPIN}
onSave={savePIN}
onDelete={null}
/>
<a class="pt-2 pb-6" href={constructMailToLink()}
><Button disabled={isEmptyList}>Share Link</Button></a
>

View File

@@ -4,7 +4,7 @@ import {
deleteVorgangByToken,
getCrimesListByToken,
vorgangNameExists,
renameVorgangByToken
updateVorgangAttrByToken
} from '$lib/server/vorgangService';
export async function DELETE({ params }) {
@@ -59,14 +59,26 @@ export async function GET({ params }) {
}
}
// rename vorgang
// change Vorgang properties
export async function PUT({ request }) {
const data = await request.json();
const vorgangToken = data['vorgangToken'];
const newVorgangName = data['newName'];
const res = renameVorgangByToken(vorgangToken, newVorgangName);
const changePIN = data['changePIN'];
let attrChanged;
let newValue;
if (changePIN) {
attrChanged = 'pin';
newValue = data['newVorgangPIN']
} else {
attrChanged = 'name';
newValue = data['newName']
}
const res = updateVorgangAttrByToken(vorgangToken, newValue, attrChanged);
if (!res) {
return json({ msg: 'Fehler beim Umbenennen' }, { status: 400 });