import { Controller, Get, Header, Inject, Param, Res } from '@nestjs/common'; import { GalerieService } from './galerie.service'; import sharp from 'sharp'; import path from 'path'; import { Args, Field, ObjectType, Query, Resolver } from '@nestjs/graphql'; import { JahrMitBild } from 'src/dto/galerie.dto'; @Controller('/api/galerie') export class GalerieController { constructor( @Inject() private readonly galerieService: GalerieService, ) {} @Get('/bilder/:event/:jahr') async getBilder( @Param('event') event: string, @Param('jahr') jahr: number, ): Promise { return this.galerieService.getBilder(event, jahr); } @Get('/jahre/:event') async getJahre(@Param('event') event: string): Promise { return this.galerieService.getJahre(event); } @Get('/bild/:event/:jahr/:bild') @Header('Content-Type', 'image/png') async getBild( @Param('event') event: string, @Param('jahr') jahr: number, @Param('bild') bild: string, ): Promise { const filePath = '/bilder/' + path.basename(event) + '/' + path.basename(jahr.toString()) + '/' + path.basename(bild); return sharp(filePath).png().toBuffer(); } @Get('/randomimage/:event') @Header('Content-Type', 'image/png') async getRandomImageOhneJahr( @Param('event') event: string, ): Promise { const jahr=await this.galerieService.getRandomYear(event) const filePath = '/bilder/' + path.basename(event) + '/' + jahr+ '/' + await this.galerieService.getRandomImage(event,jahr) return sharp(filePath).png().toBuffer(); } @Get('/randomimage/:event/:jahr') @Header('Content-Type', 'image/png') async getRandomImage( @Param('event') event: string, @Param('jahr') jahr: number, ): Promise { const filePath = '/bilder/' + path.basename(event) + '/' + path.basename(jahr.toString()) + '/' + await this.galerieService.getRandomImage(event,jahr) return sharp(filePath).png().toBuffer(); } } @Resolver() export class GalerieResolver { constructor(private readonly galerieService: GalerieService) {} @Query(() => [String]) async getBilder( @Args('event', { type: () => String }) event: string, @Args('jahr', { type: () => Number }) jahr: number, ): Promise { return this.galerieService.getBilder(event, jahr); } @Query(() => [JahrMitBildEntity]) async bilder( @Args('event', { type: () => String }) event: string, @Args('jahr', { type: () => Number, nullable: true }) jahr: number, ): Promise { if(jahr==null) return this.galerieService.getJahre(event); return (await this.galerieService.getJahre(event)) .filter(jahrmitbild=>jahrmitbild.jahr==jahr); } } @ObjectType() export class JahrMitBildEntity implements JahrMitBild { @Field(() => Number) jahr: number; @Field(() => [String]) bild: string[]; constructor(jahr: number, bild: string[]) { this.jahr = jahr; this.bild = bild; } }