diff --git a/src/app/services/umpire.service.spec.ts b/src/app/services/umpire.service.spec.ts new file mode 100644 index 0000000..177cb7b --- /dev/null +++ b/src/app/services/umpire.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { UmpireService } from './umpire.service'; + +describe('Umpire', () => { + let service: UmpireService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(UmpireService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/umpire.service.ts b/src/app/services/umpire.service.ts new file mode 100644 index 0000000..5b23298 --- /dev/null +++ b/src/app/services/umpire.service.ts @@ -0,0 +1,61 @@ +import { Injectable } from '@angular/core'; +import { db } from 'db'; +import { liveQuery } from 'dexie'; +import { from } from 'rxjs'; +import { Umpire } from '../../../db'; +import { toSignal } from '@angular/core/rxjs-interop'; + +@Injectable({ + providedIn: 'root' +}) +export class UmpireService { + /** + * Reactive signal with all umpires + */ + readonly umpires = toSignal( + from(liveQuery(() => db.umpires.orderBy('lastName').toArray())), + { + initialValue: [] + } + ); + + /** + * Create + */ + async create(umpire: Omit): Promise { + return await db.umpires.add({ + ...umpire + } as Umpire); + } + + /** + * Read one + */ + async getById(id: number): Promise { + return await db.umpires.get(id); + } + + /** + * Update + */ + async update( + id: number, + changes: Partial> + ): Promise { + return await db.umpires.update(id, changes); + } + + /** + * Delete + */ + async delete(id: number): Promise { + await db.umpires.delete(id); + } + + /** + * Delete all + */ + async clear(): Promise { + await db.umpires.clear(); + } +}