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

65 lines
1.8 KiB
TypeScript

import {Injectable} from '@angular/core';
import {War} from '../../models/model-interfaces';
import {AppConfig} from '../../app.config';
import {HttpClient} from '../http-client';
import {ADD, EDIT, LOAD, REMOVE, Store} from '../stores/generic-store';
import {Observable} from 'rxjs';
@Injectable()
export class WarService {
wars$: Observable<War[]>;
warStore = new Store<War>();
constructor(private http: HttpClient,
private config: AppConfig) {
this.wars$ = this.warStore.items$;
}
getAllWars(campaignId?: string) {
let targetUrl = this.config.apiWarPath;
if (campaignId) {
targetUrl += `?campaignId=${campaignId}`
}
return this.http.get(targetUrl)
.map(res => res.json())
.do((wars) => this.warStore.dispatch({type: LOAD, data: wars}));
}
getWar(warId: string) {
return this.http.get(this.config.apiWarPath + '/' + warId)
.map(res => res.json());
}
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.http.post(this.config.apiWarPath, body)
.map(res => res.json())
.do((newWar) => this.warStore.dispatch({type: ADD, data: newWar}));
}
updateWar(war: War) {
return this.http.patch(this.config.apiWarPath + '/' + war._id, war)
.map(res => res.json())
.do((updatedWar) => this.warStore.dispatch({type: EDIT, data: updatedWar}));
}
deleteWar(war: War) {
return this.http.delete(this.config.apiWarPath + '/' + war._id)
.do((emptyRes) => this.warStore.dispatch({type: REMOVE, data: war}));
}
}