Consolidates V2 codebase into main project directory Updates build script to support simplified entry points Removes redundant files and cleans up project organization Simplifies module imports and entry points for calendar application
44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
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<ITeam> {
|
|
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<ITeam[]> {
|
|
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<Record<string, string>> {
|
|
const teams = await this.getAll();
|
|
const map: Record<string, string> = {};
|
|
|
|
for (const team of teams) {
|
|
for (const resourceId of team.resourceIds) {
|
|
map[resourceId] = team.id;
|
|
}
|
|
}
|
|
|
|
return map;
|
|
}
|
|
}
|