feat: enhance character status extraction and update schema for nullable status
All checks were successful
Build Docker Image / build (push) Successful in 1m22s

This commit is contained in:
2026-03-03 23:26:53 +01:00
parent 70de84f3ab
commit b5816e6c28
4 changed files with 165 additions and 27 deletions

View File

@@ -6,6 +6,11 @@
const newCharacters = $derived(data.changes.filter((c: any) => c.type === 'new'));
const modifiedCharacters = $derived(data.changes.filter((c: any) => c.type === 'modified'));
function fandomUrl(path: string | null | undefined): string {
if (!path) return 'https://onepiece.fandom.com/fr/wiki';
return `https://onepiece.fandom.com/fr/wiki/${path}`;
}
function formatValue(value: any): string {
if (value === null || value === undefined) {
return '—';
@@ -35,6 +40,16 @@
<div>
<h1 class="text-3xl font-black uppercase tracking-[0.25em] text-amber-50 mb-2">Character Changes</h1>
<p class="text-gray-400">Total changes: {newCharacters.length} new, {modifiedCharacters.length} modified</p>
{#if newCharacters.length + modifiedCharacters.length > 0}
<form method="POST" action="?/acceptAll" class="mt-4">
<button
type="submit"
class="rounded-full border border-emerald-300/40 bg-emerald-500/20 px-4 py-2 text-sm font-semibold text-emerald-100 transition hover:bg-emerald-500/30"
>
✅ Accepter tous les changements
</button>
</form>
{/if}
</div>
<!-- New Characters Section -->
@@ -46,18 +61,31 @@
<div class="grid gap-4">
{#each newCharacters as change (change.id)}
<div class="rounded-lg border border-emerald-500/30 bg-emerald-500/5 p-4 space-y-3">
<div class="flex items-center gap-3">
{#if change.scraped.pictureUrl}
<img
src={change.scraped.pictureUrl}
alt={change.scraped.name}
class="w-12 h-12 rounded object-cover"
/>
{/if}
<div>
<h3 class="font-bold text-emerald-300">{change.scraped.name}</h3>
<p class="text-sm text-gray-500">{change.id}</p>
<div class="flex items-center justify-between gap-3">
<div class="flex items-center gap-3">
{#if change.scraped.pictureUrl}
<a href={fandomUrl(change.scraped.url)} target="_blank" rel="noopener noreferrer">
<img
src={change.scraped.pictureUrl}
alt={change.scraped.name}
class="w-12 h-12 rounded object-cover hover:opacity-80 transition"
/>
</a>
{/if}
<div>
<h3 class="font-bold text-emerald-300">{change.scraped.name}</h3>
<p class="text-sm text-gray-500">{change.id}</p>
</div>
</div>
<form method="POST" action="?/acceptOne">
<input type="hidden" name="characterId" value={change.id} />
<button
type="submit"
class="rounded-full border border-emerald-300/40 bg-emerald-500/20 px-3 py-1 text-xs font-semibold text-emerald-100 transition hover:bg-emerald-500/30"
>
Accepter
</button>
</form>
</div>
<div class="grid grid-cols-2 gap-2 text-sm">
<div>
@@ -92,18 +120,31 @@
<div class="grid gap-6">
{#each modifiedCharacters as change (change.id)}
<div class="rounded-lg border border-amber-500/30 bg-amber-500/5 p-4 space-y-4">
<div class="flex items-center gap-3 pb-4 border-b border-amber-500/20">
{#if change.current?.pictureUrl}
<img
src={change.current.pictureUrl}
alt={change.current.name}
class="w-12 h-12 rounded object-cover"
/>
{/if}
<div>
<h3 class="font-bold text-amber-300">{change.current?.name ?? change.scraped.name}</h3>
<p class="text-sm text-gray-500">{change.id}</p>
<div class="flex items-center justify-between gap-3 pb-4 border-b border-amber-500/20">
<div class="flex items-center gap-3">
{#if change.current?.pictureUrl}
<a href={fandomUrl(change.current?.url ?? change.scraped.url)} target="_blank" rel="noopener noreferrer">
<img
src={change.current.pictureUrl}
alt={change.current.name}
class="w-12 h-12 rounded object-cover hover:opacity-80 transition"
/>
</a>
{/if}
<div>
<h3 class="font-bold text-amber-300">{change.current?.name ?? change.scraped.name}</h3>
<p class="text-sm text-gray-500">{change.id}</p>
</div>
</div>
<form method="POST" action="?/acceptOne">
<input type="hidden" name="characterId" value={change.id} />
<button
type="submit"
class="rounded-full border border-amber-300/40 bg-amber-500/20 px-3 py-1 text-xs font-semibold text-amber-100 transition hover:bg-amber-500/30"
>
Accepter
</button>
</form>
</div>
{#if change.differences}