95 lines
2.3 KiB
TypeScript
95 lines
2.3 KiB
TypeScript
import { Body, Controller, Get, Post, Put, Request, Res, UseGuards } from '@nestjs/common';
|
|
import { Response } from 'express';
|
|
import { JwtAccessGuard } from 'src/auth/guards/jwt-access.guard';
|
|
import { BooksService } from './books.service';
|
|
import { BookSearchResultDto } from 'src/providers/dto/book-search-result.dto';
|
|
import { UpdateBookOriginDto } from './dto/update-book-origin.dto';
|
|
import { UpdateBookDto } from './dto/update-book.dto';
|
|
import { PinoLogger } from 'nestjs-pino';
|
|
import { QueryFailedError } from 'typeorm';
|
|
|
|
@UseGuards(JwtAccessGuard)
|
|
@Controller('books')
|
|
export class BooksController {
|
|
constructor(
|
|
private books: BooksService,
|
|
private logger: PinoLogger,
|
|
) { }
|
|
|
|
|
|
@Post('')
|
|
async CreateBook(
|
|
@Request() req,
|
|
@Body() body: BookSearchResultDto,
|
|
@Res({ passthrough: true }) response: Response,
|
|
) {
|
|
try {
|
|
return {
|
|
success: true,
|
|
data: await this.books.createBook(body),
|
|
};
|
|
} catch (err) {
|
|
if (err instanceof QueryFailedError) {
|
|
if (err.driverError.code == '23505') {
|
|
// Book exists already.
|
|
response.statusCode = 400;
|
|
return {
|
|
success: false,
|
|
error_message: 'The book has already been added previously.',
|
|
}
|
|
}
|
|
}
|
|
|
|
this.logger.error({
|
|
class: BooksController.name,
|
|
method: this.CreateBook.name,
|
|
user: req.user,
|
|
msg: 'Failed to create book.',
|
|
error: err,
|
|
});
|
|
|
|
response.statusCode = 500;
|
|
return {
|
|
success: false,
|
|
error_message: 'Something went wrong while adding the book.',
|
|
}
|
|
}
|
|
}
|
|
|
|
@Get('')
|
|
async GetBooksFromUser(
|
|
@Request() req,
|
|
) {
|
|
return {
|
|
success: true,
|
|
data: await this.books.findBookStatusesTrackedBy(req.user.userId),
|
|
};
|
|
}
|
|
|
|
@Put('')
|
|
async UpdateBook(
|
|
@Body() body: UpdateBookDto,
|
|
) {
|
|
const data = { ...body };
|
|
delete data['bookId'];
|
|
|
|
const result = await this.books.updateBook(body.bookId, data);
|
|
return {
|
|
success: result?.affected == 1,
|
|
};
|
|
}
|
|
|
|
@Put('origins')
|
|
async UpdateBookOrigin(
|
|
@Body() body: UpdateBookOriginDto,
|
|
) {
|
|
const data = { ...body };
|
|
delete data['bookOriginId'];
|
|
|
|
const result = await this.books.updateBookOrigin(body.bookOriginId, data);
|
|
return {
|
|
success: result?.affected == 1,
|
|
};
|
|
}
|
|
}
|