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; warStore = new Store(); 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})); } }