Files
playzer/apps/backend/src/modules/complex/features/cancel-complex-invitation/cancel-complex-invitation.business.ts
2026-06-26 14:05:37 -03:00

39 lines
1.1 KiB
TypeScript

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<Result<CancelComplexInvitationResponse>> {
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 });
}