api client refactor
This commit is contained in:
47
apps/website/lib/view-models/TeamDetailsViewModel.ts
Normal file
47
apps/website/lib/view-models/TeamDetailsViewModel.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import { TeamDetailsDto, TeamMemberDto } from '../dtos';
|
||||
import { TeamMemberViewModel } from './TeamMemberViewModel';
|
||||
|
||||
export class TeamDetailsViewModel implements TeamDetailsDto {
|
||||
id: string;
|
||||
name: string;
|
||||
description?: string;
|
||||
logoUrl?: string;
|
||||
memberCount: number;
|
||||
ownerId: string;
|
||||
members: TeamMemberViewModel[];
|
||||
|
||||
private currentUserId: string;
|
||||
|
||||
constructor(dto: TeamDetailsDto & { members: TeamMemberDto[] }, currentUserId: string) {
|
||||
this.id = dto.id;
|
||||
this.name = dto.name;
|
||||
this.description = dto.description;
|
||||
this.logoUrl = dto.logoUrl;
|
||||
this.memberCount = dto.memberCount;
|
||||
this.ownerId = dto.ownerId;
|
||||
this.members = dto.members.map(m => new TeamMemberViewModel(m, currentUserId, dto.ownerId));
|
||||
this.currentUserId = currentUserId;
|
||||
}
|
||||
|
||||
/** UI-specific: Whether current user is owner */
|
||||
get isOwner(): boolean {
|
||||
return this.currentUserId === this.ownerId;
|
||||
}
|
||||
|
||||
/** UI-specific: Whether can add members */
|
||||
get canAddMembers(): boolean {
|
||||
return this.isOwner && this.memberCount < 10; // Assuming max 10
|
||||
}
|
||||
|
||||
/** UI-specific: Member management actions available */
|
||||
get memberActionsAvailable(): boolean {
|
||||
return this.isOwner;
|
||||
}
|
||||
|
||||
/** UI-specific: Team status */
|
||||
get teamStatus(): string {
|
||||
if (this.memberCount < 5) return 'Recruiting';
|
||||
if (this.memberCount < 10) return 'Active';
|
||||
return 'Full';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user