import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Category, Course } from 'app/modules/admin/apps/academy/academy.types'; import { BehaviorSubject, map, Observable, of, switchMap, tap, throwError } from 'rxjs'; @Injectable({providedIn: 'root'}) export class AcademyService { // Private private _categories: BehaviorSubject = new BehaviorSubject(null); private _course: BehaviorSubject = new BehaviorSubject(null); private _courses: BehaviorSubject = new BehaviorSubject(null); /** * Constructor */ constructor(private _httpClient: HttpClient) { } // ----------------------------------------------------------------------------------------------------- // @ Accessors // ----------------------------------------------------------------------------------------------------- /** * Getter for categories */ get categories$(): Observable { return this._categories.asObservable(); } /** * Getter for courses */ get courses$(): Observable { return this._courses.asObservable(); } /** * Getter for course */ get course$(): Observable { return this._course.asObservable(); } // ----------------------------------------------------------------------------------------------------- // @ Public methods // ----------------------------------------------------------------------------------------------------- /** * Get categories */ getCategories(): Observable { return this._httpClient.get('api/apps/academy/categories').pipe( tap((response: any) => { this._categories.next(response); }), ); } /** * Get courses */ getCourses(): Observable { return this._httpClient.get('api/apps/academy/courses').pipe( tap((response: any) => { this._courses.next(response); }), ); } /** * Get course by id */ getCourseById(id: string): Observable { return this._httpClient.get('api/apps/academy/courses/course', {params: {id}}).pipe( map((course) => { // Update the course this._course.next(course); // Return the course return course; }), switchMap((course) => { if ( !course ) { return throwError('Could not found course with id of ' + id + '!'); } return of(course); }), ); } }