This is the codeAbility Sharing Platform! Learn more about the codeAbility Sharing Platform.

Skip to content
Snippets Groups Projects
exercise.service.ts 1.64 KiB
Newer Older
Michael Breu's avatar
Michael Breu committed
import { Injectable } from '@angular/core';
import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';
Michael Breu's avatar
Michael Breu committed
import { Observable } from 'rxjs';

import { SERVER_API_URL } from 'app/app.constants';
import { ArtemisExerciseInfo } from 'app/shared/model/artemis-exercise-info.model';
Michael Breu's avatar
Michael Breu committed

@Injectable({ providedIn: 'root' })
export class ExerciseService {
  public resourceUrl = SERVER_API_URL + 'api/exercise/';
Michael Breu's avatar
Michael Breu committed

  constructor(private http: HttpClient) {}
Michael Breu's avatar
Michael Breu committed

  public loadExerciseFile(exerciseId: string, filePath: string): Observable<string> {
    const headers = new HttpHeaders(); // .set('Content-Type', 'text/plain; charset=utf-8');
    const options: HttpParams = new HttpParams();
    options.append('filePath', filePath);
Michael Breu's avatar
Michael Breu committed

    return this.http.get<string>(this.resourceUrl + exerciseId, {
      headers,
      params: new HttpParams().set('filePath', filePath),
      responseType: 'text' as 'json',
    });
  }

  /**
   * Used on init of import page, this function passes the retrieved (from Artemis)
   * exerciseUrl to the server
   * @param exerciseUrl
   */
  public importExerciseInfoFromArtemis(exerciseToken: string): Observable<ArtemisExerciseInfo> {
    return this.http.get<ArtemisExerciseInfo>(`${this.resourceUrl}imported-exercise-info/${exerciseToken}`);
  }

  /**
   * Submits an ArtemisExerciseInfo object to server and triggers its import
   * @param exerciseInfo to submit and import
   */
  public submitExerciseInfoForImport(exerciseInfo: ArtemisExerciseInfo, exerciseToken: string, gitlabGroupId: number) {
    return this.http.post<ArtemisExerciseInfo>(`${this.resourceUrl}import-exercise/${exerciseToken}/${gitlabGroupId}`, exerciseInfo);
Michael Breu's avatar
Michael Breu committed
}