From ab69711e87eabe6a9065f8ca1285a17c4f5327f1 Mon Sep 17 00:00:00 2001 From: Jose Selesan Date: Fri, 26 Jun 2026 14:58:40 -0300 Subject: [PATCH] fix: update recurringGroupId assignment and improve type definitions in helpers --- .../create-admin-recurring-booking.business.ts | 4 ++-- .../src/modules/admin-booking/shared/helpers.ts | 2 +- .../create-complex/create-complex.business.ts | 11 +++++++++-- .../src/modules/public-booking/shared/helpers.ts | 8 ++++++-- .../test/complex/invite-complex-user.handler.test.ts | 10 ++++++++-- apps/backend/test/sport/create-sport.handler.test.ts | 8 ++++---- apps/backend/tsconfig.json | 4 +++- 7 files changed, 33 insertions(+), 14 deletions(-) diff --git a/apps/backend/src/modules/admin-booking/features/create-admin-recurring-booking/create-admin-recurring-booking.business.ts b/apps/backend/src/modules/admin-booking/features/create-admin-recurring-booking/create-admin-recurring-booking.business.ts index 240bdf7..b484ad8 100644 --- a/apps/backend/src/modules/admin-booking/features/create-admin-recurring-booking/create-admin-recurring-booking.business.ts +++ b/apps/backend/src/modules/admin-booking/features/create-admin-recurring-booking/create-admin-recurring-booking.business.ts @@ -249,7 +249,7 @@ export async function createAdminRecurringBooking( customerPhone: input.customerPhone.trim(), customerEmail: input.customerEmail?.trim() ?? '', status: 'CONFIRMED', - recurringGroupId: groupId, + recurringGroupId: groupId, }, include: { court: { @@ -298,7 +298,7 @@ export async function createAdminRecurringBooking( customerEmail: b.customerEmail, price: 0, status: b.status as 'CONFIRMED', - recurringGroupId: groupId, + recurringGroupId: result.group.id, createdAt: b.createdAt.toISOString(), updatedAt: b.updatedAt.toISOString(), })), diff --git a/apps/backend/src/modules/admin-booking/shared/helpers.ts b/apps/backend/src/modules/admin-booking/shared/helpers.ts index 09fc0ab..c7397f5 100644 --- a/apps/backend/src/modules/admin-booking/shared/helpers.ts +++ b/apps/backend/src/modules/admin-booking/shared/helpers.ts @@ -113,7 +113,7 @@ export async function ensureComplexAccess( Result<{ id: string; complexName: string; - plan: { rules: string } | null; + plan: { rules: unknown } | null; }> > { const complexUser = await db.complexUser.findUnique({ diff --git a/apps/backend/src/modules/complex/features/create-complex/create-complex.business.ts b/apps/backend/src/modules/complex/features/create-complex/create-complex.business.ts index 849e074..7931216 100644 --- a/apps/backend/src/modules/complex/features/create-complex/create-complex.business.ts +++ b/apps/backend/src/modules/complex/features/create-complex/create-complex.business.ts @@ -1,6 +1,5 @@ import { db } from '@/lib/prisma'; import { buildUniqueSlug, slugify } from '@/lib/slug'; -import { ensureActiveSport } from '@/modules/court/shared/guards'; import type { CreateComplexInput } from '@repo/api-contract'; import { v7 as uuidv7 } from 'uuid'; @@ -65,7 +64,15 @@ export async function createComplex(input: CreateComplexInternalInput) { } if (input.setupCourts && input.courtSportId) { - const sport = await ensureActiveSport(input.courtSportId); + const sport = await tx.sport.findFirst({ + where: { id: input.courtSportId, isActive: true }, + select: { name: true }, + }); + + if (!sport) { + throw new Error('El deporte seleccionado no existe o esta inactivo.'); + } + const availability = (input.courtDaysOfWeek ?? []).map((day) => ({ dayOfWeek: day as DayOfWeek, startTime: input.courtStartTime ?? '08:00', diff --git a/apps/backend/src/modules/public-booking/shared/helpers.ts b/apps/backend/src/modules/public-booking/shared/helpers.ts index e777f65..72b0963 100644 --- a/apps/backend/src/modules/public-booking/shared/helpers.ts +++ b/apps/backend/src/modules/public-booking/shared/helpers.ts @@ -34,7 +34,11 @@ export type PriceableCourt = { }>; }; -export type ComplexWithPublicBookingData = Awaited>; +export type ComplexWithPublicBookingData = { + courts: Array<{ + sport: { id: string; name: string; slug: string; isActive: boolean }; + }>; +}; export function toMinutes(value: string): number { const [hours, minutes] = value.split(':').map((part) => Number(part)); @@ -171,7 +175,7 @@ export function validateSportSelection( export async function getComplexWithBookingData( complexSlug: string -): Promise> { +) { const complex = await db.complex.findUnique({ where: { complexSlug }, select: { diff --git a/apps/backend/test/complex/invite-complex-user.handler.test.ts b/apps/backend/test/complex/invite-complex-user.handler.test.ts index c7c5751..67b1b64 100644 --- a/apps/backend/test/complex/invite-complex-user.handler.test.ts +++ b/apps/backend/test/complex/invite-complex-user.handler.test.ts @@ -1,10 +1,16 @@ import { beforeEach, expect, mock, test } from 'bun:test'; import { Errors } from '@/lib/errors'; -import { err, ok } from '@/lib/result'; +import { type Result, err, ok } from '@/lib/result'; import type { InviteComplexUserResponse } from '@repo/api-contract'; -const inviteComplexUserMock = mock(async () => undefined as unknown as InviteComplexUserResponse); +type InviteComplexUserFn = ( + userId: string, + complexId: string, + input: { email: string } +) => Promise>; + +const inviteComplexUserMock = mock(async () => undefined as never); const { createInviteComplexUserHandler } = await import( '@/modules/complex/features/invite-complex-user/invite-complex-user.handler' diff --git a/apps/backend/test/sport/create-sport.handler.test.ts b/apps/backend/test/sport/create-sport.handler.test.ts index 38fb54f..3723a68 100644 --- a/apps/backend/test/sport/create-sport.handler.test.ts +++ b/apps/backend/test/sport/create-sport.handler.test.ts @@ -10,8 +10,8 @@ const createSportMock = mock(async (_input: CreateSportInput) => name: 'Tenis', slug: 'tenis', isActive: true, - createdAt: '2026-04-23T00:00:00.000Z', - updatedAt: '2026-04-23T00:00:00.000Z', + createdAt: new Date('2026-04-23T00:00:00.000Z'), + updatedAt: new Date('2026-04-23T00:00:00.000Z'), }) ); @@ -56,8 +56,8 @@ test('returns 201 with the created sport', async () => { name: 'Tenis', slug: 'tenis', isActive: true, - createdAt: '2026-04-23T00:00:00.000Z', - updatedAt: '2026-04-23T00:00:00.000Z', + createdAt: new Date('2026-04-23T00:00:00.000Z'), + updatedAt: new Date('2026-04-23T00:00:00.000Z'), } as const; createSportMock.mockResolvedValue(ok(createdSport)); diff --git a/apps/backend/tsconfig.json b/apps/backend/tsconfig.json index a80d9c3..fbdd27f 100644 --- a/apps/backend/tsconfig.json +++ b/apps/backend/tsconfig.json @@ -15,8 +15,10 @@ "./src/*" ] }, + "rootDir": "./src", "outDir": "./dist", "jsx": "react-jsx", "jsxImportSource": "hono/jsx" - } + }, + "include": ["src"] } \ No newline at end of file