Skip to content
Snippets Groups Projects
backend.service.ts 3.9 KiB
Newer Older
  • Learn to ignore specific revisions
  • Martin Mechtel's avatar
    Martin Mechtel committed
    
    
    import { Injectable, Inject } from '@angular/core';
    
    paflov's avatar
    paflov committed
    import {HttpClient, HttpParams} from '@angular/common/http';
    
    import { Observable, of } from 'rxjs';
    
    import {catchError, map, switchMap} from 'rxjs/operators';
    import {LoginData, BookletStatus, PersonTokenAndTestId, KeyValuePair, SysConfig} from './app.interfaces';
    
    paflov's avatar
    paflov committed
    import {ErrorHandler, ServerError} from 'iqb-components';
    
    // ============================================================================
    
    @Injectable()
    export class BackendService {
    
      private serverSlimUrl = '';
    
    Martin Mechtel's avatar
    Martin Mechtel committed
      private serverSlimUrl_Close = '';
    
      private serverUrl2 = 'http://localhost/testcenter-iqb-php/'; // TODO (BEFORE-MERGE) REMOVE
    
    
      constructor(
    
        @Inject('SERVER_URL') private readonly serverUrl: string,
    
        private http: HttpClient) {
    
          this.serverSlimUrl = this.serverUrl + 'php_tc/login.php/';
    
          this.serverSlimAdminUrl = this.serverUrl + 'admin/php/login.php/';
    
    Martin Mechtel's avatar
    Martin Mechtel committed
          this.serverSlimUrl_Close = this.serverUrl + 'php_tc/tc_post.php/';
    
          this.serverUrl = this.serverUrl + 'php_start/';
        }
    
      login(name: string, password: string): Observable<LoginData | ServerError> {
    
        return this.http
    
            .post<LoginData>(this.serverUrl2 + '/login/group', {name, password})
    
              catchError(ErrorHandler.handle),
              switchMap(myLoginData => {
                if (myLoginData instanceof ServerError) {
    
    paflov's avatar
    paflov committed
                  if ((myLoginData as ServerError).code === 401) {
    
                      .post<LoginData>(this.serverUrl2 + '/login/admin', {n: name, p: password})
    
    paflov's avatar
    paflov committed
                    return of(myLoginData);
    
    paflov's avatar
    paflov committed
            );
    
      }
    
      // BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
    
    mechtelm's avatar
    mechtelm committed
      getLoginData(loginToken: string, personToken: string, bookletDbId: number): Observable<LoginData | ServerError> {
    
        return this.http
    
    mechtelm's avatar
    mechtelm committed
          .post<LoginData>(this.serverSlimUrl + 'login', {lt: loginToken, pt: personToken, b: bookletDbId})
    
              catchError(ErrorHandler.handle)
    
      getLoginDataAdmin(adminToken: string): Observable<LoginData | ServerError> {
        return this.http
          .post<LoginData>(this.serverSlimAdminUrl + 'login', {at: adminToken})
          .pipe(
            catchError(ErrorHandler.handle)
          );
      }
    
    
    Martin Mechtel's avatar
    Martin Mechtel committed
      getSysConfig(): Observable<KeyValuePair> {
    
    
        return this.http
          .get<SysConfig>(this.serverUrl2 + `system/config`)
          .pipe(catchError(() => of(null)))
          .pipe(map((sysConfig: SysConfig): KeyValuePair => {
            console.log(sysConfig.version); // check for system version missmatch https://github.com/iqb-berlin/testcenter-iqb-ng/issues/53
            return sysConfig.customTexts;
          }));
    
    paflov's avatar
    paflov committed
      getBookletState(bookletName: string, code = ''): Observable<BookletStatus | ServerError> {
    
        const params = new HttpParams().set('code', code);
    
        return this.http
          .get<BookletStatus>(this.serverUrl2 + `booklet/${bookletName}/state`, {params})
          .pipe(catchError(ErrorHandler.handle));
    
    paflov's avatar
    paflov committed
    
      startBooklet(code: string, bookletName: string, bookletLabel: string): Observable<PersonTokenAndTestId | ServerError> {
    
    
        return this.http
    
    paflov's avatar
    paflov committed
          .put<PersonTokenAndTestId>(this.serverUrl2 + `test`, {code, bookletName, bookletLabel})
    
    paflov's avatar
    paflov committed
          .pipe(catchError(ErrorHandler.handle));
    
    paflov's avatar
    paflov committed
    
      addBookletLogClose(testId: number): Observable<boolean | ServerError> {
    
    
        return this.http
    
    paflov's avatar
    paflov committed
          .put<boolean>(this.serverUrl2 + `test/${testId}/log`, {timestamp: Date.now(), entry: 'BOOKLETLOCKEDbyTESTEE'})
          .pipe(catchError(ErrorHandler.handle));
    
    Martin Mechtel's avatar
    Martin Mechtel committed
      }
    
    
    
      lockBooklet(testId: number): Observable<boolean | ServerError> {
    
    
    Martin Mechtel's avatar
    Martin Mechtel committed
        return this.http
    
          .post<boolean>(this.serverUrl2 + `test/${testId}/lock`, {})
          .pipe(catchError(ErrorHandler.handle));
    
    Martin Mechtel's avatar
    Martin Mechtel committed
      }