Matthieu
a09a415393
feat : add TimeEntryExportService generating XLSX with detail and recap sheets
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 16:02:18 +01:00
Matthieu
97a8afe559
feat : add RecurrenceCalculator service for next occurrence dates
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
bae6d10ece
feat : add CalDavService for Zimbra CalDAV sync
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
e4fc34b90f
refactor : simplify codebase and fix critical issues
...
Backend:
- Add MCP Serializer to centralize entity-to-array conversion (~300 lines deduped)
- Fix race condition in task/ticket number generation (SELECT FOR UPDATE + transaction)
- Add unique constraint on task (project_id, number) with migration
- Fix MIME type validation: use server-detected finfo instead of client-supplied type
- Add allowlist of permitted MIME types for uploads
- Fix TaskDocumentDownloadController: allow ROLE_CLIENT access, add priority:1
- Fix notification sent even when ticket status unchanged
- Remove redundant exception constructors
- Simplify services (BookStackApi double fetch, TokenEncryptor, GiteaApi)
- Consolidate duplicate checks in processors
Frontend:
- Fix useApi isHandlingUnauthorized scope (module-level to prevent double 401 redirect)
- Fix client-tickets toast key copy-paste bug
- Merge duplicated tasks service methods (getByProject + getByProjectArchived)
- Extract shared uploadWithRelation helper in task-documents service
- Extract formatFileSize utility from duplicated component code
- Extract status transition logic into useClientTicketHelpers composable
- Remove dead code (unused router, handleLogout, empty script blocks)
- Merge duplicate watchers and onMounted calls
- Normalize arrow functions to function declarations per convention
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:09:16 +01:00
4094048aba
feat(notification) : add NotificationService and UserRepository::findByRole
2026-03-15 19:46:37 +01:00
4c19b68156
fix(gitea) : propagate API errors instead of silently returning empty results
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 18:58:55 +01:00
df00b27a64
feat(bookstack) : add BookStackApiService
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 18:08:51 +01:00
3dd2d39222
refactor : rename GITEA_ENCRYPTION_KEY to ENCRYPTION_KEY
...
Generic encryption key name for shared use across Gitea and BookStack
token encryption.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 18:03:52 +01:00
445f51b473
fix(gitea) : fetch only branch-specific commits using compare API
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-15 08:16:55 +01:00
f888a29e0a
refactor(frontend) : make page headers and filters sticky across all pages
...
Wrap title + filters in a sticky container (top-8 sm:top-12, z-20, bg-white)
on all pages for consistent scroll behavior. Also fix SidebarTimer icon
visibility when sidebar is collapsed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-14 09:21:45 +01:00
Matthieu
136d0eaaa4
feat : add GiteaApiService with branch/commit/PR methods
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 13:57:01 +01:00
Matthieu
28e943b519
feat : add TokenEncryptor service with sodium encryption
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 13:56:14 +01:00