119 lines
3.1 KiB
TypeScript
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;
|
|
}
|
|
}
|