Matthieu
6d3ecc1322
Merge branch 'feature/client-portal' into develop
Auto Tag Develop / tag (push) Has been cancelled
2026-03-16 09:51:48 +01:00
Matthieu
f5986090c0
feat(deploy) : add deploy script and nginx config for bare Ubuntu server
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-16 09:51:29 +01:00
Matthieu
d6399c20e1
fix : fix MCP create-task tool crashing on task creation
...
CreateTaskTool called nonexistent findMaxNumberByProject instead of
findMaxNumberByProjectForUpdate. Also removed FOR UPDATE clause from the
query as PostgreSQL does not support it with aggregate functions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-16 09:26:36 +01:00
Matthieu
a972d243f5
style : center and resize view toggle buttons on my-tasks page
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-16 09:26:34 +01:00
Matthieu
56bf88f293
fix : prevent document delete button from submitting the TaskModal form
...
The delete button in TaskDocumentList lacked type="button", causing it to
act as a submit button inside the form, which triggered handleSubmit and
closed the modal before the confirmation dialog could appear. Also added
guards to prevent closing TaskModal while a sub-modal is open.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-16 09:26:32 +01:00
9d80e017c2
docs : complete architecture tree in README with all directories
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:27:52 +01:00
4e91507158
docs : rewrite README with full project documentation
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:25:42 +01:00
318f14ea88
docs : update CLAUDE.md with avatar feature context and gotchas
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:21:12 +01:00
202b516dc3
fix(avatar) : install symfony/mime for server-side MIME type detection
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:13:18 +01:00
98782a9849
fix(avatar) : add explicit import for useAvatarService in profile page
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:12:38 +01:00
b978adf9ae
fix(avatar) : move avatar service to composables for Nuxt auto-import
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:11:03 +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
a5144443a4
fix(avatar) : address review findings — security and UX fixes
...
- Use getMimeType() instead of getClientMimeType() to prevent MIME spoofing
- Change IsGranted to IS_AUTHENTICATED_FULLY so ROLE_CLIENT can access avatars
- Remove Groups from avatarFileName (only avatarUrl needed by frontend)
- Disable aggressive caching to prevent stale avatar images
- Add error handling to avatar upload in profile page
- Use i18n for "Mon profil" button text
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:02:27 +01:00
afd4baed92
feat(avatar) : replace initials with UserAvatar component everywhere
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:58:46 +01:00
e8f0202b15
feat(avatar) : add profile page with avatar upload and crop
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:57:55 +01:00
962b3d935c
feat(avatar) : add AvatarCropper modal with vue-advanced-cropper
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:56:11 +01:00
cea22f977b
feat(avatar) : add UserAvatar component with image/initials fallback
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:55:52 +01:00
5613a7c92b
feat(avatar) : add avatar service, DTO update, and cropper dependency
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:55:39 +01:00
4d0aa65920
feat(avatar) : add avatar upload/serve/delete controller
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:54:23 +01:00
63315c0a15
feat(avatar) : add avatarFileName field to User entity
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:53:43 +01:00
cff16611f4
docs : add user avatar implementation plan
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:50:07 +01:00
96f5c7c91c
docs : add user avatar feature design spec
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:47:38 +01:00
f7a76c9e9b
feat(frontend) : add date filter component to time-tracking page
...
Reusable DateFilter component using @vuepic/vue-datepicker with day/week
toggle. Selecting a day switches to day view, selecting a week navigates
the calendar to that week. Includes "Aujourd'hui" and "Cette semaine"
quick shortcuts.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:46:48 +01:00
7047f64a6b
fix(portal) : handle submittedBy as object or IRI in canEdit check
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:40:54 +01:00
cd8cea45c1
fix(security) : allow ROLE_CLIENT to read projects
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:39:41 +01:00
1f31a3a33f
fix(portal) : embed project id/name in /me response for client users
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:37:18 +01:00
254f8bc411
fix(admin) : handle null/IRI client in project filter for UserDrawer
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:34:21 +01:00
239cd6398e
docs : update CLAUDE.md with client portal context and gotchas
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:26:05 +01:00
318b6198da
feat(portal) : add drag & drop status change on client ticket kanban
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:16:22 +01:00
4e3e854aa2
fix(portal) : allow admin to edit tickets and enable document deletion
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:12:55 +01:00
49cd971e3e
feat(project) : add client tickets panel to project page
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 20:41:28 +01:00
ffe4a0117c
feat(portal) : allow client to edit own tickets
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 20:41:25 +01:00
d2f6d84d03
feat(portal) : replace ticket list with kanban board
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 20:41:23 +01:00
2a874046d3
feat : allow client to edit own tickets and protect status fields
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:35:11 +01:00
f09ef67117
feat : date filter, project drawer, and misc frontend improvements
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:25:26 +01:00
046ee396d3
feat(fixtures) : add users alice/bob/charlie and distribute task assignees
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:25:14 +01:00
0ba487cfa9
feat(fixtures) : add client users, client tickets, and ticket-task link
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:20:27 +01:00
a2fc8e6e52
feat(task) : add client ticket selector in TaskModal
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:14:56 +01:00
6c910e7fcc
fix : use native SQL for JSON roles query in PostgreSQL
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:11:54 +01:00
6d7e6f5f48
fix : allow admin users to create client tickets on any project
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:07:19 +01:00
0c8fb654a9
fix(portal) : allow admin+client users to access both views and add admin link
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:06:09 +01:00
f8748c4061
fix(portal) : handle ticket creation error and hide new ticket button for admins
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:04:20 +01:00
2c28a4ad1d
fix(notification) : add route priority to prevent API Platform conflict
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 19:59:47 +01:00
cf1cf1ff5c
chore : add MCP bundle config files and .mcp.json for Claude Code
...
Auto-generated by Symfony Flex recipe + .mcp.json for local STDIO transport.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 19:53:16 +01:00
0724d38a26
feat(frontend) : add portal pages, update auth middleware and DTOs for client portal
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 19:51:51 +01:00
17c5160f2c
docs : add MCP server documentation to README
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 19:49:57 +01:00
40d6f7693f
feat(i18n) : add notification translations in French
2026-03-15 19:48:27 +01:00
e63ed63dd8
feat(frontend) : integrate NotificationBell in AppTopNav navbar
2026-03-15 19:48:13 +01:00
ad8142ac9d
feat(frontend) : add NotificationBell component with dropdown
2026-03-15 19:48:03 +01:00
f7afe1c6fb
docs : add MCP server section to CLAUDE.md
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 19:47:43 +01:00