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

90.47% Statements 19/21
83.33% Branches 5/6
100% Functions 9/9
90.47% Lines 19/21

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 56 57 58 59 60 61 62 6313x 13x 13x   13x   3x   3x 4x                         3x         3x 3x 3x         1x               1x   1x 1x                 3x 2x   1x 1x        
import { ApiResponse, ApiResponseStatus } from "../@apis";
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<null | 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>) => {
                if (ApiResponseStatus.SUCCESS === result.status) {
                    return result.data;
                } else E{
                    console.error(result.error);
                    return null;
                }
            });
    }
 
    protected extractResponse(result: ApiResponse<string, Encounter[]>): Encounter[] {
        if (ApiResponseStatus.SUCCESS === result.status) {
            return this.loadJson(result.data);
        } else {
            console.error(result.error);
            return [];
        }
    }
}