From d7fdd5d257066065182c7566d851ab96cf5d561a Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Tue, 1 Jul 2025 11:30:01 +0200 Subject: [PATCH 01/14] fix: event deletion issues --- package.json | 2 +- .../20250701092705_v0_1_3/migration.sql | 170 ++++++++++++++++++ src/components/forms/event-form.tsx | 13 +- 3 files changed, 178 insertions(+), 7 deletions(-) create mode 100644 prisma/migrations/20250701092705_v0_1_3/migration.sql diff --git a/package.json b/package.json index e5e8c9e..2950955 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "meetup", - "version": "0.1.0", + "version": "0.1.3", "private": true, "scripts": { "dev": "next dev --turbopack", diff --git a/prisma/migrations/20250701092705_v0_1_3/migration.sql b/prisma/migrations/20250701092705_v0_1_3/migration.sql new file mode 100644 index 0000000..b103c30 --- /dev/null +++ b/prisma/migrations/20250701092705_v0_1_3/migration.sql @@ -0,0 +1,170 @@ +-- RedefineTables +PRAGMA defer_foreign_keys=ON; +PRAGMA foreign_keys=OFF; +CREATE TABLE "new_blocked_slots" ( + "id" TEXT NOT NULL PRIMARY KEY, + "user_id" TEXT NOT NULL, + "start_time" DATETIME NOT NULL, + "end_time" DATETIME NOT NULL, + "reason" TEXT, + "is_recurring" BOOLEAN NOT NULL DEFAULT false, + "rrule" TEXT, + "recurrence_end_date" DATETIME, + "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" DATETIME NOT NULL, + CONSTRAINT "blocked_slots_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +INSERT INTO "new_blocked_slots" ("created_at", "end_time", "id", "is_recurring", "reason", "recurrence_end_date", "rrule", "start_time", "updated_at", "user_id") SELECT "created_at", "end_time", "id", "is_recurring", "reason", "recurrence_end_date", "rrule", "start_time", "updated_at", "user_id" FROM "blocked_slots"; +DROP TABLE "blocked_slots"; +ALTER TABLE "new_blocked_slots" RENAME TO "blocked_slots"; +CREATE INDEX "blocked_slots_user_id_start_time_end_time_idx" ON "blocked_slots"("user_id", "start_time", "end_time"); +CREATE INDEX "blocked_slots_user_id_is_recurring_idx" ON "blocked_slots"("user_id", "is_recurring"); +CREATE TABLE "new_calendar_export_tokens" ( + "id" TEXT NOT NULL PRIMARY KEY, + "user_id" TEXT NOT NULL, + "token" TEXT NOT NULL, + "scope" TEXT NOT NULL DEFAULT 'MEETINGS_ONLY', + "is_active" BOOLEAN NOT NULL DEFAULT true, + "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "last_accessed_at" DATETIME, + CONSTRAINT "calendar_export_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +INSERT INTO "new_calendar_export_tokens" ("created_at", "id", "is_active", "last_accessed_at", "scope", "token", "user_id") SELECT "created_at", "id", "is_active", "last_accessed_at", "scope", "token", "user_id" FROM "calendar_export_tokens"; +DROP TABLE "calendar_export_tokens"; +ALTER TABLE "new_calendar_export_tokens" RENAME TO "calendar_export_tokens"; +CREATE UNIQUE INDEX "calendar_export_tokens_token_key" ON "calendar_export_tokens"("token"); +CREATE INDEX "calendar_export_tokens_user_id_idx" ON "calendar_export_tokens"("user_id"); +CREATE TABLE "new_calendar_subscriptions" ( + "id" TEXT NOT NULL PRIMARY KEY, + "user_id" TEXT NOT NULL, + "feed_url" TEXT NOT NULL, + "name" TEXT, + "color" TEXT, + "is_enabled" BOOLEAN NOT NULL DEFAULT true, + "last_synced_at" DATETIME, + "last_sync_error" TEXT, + "sync_frequency_minutes" INTEGER DEFAULT 60, + "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" DATETIME NOT NULL, + CONSTRAINT "calendar_subscriptions_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +INSERT INTO "new_calendar_subscriptions" ("color", "created_at", "feed_url", "id", "is_enabled", "last_sync_error", "last_synced_at", "name", "sync_frequency_minutes", "updated_at", "user_id") SELECT "color", "created_at", "feed_url", "id", "is_enabled", "last_sync_error", "last_synced_at", "name", "sync_frequency_minutes", "updated_at", "user_id" FROM "calendar_subscriptions"; +DROP TABLE "calendar_subscriptions"; +ALTER TABLE "new_calendar_subscriptions" RENAME TO "calendar_subscriptions"; +CREATE INDEX "calendar_subscriptions_user_id_is_enabled_idx" ON "calendar_subscriptions"("user_id", "is_enabled"); +CREATE TABLE "new_email_queue" ( + "id" TEXT NOT NULL PRIMARY KEY, + "user_id" TEXT NOT NULL, + "subject" TEXT NOT NULL, + "body_html" TEXT NOT NULL, + "body_text" TEXT, + "status" TEXT NOT NULL DEFAULT 'PENDING', + "scheduled_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "attempts" INTEGER NOT NULL DEFAULT 0, + "last_attempt_at" DATETIME, + "sent_at" DATETIME, + "error_message" TEXT, + "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" DATETIME NOT NULL, + CONSTRAINT "email_queue_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +INSERT INTO "new_email_queue" ("attempts", "body_html", "body_text", "created_at", "error_message", "id", "last_attempt_at", "scheduled_at", "sent_at", "status", "subject", "updated_at", "user_id") SELECT "attempts", "body_html", "body_text", "created_at", "error_message", "id", "last_attempt_at", "scheduled_at", "sent_at", "status", "subject", "updated_at", "user_id" FROM "email_queue"; +DROP TABLE "email_queue"; +ALTER TABLE "new_email_queue" RENAME TO "email_queue"; +CREATE INDEX "idx_email_queue_pending_jobs" ON "email_queue"("status", "scheduled_at"); +CREATE INDEX "idx_email_queue_user_history" ON "email_queue"("user_id", "created_at"); +CREATE TABLE "new_external_events" ( + "id" TEXT NOT NULL PRIMARY KEY, + "subscription_id" TEXT NOT NULL, + "ical_uid" TEXT NOT NULL, + "summary" TEXT, + "description" TEXT, + "start_time" DATETIME NOT NULL, + "end_time" DATETIME NOT NULL, + "is_all_day" BOOLEAN NOT NULL DEFAULT false, + "location" TEXT, + "rrule" TEXT, + "dtstamp" DATETIME, + "sequence" INTEGER, + "show_as_free" BOOLEAN NOT NULL DEFAULT false, + "last_fetched_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT "external_events_subscription_id_fkey" FOREIGN KEY ("subscription_id") REFERENCES "calendar_subscriptions" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +INSERT INTO "new_external_events" ("description", "dtstamp", "end_time", "ical_uid", "id", "is_all_day", "last_fetched_at", "location", "rrule", "sequence", "show_as_free", "start_time", "subscription_id", "summary") SELECT "description", "dtstamp", "end_time", "ical_uid", "id", "is_all_day", "last_fetched_at", "location", "rrule", "sequence", "show_as_free", "start_time", "subscription_id", "summary" FROM "external_events"; +DROP TABLE "external_events"; +ALTER TABLE "new_external_events" RENAME TO "external_events"; +CREATE INDEX "external_events_subscription_id_start_time_end_time_idx" ON "external_events"("subscription_id", "start_time", "end_time"); +CREATE INDEX "external_events_subscription_id_show_as_free_idx" ON "external_events"("subscription_id", "show_as_free"); +CREATE UNIQUE INDEX "external_events_subscription_id_ical_uid_key" ON "external_events"("subscription_id", "ical_uid"); +CREATE TABLE "new_friendships" ( + "user_id_1" TEXT NOT NULL, + "user_id_2" TEXT NOT NULL, + "status" TEXT NOT NULL DEFAULT 'PENDING', + "requested_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "accepted_at" DATETIME, + + PRIMARY KEY ("user_id_1", "user_id_2"), + CONSTRAINT "friendships_user_id_1_fkey" FOREIGN KEY ("user_id_1") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "friendships_user_id_2_fkey" FOREIGN KEY ("user_id_2") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +INSERT INTO "new_friendships" ("accepted_at", "requested_at", "status", "user_id_1", "user_id_2") SELECT "accepted_at", "requested_at", "status", "user_id_1", "user_id_2" FROM "friendships"; +DROP TABLE "friendships"; +ALTER TABLE "new_friendships" RENAME TO "friendships"; +CREATE INDEX "idx_friendships_user2_status" ON "friendships"("user_id_2", "status"); +CREATE TABLE "new_group_members" ( + "group_id" TEXT NOT NULL, + "user_id" TEXT NOT NULL, + "role" TEXT NOT NULL DEFAULT 'MEMBER', + "added_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + + PRIMARY KEY ("group_id", "user_id"), + CONSTRAINT "group_members_group_id_fkey" FOREIGN KEY ("group_id") REFERENCES "groups" ("id") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "group_members_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +INSERT INTO "new_group_members" ("added_at", "group_id", "role", "user_id") SELECT "added_at", "group_id", "role", "user_id" FROM "group_members"; +DROP TABLE "group_members"; +ALTER TABLE "new_group_members" RENAME TO "group_members"; +CREATE INDEX "group_members_user_id_idx" ON "group_members"("user_id"); +CREATE TABLE "new_meeting_participants" ( + "meeting_id" TEXT NOT NULL, + "user_id" TEXT NOT NULL, + "status" TEXT NOT NULL DEFAULT 'PENDING', + "added_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + + PRIMARY KEY ("meeting_id", "user_id"), + CONSTRAINT "meeting_participants_meeting_id_fkey" FOREIGN KEY ("meeting_id") REFERENCES "meetings" ("id") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "meeting_participants_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +INSERT INTO "new_meeting_participants" ("added_at", "meeting_id", "status", "user_id") SELECT "added_at", "meeting_id", "status", "user_id" FROM "meeting_participants"; +DROP TABLE "meeting_participants"; +ALTER TABLE "new_meeting_participants" RENAME TO "meeting_participants"; +CREATE INDEX "idx_participants_user_status" ON "meeting_participants"("user_id", "status"); +CREATE TABLE "new_notifications" ( + "id" TEXT NOT NULL PRIMARY KEY, + "user_id" TEXT NOT NULL, + "type" TEXT NOT NULL, + "related_entity_type" TEXT, + "related_entity_id" TEXT, + "message" TEXT NOT NULL, + "is_read" BOOLEAN NOT NULL DEFAULT false, + "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT "notifications_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +INSERT INTO "new_notifications" ("created_at", "id", "is_read", "message", "related_entity_id", "related_entity_type", "type", "user_id") SELECT "created_at", "id", "is_read", "message", "related_entity_id", "related_entity_type", "type", "user_id" FROM "notifications"; +DROP TABLE "notifications"; +ALTER TABLE "new_notifications" RENAME TO "notifications"; +CREATE INDEX "idx_notifications_user_read_time" ON "notifications"("user_id", "is_read", "created_at"); +CREATE TABLE "new_user_notification_preferences" ( + "user_id" TEXT NOT NULL, + "notification_type" TEXT NOT NULL, + "email_enabled" BOOLEAN NOT NULL DEFAULT false, + "updated_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + + PRIMARY KEY ("user_id", "notification_type"), + CONSTRAINT "user_notification_preferences_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +INSERT INTO "new_user_notification_preferences" ("email_enabled", "notification_type", "updated_at", "user_id") SELECT "email_enabled", "notification_type", "updated_at", "user_id" FROM "user_notification_preferences"; +DROP TABLE "user_notification_preferences"; +ALTER TABLE "new_user_notification_preferences" RENAME TO "user_notification_preferences"; +PRAGMA foreign_keys=ON; +PRAGMA defer_foreign_keys=OFF; diff --git a/src/components/forms/event-form.tsx b/src/components/forms/event-form.tsx index 6a99983..2fe350d 100644 --- a/src/components/forms/event-form.tsx +++ b/src/components/forms/event-form.tsx @@ -5,7 +5,6 @@ import { Button } from '@/components/ui/button'; import Logo from '@/components/misc/logo'; import TimePicker from '@/components/time-picker'; import { Label } from '@/components/ui/label'; -import { useGetApiUserMe } from '@/generated/api/user/user'; import { usePostApiEvent, useGetApiEventEventID, @@ -57,8 +56,11 @@ const EventForm: React.FC = (props) => { isSuccess, error, } = usePostApiEvent(); - const { data, isLoading, error: fetchError } = useGetApiUserMe(); - const { data: eventData } = useGetApiEventEventID(props.eventId!, { + const { + data: eventData, + isLoading, + isError, + } = useGetApiEventEventID(props.eventId!, { query: { enabled: props.type === 'edit' }, }); const patchEvent = usePatchApiEventEventID(); @@ -210,8 +212,7 @@ const EventForm: React.FC = (props) => { }, []); if (props.type === 'edit' && isLoading) return
Loading...
; - if (props.type === 'edit' && fetchError) - return
Error loading event.
; + if (props.type === 'edit' && isError) return
Error loading event.
; return ( @@ -298,7 +299,7 @@ const EventForm: React.FC = (props) => {

{!isClient || isLoading ? 'Loading...' - : data?.data.user?.name || 'Unknown User'} + : eventData?.data.event.organizer.name || 'Unknown User'}

From 83fe2c772cc8ed6d7ab43ca1a35f73b88ba897b9 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Tue, 1 Jul 2025 11:36:40 +0200 Subject: [PATCH 02/14] fix: event cards layout bugs --- src/app/(main)/events/[eventID]/page.tsx | 8 +++----- src/components/forms/event-form.tsx | 12 +++++------- src/components/time-picker.tsx | 6 +++--- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/app/(main)/events/[eventID]/page.tsx b/src/app/(main)/events/[eventID]/page.tsx index b9e01ca..0faae5f 100644 --- a/src/app/(main)/events/[eventID]/page.tsx +++ b/src/app/(main)/events/[eventID]/page.tsx @@ -8,7 +8,6 @@ import { useDeleteApiEventEventID, useGetApiEventEventID, } from '@/generated/api/event/event'; -import { useGetApiUserMe } from '@/generated/api/user/user'; import { RedirectButton } from '@/components/buttons/redirect-button'; import { useSession } from 'next-auth/react'; import ParticipantListEntry from '@/components/custom-ui/participant-list-entry'; @@ -35,10 +34,9 @@ export default function ShowEvent() { // Fetch event data const { data: eventData, isLoading, error } = useGetApiEventEventID(eventID); - const { data: userData, isLoading: userLoading } = useGetApiUserMe(); const deleteEvent = useDeleteApiEventEventID(); - if (isLoading || userLoading) { + if (isLoading) { return (
Loading...
); @@ -143,7 +141,7 @@ export default function ShowEvent() { Organiser: @@ -160,7 +158,7 @@ export default function ShowEvent() { {' '} -
+
{eventData.data.event.participants?.map((user) => ( ; @@ -56,13 +57,10 @@ const EventForm: React.FC = (props) => { isSuccess, error, } = usePostApiEvent(); - const { - data: eventData, - isLoading, - isError, - } = useGetApiEventEventID(props.eventId!, { + const { data: eventData } = useGetApiEventEventID(props.eventId!, { query: { enabled: props.type === 'edit' }, }); + const { data, isLoading, isError } = useGetApiUserMe(); const patchEvent = usePatchApiEventEventID(); const router = useRouter(); @@ -299,7 +297,7 @@ const EventForm: React.FC = (props) => {

{!isClient || isLoading ? 'Loading...' - : eventData?.data.event.organizer.name || 'Unknown User'} + : data?.data.user.name || 'Unknown User'}

@@ -336,7 +334,7 @@ const EventForm: React.FC = (props) => { -
+
{selectedParticipants.map((user) => ( -
+
+
@@ -69,7 +69,7 @@ export default function TimePicker({
-
+
From 6ae22a23c734519f1c08ab7eb7f3bea4c278d77c Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Tue, 1 Jul 2025 11:51:02 +0200 Subject: [PATCH 03/14] fix: layout issues --- src/app/(main)/events/[eventID]/page.tsx | 2 +- src/components/misc/header.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/(main)/events/[eventID]/page.tsx b/src/app/(main)/events/[eventID]/page.tsx index 0faae5f..b2c4005 100644 --- a/src/app/(main)/events/[eventID]/page.tsx +++ b/src/app/(main)/events/[eventID]/page.tsx @@ -63,7 +63,7 @@ export default function ShowEvent() { }; return ( -
+
diff --git a/src/components/misc/header.tsx b/src/components/misc/header.tsx index 0421563..c7718c2 100644 --- a/src/components/misc/header.tsx +++ b/src/components/misc/header.tsx @@ -32,7 +32,7 @@ export default function Header({ - Search + {items.map((item) => ( From c014b77f9b3609d970c6b0775a853f98890019dd Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Tue, 1 Jul 2025 14:40:41 +0200 Subject: [PATCH 04/14] fix(blocker): disallow blocker end times before start time --- src/app/api/blocked_slots/validation.ts | 44 ++-- src/components/forms/blocked-slot-form.tsx | 235 ++++++++++++--------- 2 files changed, 169 insertions(+), 110 deletions(-) diff --git a/src/app/api/blocked_slots/validation.ts b/src/app/api/blocked_slots/validation.ts index 3353f5e..1cbe42c 100644 --- a/src/app/api/blocked_slots/validation.ts +++ b/src/app/api/blocked_slots/validation.ts @@ -25,14 +25,6 @@ export const BlockedSlotsSchema = zod created_at: zod.date(), updated_at: zod.date(), }) - .refine( - (data) => { - return new Date(data.start_time) < new Date(data.end_time); - }, - { - message: 'Start time must be before end time', - }, - ) .openapi('BlockedSlotsSchema', { description: 'Blocked time slot in the user calendar', }); @@ -47,11 +39,37 @@ export const BlockedSlotResponseSchema = zod.object({ blocked_slot: BlockedSlotsSchema, }); -export const createBlockedSlotSchema = BlockedSlotsSchema.omit({ - id: true, - created_at: true, - updated_at: true, -}); +export const createBlockedSlotSchema = zod + .object({ + start_time: eventStartTimeSchema, + end_time: eventEndTimeSchema, + reason: zod.string().nullish(), + }) + .refine( + (data) => { + return new Date(data.start_time) < new Date(data.end_time); + }, + { + message: 'Start time must be before end time', + path: ['end_time'], + }, + ); + +export const createBlockedSlotClientSchema = zod + .object({ + start_time: zod.iso.datetime({ local: true }), + end_time: zod.iso.datetime({ local: true }), + reason: zod.string().nullish(), + }) + .refine( + (data) => { + return new Date(data.start_time) < new Date(data.end_time); + }, + { + message: 'Start time must be before end time', + path: ['end_time'], + }, + ); export const updateBlockedSlotSchema = zod.object({ start_time: eventStartTimeSchema.optional(), diff --git a/src/components/forms/blocked-slot-form.tsx b/src/components/forms/blocked-slot-form.tsx index 1293e58..52a119d 100644 --- a/src/components/forms/blocked-slot-form.tsx +++ b/src/components/forms/blocked-slot-form.tsx @@ -3,7 +3,7 @@ import useZodForm from '@/lib/hooks/useZodForm'; import { updateBlockedSlotSchema, - createBlockedSlotSchema, + createBlockedSlotClientSchema, } from '@/app/api/blocked_slots/validation'; import { useGetApiBlockedSlotsSlotID, @@ -40,12 +40,7 @@ export default function BlockedSlotForm({ handleSubmit: handleCreateSubmit, formState: formStateCreate, reset: resetCreate, - } = useZodForm( - createBlockedSlotSchema.extend({ - start_time: eventStartTimeSchema.or(zod.iso.datetime({ local: true })), - end_time: eventStartTimeSchema.or(zod.iso.datetime({ local: true })), - }), - ); + } = useZodForm(createBlockedSlotClientSchema); const { register: registerUpdate, @@ -145,100 +140,146 @@ export default function BlockedSlotForm({ }); }); - return ( -
- - -
-
- + if (existingBlockedSlotId) + return ( +
+ + +
+
+ +
+
+

{'Update Blocker'}

+
+
-
-

- {existingBlockedSlotId ? 'Update Blocker' : 'Create Blocker'} -

-
-
-
- - -
-
- - - -
-
- - {existingBlockedSlotId && ( + + + +
+ + + +
+
+ {existingBlockedSlotId && ( + + )} +
+ {formStateUpdate.errors.root && ( +

+ {formStateUpdate.errors.root.message} +

)} + +
+ +
+ ); + else + return ( +
+ + +
+
+ +
+
+

{'Create Blocker'}

+
+
- {formStateCreate.errors.root && ( -

- {formStateCreate.errors.root.message} -

- )} - {formStateUpdate.errors.root && ( -

- {formStateUpdate.errors.root.message} -

- )} - - -
-
- ); + + +
+
+ + + +
+
+ + {existingBlockedSlotId && ( + + )} +
+ {formStateCreate.errors.root && ( +

+ {formStateCreate.errors.root.message} +

+ )} +
+
+ +
+ ); } From 664c6cf283aa998898096c48676d91813a9eaeaa Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 1 Jul 2025 14:02:19 +0000 Subject: [PATCH 05/14] fix(deps): update dependency swagger-ui-react to v5.25.4 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3d5b0ce..b6517bd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10214,8 +10214,8 @@ __metadata: linkType: hard "swagger-ui-react@npm:^5.24.1": - version: 5.25.3 - resolution: "swagger-ui-react@npm:5.25.3" + version: 5.25.4 + resolution: "swagger-ui-react@npm:5.25.4" dependencies: "@babel/runtime-corejs3": "npm:^7.27.1" "@scarf/scarf": "npm:=1.4.0" @@ -10253,7 +10253,7 @@ __metadata: peerDependencies: react: ">=16.8.0 <19" react-dom: ">=16.8.0 <19" - checksum: 10c0/9d6542d0d1bd2533e87853d4deef5507d30b35941c697d50c763428533a88cbd9c2e3abe1af5946e35aa7fa3568dc14b9da4363f09bdf6d8023e0699efceb5cf + checksum: 10c0/e693d014d37f82244c2bb1211cd397afb993f0084b2862215e3766566402cf4ac58bda0c16c75af4170f294b91017c3ae597518da3aa677907f992631e56d617 languageName: node linkType: hard From de1a80aed873e69d1b42122ea7139005ed441a86 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 1 Jul 2025 21:01:28 +0000 Subject: [PATCH 06/14] chore(deps): update dependency eslint to v9.30.1 --- package.json | 2 +- yarn.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 2950955..6a09165 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "@types/webpack-env": "1.18.8", "cypress": "14.5.0", "dotenv-cli": "8.0.0", - "eslint": "9.30.0", + "eslint": "9.30.1", "eslint-config-next": "15.3.4", "eslint-config-prettier": "10.1.5", "orval": "7.10.0", diff --git a/yarn.lock b/yarn.lock index b6517bd..88eb61a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -489,10 +489,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.30.0": - version: 9.30.0 - resolution: "@eslint/js@npm:9.30.0" - checksum: 10c0/aec2df7f4e4e884d693dc27dbf4713c1a48afa327bfadac25ebd0e61a2797ce906f2f2a9be0d7d922acb68ccd68cc88779737811f9769eb4933d1f5e574c469e +"@eslint/js@npm:9.30.1": + version: 9.30.1 + resolution: "@eslint/js@npm:9.30.1" + checksum: 10c0/17fc382a0deafdb1cadac1269d9c2f2464f025bde6e4d12fc4f4775eb9886b41340d4650b72e85a53423644fdc89bf59c987a852f27379ad25feecf2c5bbc1c9 languageName: node linkType: hard @@ -5676,9 +5676,9 @@ __metadata: languageName: node linkType: hard -"eslint@npm:9.30.0": - version: 9.30.0 - resolution: "eslint@npm:9.30.0" +"eslint@npm:9.30.1": + version: 9.30.1 + resolution: "eslint@npm:9.30.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.12.1" @@ -5686,7 +5686,7 @@ __metadata: "@eslint/config-helpers": "npm:^0.3.0" "@eslint/core": "npm:^0.14.0" "@eslint/eslintrc": "npm:^3.3.1" - "@eslint/js": "npm:9.30.0" + "@eslint/js": "npm:9.30.1" "@eslint/plugin-kit": "npm:^0.3.1" "@humanfs/node": "npm:^0.16.6" "@humanwhocodes/module-importer": "npm:^1.0.1" @@ -5722,7 +5722,7 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10c0/ebc4b17cfd96f308ebaeb12dfab133a551eb03200c80109ecf663fbeb9af83c4eb3c143407c1b04522d23b5f5844fe9a629b00d409adfc460c1aadf5108da86a + checksum: 10c0/5a5867078e03ea56a1b6d1ee1548659abc38a6d5136c7ef94e21c5dbeb28e3ed50b15d2e0da25fce85600f6cf7ea7715eae650c41e8ae826c34490e9ec73d5d6 languageName: node linkType: hard @@ -7730,7 +7730,7 @@ __metadata: cypress: "npm:14.5.0" date-fns: "npm:^4.1.0" dotenv-cli: "npm:8.0.0" - eslint: "npm:9.30.0" + eslint: "npm:9.30.1" eslint-config-next: "npm:15.3.4" eslint-config-prettier: "npm:10.1.5" lucide-react: "npm:^0.525.0" From 7260985de3833b153bc697ceba1e38ac2376c1a8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 1 Jul 2025 22:01:49 +0000 Subject: [PATCH 07/14] chore(deps): update dependency cypress to v14.5.1 --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 6a09165..4e90d20 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@types/react-dom": "19.1.6", "@types/swagger-ui-react": "5.18.0", "@types/webpack-env": "1.18.8", - "cypress": "14.5.0", + "cypress": "14.5.1", "dotenv-cli": "8.0.0", "eslint": "9.30.1", "eslint-config-next": "15.3.4", diff --git a/yarn.lock b/yarn.lock index 88eb61a..9ad6130 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4786,9 +4786,9 @@ __metadata: languageName: node linkType: hard -"cypress@npm:14.5.0": - version: 14.5.0 - resolution: "cypress@npm:14.5.0" +"cypress@npm:14.5.1": + version: 14.5.1 + resolution: "cypress@npm:14.5.1" dependencies: "@cypress/request": "npm:^3.0.8" "@cypress/xvfb": "npm:^1.2.4" @@ -4836,7 +4836,7 @@ __metadata: yauzl: "npm:^2.10.0" bin: cypress: bin/cypress - checksum: 10c0/b76b05c029625357fbc34f22b632c55f9f981f86c3a568a88ea3d8982b8299e4bd4275e966b2ec767f9a989c6e9059fb03a4a8086048b4e990079b1cab19ba11 + checksum: 10c0/23c87cafcd2fe949af1b3297cc4c9c8f8d741f5dfa8119ff54b387227dba8dc0dbcfb2d160c4df5d4f281374524753598f3501f0fdf0b1ea66c5b8047484c0d2 languageName: node linkType: hard @@ -7727,7 +7727,7 @@ __metadata: class-variance-authority: "npm:^0.7.1" clsx: "npm:^2.1.1" cmdk: "npm:^1.1.1" - cypress: "npm:14.5.0" + cypress: "npm:14.5.1" date-fns: "npm:^4.1.0" dotenv-cli: "npm:8.0.0" eslint: "npm:9.30.1" From 30b0df062f26d1a711b80b15346604f1c97fdc9e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 3 Jul 2025 00:01:53 +0000 Subject: [PATCH 08/14] fix(deps): update dependency swagger-ui-react to v5.26.0 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9ad6130..bb71c58 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10214,8 +10214,8 @@ __metadata: linkType: hard "swagger-ui-react@npm:^5.24.1": - version: 5.25.4 - resolution: "swagger-ui-react@npm:5.25.4" + version: 5.26.0 + resolution: "swagger-ui-react@npm:5.26.0" dependencies: "@babel/runtime-corejs3": "npm:^7.27.1" "@scarf/scarf": "npm:=1.4.0" @@ -10253,7 +10253,7 @@ __metadata: peerDependencies: react: ">=16.8.0 <19" react-dom: ">=16.8.0 <19" - checksum: 10c0/e693d014d37f82244c2bb1211cd397afb993f0084b2862215e3766566402cf4ac58bda0c16c75af4170f294b91017c3ae597518da3aa677907f992631e56d617 + checksum: 10c0/4ce665f46171d724050435db86ce046d5a7777b5601d4ae6b418245e1fc9792591d6cb54fc583c074855f9890ff5b0e986b0a5601f47b79cfc8377dee8a3e3cc languageName: node linkType: hard From 583368c1ba5d3d1d3d68a50a248be71b02f5743f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 3 Jul 2025 01:02:10 +0000 Subject: [PATCH 09/14] chore(deps): update cypress/browsers:latest docker digest to 95587c1 --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b0d8710..a7ae637 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,7 +10,7 @@ jobs: name: Tests runs-on: docker container: - image: cypress/browsers:latest@sha256:9daea41366dfd1b72496bf3e8295eda215a6990c2dbe4f9ff4b8ba47342864fb + image: cypress/browsers:latest@sha256:95587c1ce688ce6f59934cc234a753a32a1782ca1c7959707a7d2332e69f6f63 options: --user 1001 steps: - name: Checkout From 92acd8a32bc1f7e6c2515cdf845626521c677c9f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 3 Jul 2025 01:02:17 +0000 Subject: [PATCH 10/14] chore(deps): update dependency @types/node to v22.16.0 --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 4e90d20..95266fc 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "devDependencies": { "@eslint/eslintrc": "3.3.1", "@tailwindcss/postcss": "4.1.11", - "@types/node": "22.15.34", + "@types/node": "22.16.0", "@types/react": "19.1.8", "@types/react-big-calendar": "1.16.2", "@types/react-dom": "19.1.6", diff --git a/yarn.lock b/yarn.lock index bb71c58..51956f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3387,12 +3387,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:22.15.34": - version: 22.15.34 - resolution: "@types/node@npm:22.15.34" +"@types/node@npm:22.16.0": + version: 22.16.0 + resolution: "@types/node@npm:22.16.0" dependencies: undici-types: "npm:~6.21.0" - checksum: 10c0/fb6a6b36daaa1b484aaba3d33b4d1e7b37ea993e29f20b7a676affa76ed6ff6acd2ded4d5003469bc8dbc815b3d224533b4560896037ef6d5b5d552721ab7d57 + checksum: 10c0/6219b521062f6c38d4d85ebd25807bd7f2bc703a5acba24e2c6716938d9d6cefd6fafd7b5156f61580eb58a0d82e8921751b778655675389631d813e5f261c03 languageName: node linkType: hard @@ -7717,7 +7717,7 @@ __metadata: "@radix-ui/react-tooltip": "npm:^1.2.7" "@tailwindcss/postcss": "npm:4.1.11" "@tanstack/react-query": "npm:^5.80.7" - "@types/node": "npm:22.15.34" + "@types/node": "npm:22.16.0" "@types/react": "npm:19.1.8" "@types/react-big-calendar": "npm:1.16.2" "@types/react-dom": "npm:19.1.6" From a4d33bf1d0d01f3a7ebf84ed6dfad34aaca0c865 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 3 Jul 2025 03:01:29 +0000 Subject: [PATCH 11/14] fix(deps): update dependency zod to v3.25.71 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index bb71c58..998ad23 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11314,8 +11314,8 @@ __metadata: linkType: hard "zod@npm:^3.25.60": - version: 3.25.67 - resolution: "zod@npm:3.25.67" - checksum: 10c0/80a0cab3033272c4ab9312198081f0c4ea88e9673c059aa36dc32024906363729db54bdb78f3dc9d5529bd1601f74974d5a56c0a23e40c6f04a9270c9ff22336 + version: 3.25.71 + resolution: "zod@npm:3.25.71" + checksum: 10c0/ccb251859609e6eed04b83f96ad7b2b7a189ca78b47176cde2c368102a5416b9c472e91b3fd96ceaa5043b2e513b3aec39fd99c36686ad2ad84f6c440afca53a languageName: node linkType: hard From be00d68a6842528ef1c09b6c6b8556f8803905cf Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 5 Jul 2025 00:02:24 +0000 Subject: [PATCH 12/14] fix(deps): update dependency zod to v3.25.74 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ee5777e..1fe2ad6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11314,8 +11314,8 @@ __metadata: linkType: hard "zod@npm:^3.25.60": - version: 3.25.71 - resolution: "zod@npm:3.25.71" - checksum: 10c0/ccb251859609e6eed04b83f96ad7b2b7a189ca78b47176cde2c368102a5416b9c472e91b3fd96ceaa5043b2e513b3aec39fd99c36686ad2ad84f6c440afca53a + version: 3.25.74 + resolution: "zod@npm:3.25.74" + checksum: 10c0/59e38b046ac333b5bd1ba325a83b6798721227cbfb1e69dfc7159bd7824b904241ab923026edb714fafefec3624265ae374a70aee9a5a45b365bd31781ffa105 languageName: node linkType: hard From 168fcaa731556a25c66ab87fbb596008420397dd Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 5 Jul 2025 01:06:13 +0000 Subject: [PATCH 13/14] fix(deps): update dependency react-hook-form to v7.60.0 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1fe2ad6..7215064 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9035,11 +9035,11 @@ __metadata: linkType: hard "react-hook-form@npm:^7.56.4": - version: 7.59.0 - resolution: "react-hook-form@npm:7.59.0" + version: 7.60.0 + resolution: "react-hook-form@npm:7.60.0" peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - checksum: 10c0/6be30ce65121f4be0f491c2929142e2d9a390a8802f58fb7a41ab978ab8daa6fcd2c442258dbd1b053e6864a83c8f4b1d83de9c95f0efdf5c2120d3c21bd838e + checksum: 10c0/eb8518d42a074d9e115d4b414bac18ae72708b2d047a9453dcc7588b00df300b32cebf6ecb7f2c8aa534808b3dc54bde4124af95c1e432b6691f9aba07c93b11 languageName: node linkType: hard From 872cfe363f1806d7ff0ca5610c2369add4a33d15 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 5 Jul 2025 10:02:31 +0000 Subject: [PATCH 14/14] fix(deps): update dependency react-day-picker to v9.8.0 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7215064..e96576f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8988,15 +8988,15 @@ __metadata: linkType: hard "react-day-picker@npm:^9.7.0": - version: 9.7.0 - resolution: "react-day-picker@npm:9.7.0" + version: 9.8.0 + resolution: "react-day-picker@npm:9.8.0" dependencies: "@date-fns/tz": "npm:1.2.0" date-fns: "npm:4.1.0" date-fns-jalali: "npm:4.1.0-0" peerDependencies: react: ">=16.8.0" - checksum: 10c0/c08c45a53aebceda1c938d2e4c95eb1702dcf149715e3457739f8930dce19a3be5780e5bad12dcc9d244d50b7e0efb226c336d81c1c062f616cf422e6a3804a6 + checksum: 10c0/910dfbc59e9fece7f5365a2a23ed497e07f227a733289e8141b858b6ce482087df6b01f2ba4f9f7e452ebc3465af0e227f192708a673396221865df07e5ab2ac languageName: node linkType: hard