/** * Domain Value Object: LeagueRoles * * Utility functions for working with league membership roles. */ import type { MembershipRole } from '../entities/LeagueMembership'; /** * Role hierarchy (higher number = more authority) */ const ROLE_HIERARCHY: Record = { member: 0, steward: 1, admin: 2, owner: 3, }; /** * Check if a role is at least steward level */ export function isLeagueStewardOrHigherRole(role: MembershipRole): boolean { return ROLE_HIERARCHY[role] >= ROLE_HIERARCHY.steward; } /** * Check if a role is at least admin level */ export function isLeagueAdminOrHigherRole(role: MembershipRole): boolean { return ROLE_HIERARCHY[role] >= ROLE_HIERARCHY.admin; } /** * Check if a role is owner */ export function isLeagueOwnerRole(role: MembershipRole): boolean { return role === 'owner'; } /** * Compare two roles * Returns positive if role1 > role2, negative if role1 < role2, 0 if equal */ export function compareRoles(role1: MembershipRole, role2: MembershipRole): number { return ROLE_HIERARCHY[role1] - ROLE_HIERARCHY[role2]; } /** * Get role display name */ export function getRoleDisplayName(role: MembershipRole): string { const names: Record = { member: 'Member', steward: 'Steward', admin: 'Admin', owner: 'Owner', }; return names[role]; } /** * Get all roles in order of hierarchy */ export function getAllRolesOrdered(): MembershipRole[] { return ['member', 'steward', 'admin', 'owner']; } /** * Get roles that can be assigned (excludes owner as it's transferred, not assigned) */ export function getAssignableRoles(): MembershipRole[] { return ['member', 'steward', 'admin']; }