import { Errors } from '@/lib/errors'; import { db } from '@/lib/prisma'; import { type Result, err, ok } from '@/lib/result'; import type { CancelComplexInvitationResponse } from '@repo/api-contract'; import { ensureComplexAdmin } from '../../shared/members-helpers'; export async function cancelComplexInvitation( userId: string, complexId: string, invitationId: string ): Promise> { const adminResult = await ensureComplexAdmin(userId, complexId); if (!adminResult.ok) return adminResult; const invitation = await db.complexInvitation.findUnique({ where: { id: invitationId }, select: { complexId: true, acceptedAt: true, revokedAt: true }, }); if (!invitation || invitation.complexId !== complexId) { return err(Errors.notFound('La invitación no existe.')); } if (invitation.acceptedAt) { return err(Errors.conflict('La invitación ya fue aceptada.')); } if (invitation.revokedAt) { return ok({ ok: true }); } await db.complexInvitation.update({ where: { id: invitationId }, data: { revokedAt: new Date() }, }); return ok({ ok: true }); }