Use new get method from A1 API for AC policy
[portal/ric-dashboard.git] / webapp-frontend / src / app / services / ac-xapp / ac-xapp.service.ts
index 740fcbc..47b5440 100644 (file)
  import { Injectable } from '@angular/core';
  import { HttpClient } from '@angular/common/http';
  import { Observable } from 'rxjs';
+ import { map } from 'rxjs/operators';
 import { ACAdmissionIntervalControl, ACAdmissionIntervalControlAck } from '../../interfaces/ac-xapp.types';
 import { DashboardSuccessTransport } from '../../interfaces/dashboard.types';
 
+/**
+ * Services for calling the Dashboard's A1 endpoints to get/put AC policies.
+ */
 @Injectable({
   providedIn: 'root'
 })
-export class AcXappService {
+export class ACXappService {
+
+  private basePath = 'api/a1-p';
+  private policyPath = 'policies';
+  private acPolicyName = 'admission_control_policy';
 
-  private basePath = 'api/xapp/ac/';
+  private buildPath(...args: any[]) {
+    let result = this.basePath;
+    args.forEach(part => {
+      result = result + '/' + part;
+    });
+    return result;
+  }
 
   constructor(private httpClient: HttpClient) {
     // injects to variable httpClient
   }
 
   /**
-   * Gets A1 Mediator client version details
-   * @returns Observable that should yield a SuccessTransport object
+   * Gets version details
+   * @returns Observable that should yield a String
+   */
+  getVersion(): Observable<string> {
+    const url = this.buildPath('version');
+    return this.httpClient.get<DashboardSuccessTransport>(url).pipe(
+      // Extract the string here
+      map(res => res['data'])
+    );
+  }
+
+  /**
+   * Gets admission control policy.
+   * @returns Observable that should yield an ACAdmissionIntervalControl
    */
-  getVersion() {
-    // Remember that AC traffic goes via A1!
-    return this.httpClient.get<DashboardSuccessTransport>(this.basePath + 'version');
+  getPolicy(): Observable<ACAdmissionIntervalControl> {
+    const url = this.buildPath(this.policyPath, this.acPolicyName);
+    return this.httpClient.get<ACAdmissionIntervalControl>(url);
   }
 
   /**
-   * Puts control admission time parameters to AC via A1
+   * Puts admission control policy.
    * @param policy an instance of ACAdmissionIntervalControl
-   * @returns Observable that should yield an ACAdmissionIntervalControlAck
+   * @returns Observable that should yield a response code, no data
    */
-  putCaTime(policy: ACAdmissionIntervalControl): Observable<ACAdmissionIntervalControlAck> {
-    return this.httpClient.put<ACAdmissionIntervalControlAck>(this.basePath + 'catime', policy);
+  putPolicy(policy: ACAdmissionIntervalControl): Observable<any> {
+    const url = this.buildPath(this.policyPath, this.acPolicyName);
+    return this.httpClient.put<ACAdmissionIntervalControlAck>(url, policy, { observe: 'response' });
   }
 
 }