import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Observable, of } from 'rxjs'; import { DegreePrograms } from '../models/degree-program'; import { AuditMetadata } from '../models/audit-metadata'; import { StudentDegreeProgram } from '../models/student-degree-program'; import { environment } from './../../../environments/environment'; import { Audit } from '../models/audit/audit'; import { CourseBase } from '@app/core/models/course'; import { delay } from 'rxjs/operators'; const auditResponse: Audit = require('../../../assets/mock-data/audit-response.json'); const degreeProgramsResponse: DegreePrograms = require('../../../assets/mock-data/degreeprograms-response.json'); const auditMetadata: AuditMetadata[] = require('../../../assets/mock-data/auditmetadata.json'); const studentplans: StudentDegreeProgram[] = require('../../../assets/mock-data/studentplans.json'); const HTTP_OPTIONS = { headers: new HttpHeaders({ 'Content-Type': 'applications/json', }), }; @Injectable({ providedIn: 'root' }) export class DarsApiService { constructor(private http: HttpClient) {} /** * Get all degree programs, honors, and institution data. * */ public getStaticData(): Observable<DegreePrograms> { // Prevents errors locally if (environment.production) { const url = 'http://dev-enroll-app-data.s3-website-us-east-1.amazonaws.com/degreeprograms.json'; return this.http.get<DegreePrograms>(url, HTTP_OPTIONS); } else { return of(degreeProgramsResponse); } } /** * * Get courses */ public getAllCourses( roadmapId: number, ): Observable<{ termCode: string; courses: CourseBase[] }[]> { return this.http.get<{ termCode: string; courses: CourseBase[] }[]>( `${environment.apiPlannerUrl}/degreePlan/${roadmapId}/courses`, HTTP_OPTIONS, ); } /** * Get students degree programs. */ public getStudentDegreePrograms(): Observable<StudentDegreeProgram[]> { const url = `${environment.apiDarsUrl}/studentplans`; return this.http.get<StudentDegreeProgram[]>(url, HTTP_OPTIONS); } /** * Get audit metadata for all audits a user has. */ public getAudits(): Observable<AuditMetadata[]> { const url = `${environment.apiDarsUrl}/auditmetadata`; return this.http.get<AuditMetadata[]>(url, HTTP_OPTIONS); } /** * Get a single audit. */ public getAudit(reportId: number): Observable<Audit> { // const url = `${environment.apiDarsUrl}/reports/${reportId}`; // return this.http.get<any>(url, HTTP_OPTIONS); return of(auditResponse); } /** * Request a new audit */ public newAudit( darsInstitutionCode: string, darsDegreeProgramCode: string, ): Observable<AuditMetadata> { const url = `${environment.apiDarsUrl}/single-audit-requests`; return this.http.post<AuditMetadata>( url, { darsInstitutionCode, darsDegreeProgramCode }, HTTP_OPTIONS, ); } }