hamed and Claude Opus 4.8
4642506c0f
feat: support multiple services per appointment (checkbox selection)
...
Appointments could only reference a single service (ManyToOne). Add an
appointment_service_items join table (ManyToMany) so an appointment can
carry several services; the first stays the primary service_item for
backward compatibility, and toArray now also returns service_items[].
Both create endpoints (my/appointment, admin/appointment) accept
service_item_uuids[] and attach all of them. A new duration_from_services
flag gates the slot_end recompute: service-booking mode sends it true
(slot_end = start + Σ durations); slot mode omits it so the manual end
time is preserved. The admin endpoint previously ignored services entirely.
Frontend: in slot mode the single service dropdown becomes a checkbox list
filtered by the selected section (multi-select); service mode sends the
duration flag. Migration + backend/entity tests + docs updated.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-16 10:10:47 +03:30
..
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-10 10:03:46 +03:30
2026-06-10 13:02:47 +03:30
2026-06-10 14:22:26 +03:30
2026-06-10 14:32:00 +03:30
2026-06-10 14:45:01 +03:30
2026-06-10 14:45:01 +03:30
2026-06-10 15:09:19 +03:30
2026-06-28 09:32:27 +03:30
2026-06-10 21:29:29 +03:30
2026-06-10 22:13:39 +03:30
2026-06-28 09:32:27 +03:30
2026-06-11 12:20:12 +03:30
2026-06-11 12:20:12 +03:30
2026-06-12 12:31:27 +03:30
2026-06-12 13:39:37 +03:30
2026-06-14 22:10:28 +03:30
2026-06-14 22:10:28 +03:30
2026-06-14 22:10:28 +03:30
2026-06-14 22:10:28 +03:30
2026-06-14 22:10:28 +03:30
2026-06-14 22:10:28 +03:30
2026-06-15 11:03:56 +03:30
2026-06-15 11:03:56 +03:30
2026-06-15 11:19:37 +03:30
2026-06-15 17:53:27 +03:30
2026-06-16 00:25:59 +03:30
2026-06-19 10:19:47 +03:30
2026-06-19 20:42:04 +03:30
2026-06-19 20:42:04 +03:30
2026-06-21 12:35:22 +03:30
2026-06-21 13:26:47 +03:30
2026-06-22 19:44:17 +03:30
2026-06-23 15:05:24 +03:30
2026-06-23 15:05:24 +03:30
2026-06-23 15:05:24 +03:30
2026-06-23 15:05:24 +03:30
2026-06-23 15:05:24 +03:30
2026-06-23 15:05:24 +03:30
2026-06-23 16:10:36 +03:30
2026-06-23 22:13:51 +03:30
2026-06-24 11:52:13 +03:30
2026-06-24 13:06:17 +03:30
2026-06-24 13:17:08 +03:30
2026-06-24 16:14:41 +03:30
2026-06-25 17:34:39 +03:30
2026-06-25 19:38:47 +03:30
2026-06-28 17:04:23 +03:30
2026-06-28 17:13:44 +03:30
2026-06-28 19:04:54 +03:30
2026-06-28 19:08:26 +03:30
2026-06-28 19:10:53 +03:30
2026-06-28 20:28:24 +03:30
2026-06-28 21:03:54 +03:30
2026-06-29 20:01:03 +03:30
2026-07-02 10:09:14 +03:30
2026-07-02 15:36:08 +03:30
2026-07-03 12:30:03 +03:30
2026-07-05 10:46:31 +03:30
2026-07-05 11:20:53 +03:30
2026-07-05 11:54:12 +03:30
2026-07-08 00:03:33 +03:30
2026-07-08 12:19:06 +03:30
2026-07-09 07:26:58 +03:30
2026-07-11 08:59:36 +03:30
2026-07-11 11:39:15 +03:30
2026-07-11 11:39:15 +03:30
2026-07-13 08:41:29 +03:30
2026-07-13 08:41:29 +03:30
2026-07-13 11:51:18 +03:30
2026-07-13 13:28:51 +03:30
2026-07-13 14:16:21 +03:30
2026-07-13 14:54:38 +03:30
2026-07-13 15:20:00 +03:30
2026-07-13 15:27:34 +03:30
2026-07-13 15:35:10 +03:30
2026-07-13 16:01:16 +03:30
2026-07-13 23:37:32 +03:30
2026-07-15 11:39:32 +03:30
2026-07-15 12:23:17 +03:30
2026-07-15 13:23:38 +03:30
2026-07-15 13:48:29 +03:30
2026-07-15 14:32:29 +03:30
2026-07-15 23:15:45 +03:30
2026-07-16 10:10:47 +03:30