All files / projects-dev/apps/mc-api/src app.controller.ts

0% Statements 0/89
0% Branches 0/1
0% Functions 0/1
0% Lines 0/89

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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90                                                                                                                                                                                   
import {
    Body,
    CacheTTL,
    Controller,
    DefaultValuePipe,
    Get,
    Header,
    ParseBoolPipe,
    Post,
    Query,
    UseInterceptors,
    Version,
} from "@nestjs/common";
// eslint-disable-next-line import/extensions
import { CacheInterceptor } from "@nestjs/cache-manager";
import { ApiResponse } from "@jga/apis";
import { Deck, Encounter, EncounterInterface, Hero, Pack, ModularSet, Scenario } from "./models";
import { DecksService } from "./modules/decks/decks.service";
import { EncountersService } from "./modules/encounters/encounters.service";
import { HeroesService } from "./modules/heroes/heroes.service";
import { ModularSetsService } from "./modules/modular-sets/modular-sets.service";
import { PacksService } from "./modules/packs/packs.service";
import { ScenariosService } from "./modules/scenarios/scenarios.service";

import * as package_ from "../package.json";

@Controller({
    version: "0",
})
@UseInterceptors(CacheInterceptor)
export class AppController {
    // eslint-disable-next-line max-params
    constructor(
        private readonly decksService: DecksService,
        private readonly encountersService: EncountersService,
        private readonly heroesService: HeroesService,
        private readonly modularsSetsService: ModularSetsService,
        private readonly packsService: PacksService,
        private readonly scenariosService: ScenariosService,
    ) {}

    @Version("0")
    @Get("decks")
    @CacheTTL(5)
    getDecks(): Promise<ApiResponse<string, Deck[]>> {
        return this.decksService.getDecks();
    }

    @Version("0")
    @Get("packs")
    getPacks(
        @Query("owned", new DefaultValuePipe(true), ParseBoolPipe) owned: boolean,
        @Query("unreleased", new DefaultValuePipe(false), ParseBoolPipe) unreleased: boolean,
    ): Promise<ApiResponse<string, Pack[]>> {
        return this.packsService.getPacks({ owned, unreleased });
    }

    @Version("0")
    @Get("heroes")
    @Header("Accept", `application/vnd.mc-api.jerome-gabriel.me+json;version=${package_.version}`)
    getHeroes(@Query("name") name: string): Promise<ApiResponse<string, Hero[]>> {
        return this.heroesService.getHeroes(name);
    }

    @Version("0")
    @Get("scenarios")
    getScenarios(@Query("name") name: string): Promise<ApiResponse<string, Scenario[]>> {
        return this.scenariosService.getScenarios(name);
    }

    @Version("0")
    @Get("encounters")
    @CacheTTL(5)
    getEncounters(@Query("sort") sort: "ASC" | "DESC"): Promise<ApiResponse<string, Encounter[]>> {
        return this.encountersService.getEncounters(sort);
    }

    @Version("0")
    @Get("modularsets")
    getModularSets(@Query("name") name: string): Promise<ApiResponse<string, ModularSet[]>> {
        return this.modularsSetsService.getModularSets(name);
    }

    @Version("0")
    @Post("encounters")
    create(@Body() encounter: Partial<EncounterInterface>): Promise<ApiResponse<string, Encounter>> {
        return this.encountersService.createEncounter(encounter);
    }
}