chore: initial commit — monorepo ReadaBook (API NestJS, web PWA, Docker)

This commit is contained in:
Git Agent
2026-08-23 09:56:53 +02:00
commit 8f1140127f
79 changed files with 6456 additions and 0 deletions

View File

@ -0,0 +1,83 @@
import { Body, Controller, Delete, Get, Param, Patch, Post, UseGuards } from "@nestjs/common";
import {
CreateLibraryDto,
CreateLibrarySchema,
CreateUserDto,
CreateUserSchema,
UpdateLibraryDto,
UpdateLibrarySchema,
UpdateUserDto,
UpdateUserSchema
} from "@readabook/shared";
import { AuthGuard } from "../auth/auth.guard.js";
import { Roles } from "../auth/roles.decorator.js";
import { RolesGuard } from "../auth/roles.guard.js";
import { AuthService } from "../auth/auth.service.js";
import { ZodValidationPipe } from "../common/zod-validation.pipe.js";
import { JobsService } from "../jobs/jobs.service.js";
import { LibrariesService } from "../libraries/libraries.service.js";
import { ScannerService } from "../scanner/scanner.service.js";
@Controller("admin")
@UseGuards(AuthGuard, RolesGuard)
@Roles("admin")
export class AdminController {
constructor(
private readonly auth: AuthService,
private readonly libraries: LibrariesService,
private readonly jobs: JobsService,
private readonly scanner: ScannerService
) {}
@Get("users")
users() {
return this.auth.listUsers();
}
@Post("users")
createUser(@Body(new ZodValidationPipe(CreateUserSchema)) body: CreateUserDto) {
return this.auth.createUser(body);
}
@Patch("users/:id")
updateUser(@Param("id") id: string, @Body(new ZodValidationPipe(UpdateUserSchema)) body: UpdateUserDto) {
return this.auth.updateUser(Number(id), body);
}
@Delete("users/:id")
deleteUser(@Param("id") id: string) {
this.auth.deleteUser(Number(id));
return { ok: true };
}
@Get("libraries")
listLibraries() {
return this.libraries.list();
}
@Post("libraries")
createLibrary(@Body(new ZodValidationPipe(CreateLibrarySchema)) body: CreateLibraryDto) {
return this.libraries.create(body);
}
@Patch("libraries/:id")
updateLibrary(@Param("id") id: string, @Body(new ZodValidationPipe(UpdateLibrarySchema)) body: UpdateLibraryDto) {
return this.libraries.update(Number(id), body);
}
@Delete("libraries/:id")
deleteLibrary(@Param("id") id: string) {
this.libraries.delete(Number(id));
return { ok: true };
}
@Post("libraries/:id/scan")
scanLibrary(@Param("id") id: string) {
return this.scanner.enqueueLibraryScan(Number(id));
}
@Get("jobs")
listJobs() {
return this.jobs.list();
}
}