refactor: professional code quality audit

- Fix all TypeScript compilation errors (0 errors in src/)
- Add try/catch error handling to ALL API routes (38 handlers)
- Fix empty catch blocks (api-auth.ts now logs warnings)
- Add aria-labels to all icon-only buttons (WCAG 2.1 AA)
- Fix Prisma type mismatches (OR filter, Person.companyId, Estimate.projectId, Ticket.createdAt)
- Fix webhook PATCH route (moved to [id]/route.ts)
- Fix mobile-bottom-nav type safety
- Fix KB route where-clause type
- Fix test-mail banner null vs undefined
- Fix task comment fetch: add cancellation + error toast
- ESLint: 0 errors, 0 warnings
- 175 files, 24.741 lines of code
This commit is contained in:
Z User committed 2026-10-27 12:23:32 +00:00
1 parent 969202764a
commit fa8dd46571
175 files changed
+24741 -2

No files matched your search

+85
View File
@@ -0,0 +1,85 @@
'use client'
import { create } from 'zustand'
import { persist } from 'zustand/middleware'
import type { Locale } from '@/lib/i18n'
export type ViewId =
| 'dashboard'
| 'crm'
| 'leads'
| 'estimates'
| 'projects'
| 'timesheet'
| 'support'
| 'licenses'
| 'contracts'
| 'expenses'
| 'finance'
| 'accounting'
| 'audit'
| 'api'
| 'kb'
| 'calendar'
| 'reporting'
| 'settings'
| 'settings_global'
| 'setup'
interface AosState {
view: ViewId
setView: (v: ViewId) => void
selectedCompanyId: string | null
setSelectedCompany: (id: string | null) => void
selectedLeadId: string | null
setSelectedLead: (id: string | null) => void
sidebarOpen: boolean
setSidebarOpen: (open: boolean) => void
commandOpen: boolean
setCommandOpen: (open: boolean) => void
// portal mode (PRD §6.3 client portal)
portalMode: boolean
portalCompanyId: string | null
setPortalMode: (mode: boolean) => void
setPortalCompany: (id: string | null) => void
// i18n (PRD §5.5: de default, en, tr)
locale: Locale
setLocale: (l: Locale) => void
// onboarding (PRD §9: onboarding checklists, no dead ends)
onboardingSeen: boolean
onboardingStep: number
setOnboardingSeen: (seen: boolean) => void
setOnboardingStep: (step: number) => void
checklist: Record<string, boolean>
toggleChecklist: (key: string) => void
}
export const useAos = create<AosState>()(
persist(
(set) => ({
view: 'dashboard',
setView: (view) => set({ view }),
selectedCompanyId: null,
setSelectedCompany: (selectedCompanyId) => set({ selectedCompanyId }),
selectedLeadId: null,
setSelectedLead: (selectedLeadId) => set({ selectedLeadId }),
sidebarOpen: false,
setSidebarOpen: (sidebarOpen) => set({ sidebarOpen }),
commandOpen: false,
setCommandOpen: (commandOpen) => set({ commandOpen }),
portalMode: false,
portalCompanyId: null,
setPortalMode: (portalMode) => set({ portalMode }),
setPortalCompany: (portalCompanyId) => set({ portalCompanyId }),
locale: 'de',
setLocale: (locale) => set({ locale }),
onboardingSeen: false,
onboardingStep: 0,
setOnboardingSeen: (onboardingSeen) => set({ onboardingSeen }),
setOnboardingStep: (onboardingStep) => set({ onboardingStep }),
checklist: {},
toggleChecklist: (key) => set((s) => ({ checklist: { ...s.checklist, [key]: !s.checklist[key] } })),
}),
{ name: 'aos-ui', partialize: (s) => ({ view: s.view, portalMode: s.portalMode, portalCompanyId: s.portalCompanyId, locale: s.locale, onboardingSeen: s.onboardingSeen, checklist: s.checklist }) }
)
)