refactor
This commit is contained in:
@@ -1,33 +1,42 @@
|
||||
/**
|
||||
* Domain Entity: LeagueMembership and JoinRequest
|
||||
* Domain Entity: LeagueMembership
|
||||
*
|
||||
* Represents a driver's membership in a league and join requests.
|
||||
* Represents a driver's membership in a league.
|
||||
*/
|
||||
|
||||
import type { IEntity } from '@core/shared/domain';
|
||||
import { RacingDomainValidationError } from '../errors/RacingDomainError';
|
||||
|
||||
export type MembershipRole = 'owner' | 'admin' | 'steward' | 'member';
|
||||
export type MembershipStatus = 'active' | 'inactive' | 'pending';
|
||||
import { LeagueId } from './LeagueId';
|
||||
import { DriverId } from '../value-objects/DriverId';
|
||||
import { MembershipRole, MembershipRoleValue } from './MembershipRole';
|
||||
import { MembershipStatus, MembershipStatusValue } from './MembershipStatus';
|
||||
import { JoinedAt } from '../value-objects/JoinedAt';
|
||||
|
||||
export interface LeagueMembershipProps {
|
||||
id?: string;
|
||||
leagueId: string;
|
||||
driverId: string;
|
||||
role: MembershipRole;
|
||||
status?: MembershipStatus;
|
||||
role: string;
|
||||
status?: string;
|
||||
joinedAt?: Date;
|
||||
}
|
||||
|
||||
export class LeagueMembership implements IEntity<string> {
|
||||
readonly id: string;
|
||||
readonly leagueId: string;
|
||||
readonly driverId: string;
|
||||
readonly leagueId: LeagueId;
|
||||
readonly driverId: DriverId;
|
||||
readonly role: MembershipRole;
|
||||
readonly status: MembershipStatus;
|
||||
readonly joinedAt: Date;
|
||||
readonly joinedAt: JoinedAt;
|
||||
|
||||
private constructor(props: Required<LeagueMembershipProps>) {
|
||||
private constructor(props: {
|
||||
id: string;
|
||||
leagueId: LeagueId;
|
||||
driverId: DriverId;
|
||||
role: MembershipRole;
|
||||
status: MembershipStatus;
|
||||
joinedAt: JoinedAt;
|
||||
}) {
|
||||
this.id = props.id;
|
||||
this.leagueId = props.leagueId;
|
||||
this.driverId = props.driverId;
|
||||
@@ -44,14 +53,17 @@ export class LeagueMembership implements IEntity<string> {
|
||||
? props.id
|
||||
: `${props.leagueId}:${props.driverId}`;
|
||||
|
||||
const status = props.status ?? 'pending';
|
||||
const joinedAt = props.joinedAt ?? new Date();
|
||||
const leagueId = LeagueId.create(props.leagueId);
|
||||
const driverId = DriverId.create(props.driverId);
|
||||
const role = MembershipRole.create(props.role as MembershipRoleValue);
|
||||
const status = MembershipStatus.create((props.status ?? 'pending') as MembershipStatusValue);
|
||||
const joinedAt = JoinedAt.create(props.joinedAt ?? new Date());
|
||||
|
||||
return new LeagueMembership({
|
||||
id,
|
||||
leagueId: props.leagueId,
|
||||
driverId: props.driverId,
|
||||
role: props.role,
|
||||
leagueId,
|
||||
driverId,
|
||||
role,
|
||||
status,
|
||||
joinedAt,
|
||||
});
|
||||
@@ -70,12 +82,4 @@ export class LeagueMembership implements IEntity<string> {
|
||||
throw new RacingDomainValidationError('Membership role is required');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export interface JoinRequest {
|
||||
id: string;
|
||||
leagueId: string;
|
||||
driverId: string;
|
||||
requestedAt: Date;
|
||||
message?: string;
|
||||
}
|
||||
Reference in New Issue
Block a user