wip league admin tools
This commit is contained in:
@@ -3,6 +3,7 @@ import type { UseCaseOutputPort } from '@core/shared/application';
|
||||
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
|
||||
import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository';
|
||||
import { LeagueMembership } from '../../domain/entities/LeagueMembership';
|
||||
import type { MembershipRoleValue } from '../../domain/entities/MembershipRole';
|
||||
|
||||
export type UpdateLeagueMemberRoleInput = {
|
||||
leagueId: string;
|
||||
@@ -16,6 +17,8 @@ export type UpdateLeagueMemberRoleResult = {
|
||||
|
||||
export type UpdateLeagueMemberRoleErrorCode =
|
||||
| 'MEMBERSHIP_NOT_FOUND'
|
||||
| 'INVALID_ROLE'
|
||||
| 'CANNOT_DOWNGRADE_LAST_OWNER'
|
||||
| 'REPOSITORY_ERROR';
|
||||
|
||||
export class UpdateLeagueMemberRoleUseCase {
|
||||
@@ -40,11 +43,31 @@ export class UpdateLeagueMemberRoleUseCase {
|
||||
});
|
||||
}
|
||||
|
||||
const allowedRoles: MembershipRoleValue[] = ['owner', 'admin', 'steward', 'member'];
|
||||
const requestedRole = input.newRole as MembershipRoleValue;
|
||||
|
||||
if (!allowedRoles.includes(requestedRole)) {
|
||||
return Result.err({
|
||||
code: 'INVALID_ROLE',
|
||||
details: { message: 'Invalid membership role' },
|
||||
});
|
||||
}
|
||||
|
||||
const ownerCount = memberships.filter(m => m.role.toString() === 'owner').length;
|
||||
const isTargetOwner = membership.role.toString() === 'owner';
|
||||
|
||||
if (isTargetOwner && requestedRole !== 'owner' && ownerCount <= 1) {
|
||||
return Result.err({
|
||||
code: 'CANNOT_DOWNGRADE_LAST_OWNER',
|
||||
details: { message: 'Cannot downgrade the last owner' },
|
||||
});
|
||||
}
|
||||
|
||||
const updatedMembership = LeagueMembership.create({
|
||||
id: membership.id,
|
||||
leagueId: membership.leagueId.toString(),
|
||||
driverId: membership.driverId.toString(),
|
||||
role: input.newRole,
|
||||
role: requestedRole,
|
||||
status: membership.status.toString(),
|
||||
joinedAt: membership.joinedAt.toDate(),
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user