Files
ritzenbergen-backend/src/galerie/galerie.controller.ts
2026-05-06 14:49:03 +02:00

119 lines
3.1 KiB
TypeScript

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<string[]> {
return this.galerieService.getBilder(event, jahr);
}
@Get('/jahre/:event')
async getJahre(@Param('event') event: string): Promise<JahrMitBild[]> {
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<Buffer> {
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<Buffer> {
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<Buffer> {
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<string[]> {
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<JahrMitBildEntity[]> {
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;
}
}