feat(mvp): phase 8 - integration, testing & deployment

Fix all build/type/lint errors (zod 3.25 compat wrapper, Svelte 5 fixes),
write 115 unit tests across 10 test files, expand seed script with demo
data, update Docker config with migration on startup.
This commit is contained in:
2026-03-24 22:09:17 +03:00
parent 0bd30c5e17
commit e6b50fb4f1
36 changed files with 1634 additions and 99 deletions
+1 -1
View File
@@ -22,7 +22,7 @@
<div class="mb-6 flex flex-wrap items-center gap-4 rounded-xl border border-border bg-card p-4 shadow-sm">
<span class="text-sm font-semibold text-foreground">Admin Panel</span>
<div class="flex gap-1">
{#each navItems as item}
{#each navItems as item (item.href)}
<a
href={item.href}
class="rounded-lg px-3 py-1.5 text-sm font-medium transition-colors {isActive(item.href)
+1 -1
View File
@@ -1,6 +1,6 @@
import type { Actions, PageServerLoad } from './$types.js';
import { superValidate, setError } from 'sveltekit-superforms';
import { zod } from 'sveltekit-superforms/adapters';
import { zod } from '$lib/utils/zod-adapter.js';
import { fail } from '@sveltejs/kit';
import { requireAdmin } from '$lib/server/middleware/authorize.js';
import * as groupService from '$lib/server/services/groupService.js';
+1 -1
View File
@@ -1,6 +1,6 @@
import type { Actions, PageServerLoad } from './$types.js';
import { superValidate, setError } from 'sveltekit-superforms';
import { zod } from 'sveltekit-superforms/adapters';
import { zod } from '$lib/utils/zod-adapter.js';
import { fail } from '@sveltejs/kit';
import { requireAdmin } from '$lib/server/middleware/authorize.js';
import { prisma } from '$lib/server/prisma.js';
+1 -1
View File
@@ -1,6 +1,6 @@
import type { Actions, PageServerLoad } from './$types.js';
import { superValidate, setError } from 'sveltekit-superforms';
import { zod } from 'sveltekit-superforms/adapters';
import { zod } from '$lib/utils/zod-adapter.js';
import { fail } from '@sveltejs/kit';
import { requireAdmin } from '$lib/server/middleware/authorize.js';
import * as userService from '$lib/server/services/userService.js';
+1 -1
View File
@@ -1,6 +1,6 @@
import type { Actions, PageServerLoad } from './$types.js';
import { superValidate, setError } from 'sveltekit-superforms';
import { zod } from 'sveltekit-superforms/adapters';
import { zod } from '$lib/utils/zod-adapter.js';
import { fail } from '@sveltejs/kit';
import { requireAuth } from '$lib/server/middleware/authenticate.js';
import * as appService from '$lib/server/services/appService.js';
+1 -2
View File
@@ -2,7 +2,6 @@
import type { PageData } from './$types.js';
import AppCard from '$lib/components/app/AppCard.svelte';
import AppForm from '$lib/components/app/AppForm.svelte';
import CardSkeleton from '$lib/components/skeleton/CardSkeleton.svelte';
let { data }: { data: PageData } = $props();
@@ -46,7 +45,7 @@
>
All
</a>
{#each data.categories as category}
{#each data.categories as category (category)}
<a
href="/apps?category={encodeURIComponent(category)}"
class="rounded-full border border-border px-3 py-1 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-foreground"
@@ -1,4 +1,4 @@
import { error, redirect } from '@sveltejs/kit';
import { error } from '@sveltejs/kit';
import type { PageServerLoad, Actions } from './$types.js';
import * as boardService from '$lib/server/services/boardService.js';
import * as appService from '$lib/server/services/appService.js';
+1 -1
View File
@@ -1,6 +1,6 @@
import type { Actions, PageServerLoad } from './$types.js';
import { superValidate, setError } from 'sveltekit-superforms';
import { zod } from 'sveltekit-superforms/adapters';
import { zod } from '$lib/utils/zod-adapter.js';
import { fail, redirect } from '@sveltejs/kit';
import { loginSchema } from '$lib/utils/validators.js';
import * as userService from '$lib/server/services/userService.js';
+1 -1
View File
@@ -1,6 +1,6 @@
import type { Actions, PageServerLoad } from './$types.js';
import { superValidate, setError } from 'sveltekit-superforms';
import { zod } from 'sveltekit-superforms/adapters';
import { zod } from '$lib/utils/zod-adapter.js';
import { fail, redirect, error } from '@sveltejs/kit';
import { registerSchema } from '$lib/utils/validators.js';
import { prisma } from '$lib/server/prisma.js';