chore: initial commit — monorepo ReadaBook (API NestJS, web PWA, Docker)
This commit is contained in:
83
apps/api/src/admin/admin.controller.ts
Normal file
83
apps/api/src/admin/admin.controller.ts
Normal 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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user