operations.service.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { inject, Injectable } from '@angular/core';
  2. import { OperationsDashboardData, OperationsPage, OperationsUser, OperationsUserDetail } from './admin.models';
  3. import { CloudFunctionsService } from './cloud-functions.service';
  4. export type OperationsListKind = 'relations' | 'course-bindings' | 'appointments' | 'lessons' | 'learning-records' | 'finance' | 'money-logs';
  5. @Injectable({ providedIn: 'root' })
  6. export class OperationsService {
  7. private readonly functions = inject(CloudFunctionsService);
  8. dashboard(): Promise<OperationsDashboardData> {
  9. return this.functions.operations<OperationsDashboardData>('ops/dashboard/summary');
  10. }
  11. users(page: number, pageSize: number, search: string, filters: Record<string, unknown> = {}): Promise<OperationsPage<OperationsUser>> {
  12. return this.functions.operations<OperationsPage<OperationsUser>>('ops/users/list', { page, pageSize, search, filters });
  13. }
  14. userDetail(objectId: string): Promise<OperationsUserDetail> {
  15. return this.functions.operations<OperationsUserDetail>('ops/users/detail', { objectId });
  16. }
  17. list(kind: OperationsListKind, page: number, pageSize: number, search: string, filters: Record<string, unknown> = {}): Promise<OperationsPage> {
  18. const operation = kind === 'relations' ? 'ops/relations/list'
  19. : kind === 'course-bindings' ? 'ops/course-bindings/list'
  20. : kind === 'appointments' ? 'ops/appointments/list'
  21. : kind === 'lessons' ? 'ops/lessons/list'
  22. : kind === 'learning-records' ? 'ops/learning-records/list'
  23. : kind === 'finance' ? 'ops/finance/list'
  24. : 'ops/money-logs/list';
  25. return this.functions.operations<OperationsPage>(operation, { page, pageSize, search, filters });
  26. }
  27. mutate<T>(operation: string, targetId: string, reason: string, payload: Record<string, unknown> = {}, expectedUpdatedAt = ''): Promise<T> {
  28. return this.functions.operations<T>(operation, { targetId, reason, payload, expectedUpdatedAt });
  29. }
  30. }