opt-cc/static/src/app/services/logs/war.service.ts

61 lines
1.8 KiB
TypeScript

import {Injectable} from '@angular/core';
import {War} from '../../models/model-interfaces';
import {AppConfig} from '../../app.config';
import {ADD, EDIT, LOAD, REMOVE, Store} from '../stores/generic-store';
import {Observable} from 'rxjs';
import {HttpGateway} from '../http-gateway';
@Injectable()
export class WarService {
wars$: Observable<War[]>;
warStore = new Store<War>();
constructor(private httpGateway: HttpGateway,
private config: AppConfig) {
this.wars$ = this.warStore.items$;
}
getAllWars(campaignId?: string): Observable<War[]> {
let targetUrl = this.config.apiWarPath;
if (campaignId) {
targetUrl += `?campaignId=${campaignId}`
}
return this.httpGateway.get<War[]>(targetUrl)
.do((wars) => this.warStore.dispatch({type: LOAD, data: wars}));
}
getWar(warId: string): Observable<War> {
return this.httpGateway.get<War>(this.config.apiWarPath + '/' + warId);
}
submitWar(war: War, logFile?) {
let body;
if (logFile) {
body = new FormData();
Object.keys(war).map((objectKey) => {
if (war[objectKey] !== undefined) {
body.append(objectKey, war[objectKey]);
}
});
body.append('log', logFile, logFile.name);
}
return this.httpGateway.post<War>(this.config.apiWarPath, body)
.do((newWar) => this.warStore.dispatch({type: ADD, data: newWar}));
}
updateWar(war: War) {
return this.httpGateway.patch<War>(this.config.apiWarPath + '/' + war._id, war)
.do((updatedWar) => this.warStore.dispatch({type: EDIT, data: updatedWar}));
}
deleteWar(war: War) {
return this.httpGateway.delete(this.config.apiWarPath + '/' + war._id)
.do((emptyRes) => this.warStore.dispatch({type: REMOVE, data: war}));
}
}