Files
angular-challenges/libs/ngrx-notification/backend/src/lib/fake-db.service.ts
2022-11-24 14:44:34 +01:00

68 lines
1.9 KiB
TypeScript

import {
School,
Student,
Teacher,
} from '@angular-challenges/ngrx-notification/model';
import { Injectable } from '@angular/core';
import { randNumber } from '@ngneat/falso';
import { ComponentStore } from '@ngrx/component-store';
@Injectable({ providedIn: 'root' })
export class FakeDBService extends ComponentStore<{
teachers: Teacher[];
students: Student[];
schools: School[];
}> {
readonly teachers$ = this.select((state) => state.teachers);
readonly randomTeacher$ = this.select(
this.teachers$,
(teachers) => teachers[randNumber({ max: teachers.length - 1 })]
);
readonly students$ = this.select((state) => state.students);
readonly randomStudents$ = this.select(
this.students$,
(students) => students[randNumber({ max: students.length - 1 })]
);
readonly schools$ = this.select((state) => state.schools);
readonly randomSchool$ = this.select(
this.schools$,
(schools) => schools[randNumber({ max: schools.length - 1 })]
);
constructor() {
super({ teachers: [], students: [], schools: [] });
}
addTeacher = this.updater((state, teacher: Teacher) => ({
...state,
teachers: [...state.teachers, teacher],
}));
updateTeacher = this.updater((state, teacher: Teacher) => ({
...state,
teachers: state.teachers.map((t) => (t.id === teacher.id ? teacher : t)),
}));
addStudent = this.updater((state, student: Student) => ({
...state,
students: [...state.students, student],
}));
updateSudent = this.updater((state, student: Student) => ({
...state,
students: state.students.map((t) => (t.id === student.id ? student : t)),
}));
addSchool = this.updater((state, school: School) => ({
...state,
schools: [...state.schools, school],
}));
updateSchool = this.updater((state, school: School) => ({
...state,
schools: state.schools.map((t) => (t.id === school.id ? school : t)),
}));
}