All files / games/mc/src/services encounters.ts

100% Statements 18/18
100% Branches 4/4
100% Functions 9/9
100% Lines 18/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 5613x 13x 13x   13x   4x   4x 6x                         4x         3x 3x 3x         1x               1x 1x       4x 3x   1x 1x        
import { ApiResponse, ApiResponseStatus } from "jga-apis-response";
import { Service } from "./service";
import { Encounter, EncounterInterface } from "../@models";
 
export class EncountersService extends Service {
    public loadJson(data: EncounterInterface[]): Encounter[] {
        const encounters: Encounter[] = [];
 
        data.forEach((encounter) => {
            encounters.push(
                new Encounter({
                    id: encounter.id,
                    scenario: encounter.scenario,
                    modularSets: encounter.modularSets,
                    heroes: encounter.heroes,
                    difficulty: encounter.difficulty,
                    result: encounter.result,
                    date: null != encounter.date ? new Date(encounter.date) : undefined,
                }),
            );
        });
 
        return encounters;
    }
 
    public load(): Promise<Encounter[]> {
        // eslint-disable-next-line compat/compat
        return fetch(`${this.apiEndpoint}/encounters?sort=DESC`)
            .then((response) => response.json())
            .then((result: ApiResponse<string, Encounter[]>) => this.extractResponse(result));
    }
 
    public async save(encounter: Partial<Encounter>): Promise<Encounter[]> {
        // eslint-disable-next-line compat/compat
        return fetch(`${this.apiEndpoint}/encounters`, {
            method: "POST",
            mode: "cors",
            headers: {
                "Content-Type": "application/json",
            },
            body: JSON.stringify(encounter),
        })
            .then((response) => response.json())
            .then((result: ApiResponse<string, Encounter[]>) => this.extractResponse(result));
    }
 
    protected extractResponse(result: ApiResponse<string, Encounter[]>): Encounter[] {
        if (ApiResponseStatus.SUCCESS === result.status) {
            return this.loadJson(result.data);
        } else {
            console.error(result.error);
            return [];
        }
    }
}