import { ITeam, EntityType, IEventBus } from '../../types/CalendarTypes'; import { TeamStore } from './TeamStore'; import { BaseEntityService } from '../BaseEntityService'; import { IndexedDBContext } from '../IndexedDBContext'; /** * TeamService - CRUD operations for teams in IndexedDB * * Teams define which resources belong together for hierarchical grouping. * Extends BaseEntityService for standard entity operations. */ export class TeamService extends BaseEntityService { readonly storeName = TeamStore.STORE_NAME; readonly entityType: EntityType = 'Team'; constructor(context: IndexedDBContext, eventBus: IEventBus) { super(context, eventBus); } /** * Get teams by IDs */ async getByIds(ids: string[]): Promise { if (ids.length === 0) return []; const results = await Promise.all(ids.map(id => this.get(id))); return results.filter((t): t is ITeam => t !== null); } /** * Build reverse lookup: resourceId → teamId */ async buildResourceToTeamMap(): Promise> { const teams = await this.getAll(); const map: Record = {}; for (const team of teams) { for (const resourceId of team.resourceIds) { map[resourceId] = team.id; } } return map; } }