From 9e5e0d0c7443d0474a45b9c07926f2bcf10494e6 Mon Sep 17 00:00:00 2001
From: ievavold <ievavold@wisc.edu>
Date: Mon, 3 Jun 2019 13:44:57 -0500
Subject: [PATCH] ROENROLL-1779 add basic DARS API endpoints

Co-authored-by: Scott Berg <saberg3@wisc.edu>
---
 src/app/dars/dars-view/dars-view.component.ts |  3 +
 src/app/dars/models/audit-metadata.ts         | 15 +++++
 src/app/dars/models/degree-program.ts         |  6 ++
 src/app/dars/models/honors-option.ts          |  5 ++
 src/app/dars/models/institution.ts            |  4 ++
 src/app/dars/models/student-degree-program.ts | 14 +++++
 src/app/dars/services/api.service.ts          | 61 +++++++++++++++++++
 src/environments/environment.prod.ts          |  1 +
 src/environments/environment.ts               |  1 +
 9 files changed, 110 insertions(+)
 create mode 100644 src/app/dars/models/audit-metadata.ts
 create mode 100644 src/app/dars/models/degree-program.ts
 create mode 100644 src/app/dars/models/honors-option.ts
 create mode 100644 src/app/dars/models/institution.ts
 create mode 100644 src/app/dars/models/student-degree-program.ts
 create mode 100644 src/app/dars/services/api.service.ts

diff --git a/src/app/dars/dars-view/dars-view.component.ts b/src/app/dars/dars-view/dars-view.component.ts
index 70942c9..4c4db3f 100644
--- a/src/app/dars/dars-view/dars-view.component.ts
+++ b/src/app/dars/dars-view/dars-view.component.ts
@@ -1,5 +1,6 @@
 import { Component, ViewChild, ElementRef } from '@angular/core';
 import { MatSidenav } from '@angular/material';
+import { DarsApiService } from '../services/api.service';
 
 @Component({
   selector: 'cse-dars-view',
@@ -47,4 +48,6 @@ export class DARSViewComponent {
       plan: 12345,
     },
   ];
+
+  constructor(private api: DarsApiService) {}
 }
diff --git a/src/app/dars/models/audit-metadata.ts b/src/app/dars/models/audit-metadata.ts
new file mode 100644
index 0000000..319442d
--- /dev/null
+++ b/src/app/dars/models/audit-metadata.ts
@@ -0,0 +1,15 @@
+export interface AuditMetadata {
+  darsJobId: string;
+  darsAuditRunDate: string;
+  sisEmplId: string;
+  darsInstitutionCode: string;
+  darsInstitutionCodeDescription: string;
+  darsDegreeProgramCode: string;
+  darsStatusOfDegreeAuditRequest: string;
+  darsHonorsOptionCode: string;
+  darsHonorsOptionDescription: string;
+  darsDegreeAuditReportId: number;
+  darsCatalogYearTerm: string;
+  whichEnrolledCoursesIncluded: string;
+  degreePlannerPlanName: string;
+}
diff --git a/src/app/dars/models/degree-program.ts b/src/app/dars/models/degree-program.ts
new file mode 100644
index 0000000..697bcad
--- /dev/null
+++ b/src/app/dars/models/degree-program.ts
@@ -0,0 +1,6 @@
+export interface DegreeProgram {
+  darsDegreeProgramCode: string;
+  darsInstitutionCode: string;
+  darsInstitutionCodeDescription: string;
+  darsDegreeProgramDescription: string;
+}
diff --git a/src/app/dars/models/honors-option.ts b/src/app/dars/models/honors-option.ts
new file mode 100644
index 0000000..0741ecc
--- /dev/null
+++ b/src/app/dars/models/honors-option.ts
@@ -0,0 +1,5 @@
+export interface HonorsOption {
+  darsInstitutionCode: string;
+  darsHonorsOptionCode: string;
+  darsHonorsOptionDescription: string;
+}
diff --git a/src/app/dars/models/institution.ts b/src/app/dars/models/institution.ts
new file mode 100644
index 0000000..e55a3c9
--- /dev/null
+++ b/src/app/dars/models/institution.ts
@@ -0,0 +1,4 @@
+export interface Institution {
+  darsInstitutionCode: string;
+  darsInstitutionCodeDescription: string;
+}
diff --git a/src/app/dars/models/student-degree-program.ts b/src/app/dars/models/student-degree-program.ts
new file mode 100644
index 0000000..2a88d0b
--- /dev/null
+++ b/src/app/dars/models/student-degree-program.ts
@@ -0,0 +1,14 @@
+import { AuditMetadata } from './audit-metadata';
+
+export interface StudentDegreeProgram {
+  darsDegreeProgramCode: string;
+  darsInstitutionCode: string;
+  darsCatalogYearTerm: string;
+  darsAlternateCatalogYearTerm1: string;
+  sisAcademicPlanCode: string;
+  sisAcademicPlanDescription: string;
+  sisAcademicPlanDeclareDate: string;
+  sisAcademicSubPlanCode: string;
+  sisAcademicSubPlanDescription: string;
+  auditRequestBody: AuditMetadata;
+}
diff --git a/src/app/dars/services/api.service.ts b/src/app/dars/services/api.service.ts
new file mode 100644
index 0000000..2db81d6
--- /dev/null
+++ b/src/app/dars/services/api.service.ts
@@ -0,0 +1,61 @@
+import { Injectable } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Observable } from 'rxjs';
+import { DegreeProgram } from '../models/degree-program';
+import { AuditMetadata } from '../models/audit-metadata';
+import { StudentDegreeProgram } from '../models/student-degree-program';
+import { environment } from './../../../environments/environment';
+
+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.
+   *
+   * All the data for institutions, honors, and degree programs is static.
+   * The backend is going to cache all this data in S3 and create a single
+   * endpoint for us to hit and get all of it!
+   */
+  public getStaticData(): Observable<DegreeProgram[]> {
+    return new Observable();
+  }
+
+  /**
+   * Get a students degree programs.
+   */
+  public getStudentDegreePrograms(emplid: number) {
+    const url = `${environment.apiDarsUrl}/student-degree-programs/${emplid}`;
+    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}/audit-metadata`;
+    return this.http.get<AuditMetadata[]>(url, HTTP_OPTIONS);
+  }
+
+  /**
+   * Get a single audit.
+   */
+  public getAudit(reportId: number): Observable<any> {
+    const url = `${environment.apiDarsUrl}/reports/${reportId}`;
+    return this.http.get<any>(url, HTTP_OPTIONS);
+  }
+
+  /**
+   * Request a new audit
+   */
+  public newAudit(): Observable<AuditMetadata> {
+    const url = `${environment.apiDarsUrl}/single-audit-requests`;
+    return this.http.post<AuditMetadata>(url, HTTP_OPTIONS);
+  }
+}
diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts
index 3d43d85..188b244 100644
--- a/src/environments/environment.prod.ts
+++ b/src/environments/environment.prod.ts
@@ -4,5 +4,6 @@ export const environment = {
   apiPlannerUrl: '/api/planner/v1',
   apiSearchUrl: '/api/search/v1',
   apiEnrollUrl: '/api/enroll/v1',
+  apiDarsUrl: '',
   snackbarDuration: 4000,
 };
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index 1c8984d..e1812ea 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -9,6 +9,7 @@ export const environment = {
   apiPlannerUrl: '/api/planner/v1',
   apiSearchUrl: '/api/search/v1',
   apiEnrollUrl: '/api/enroll/v1',
+  apiDarsUrl: 'https://gateway.test.api.wisc.edu/v1/dars',
   snackbarDuration: 4000,
   useNewDARSView: true,
 };
-- 
GitLab