C. Membuat Base Response
Untuk membuat penulisan response menjadi sederhana saat return dalam service, kita akan membuat class Base Response pada folder utils
seperti gambar di bawah.
utils/response/base.response.ts
import { ResponseSuccess, ResponsePagination } from "src/interface/response";
class BaseResponse {
_success(message: string, data?: any): ResponseSuccess {
return {
status: "Success",
message: message,
data: data || {},
};
}
_pagination(
message: string,
data: any,
totalData: number,
page: number,
pageSize: number
): ResponsePagination {
return {
status: "Success",
message: message,
data: data,
pagination: {
total: totalData,
page: page,
pageSize: pageSize,
},
};
}
}
export default BaseResponse;
Kemudian class tersebut kita extends
pada book.service.ts
book.service.ts
import {
HttpException,
HttpStatus,
Injectable,
NotFoundException,
} from '@nestjs/common';
import { ResponsePagination, ResponseSuccess } from 'src/interface/response';
import { CreateBookDto, FindBookDto, UpdateBookDto } from './book.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { Book } from './book.entity';
import { Between, Like, Repository } from 'typeorm';
import BaseResponse from 'src/utils/response/base.response'; //import class Base Response
@Injectable()
export class BookService extends BaseResponse { //extend class BaseResponse
constructor(
@InjectRepository(Book) private readonly bookRepository: Repository<Book>,
) {
super(); // karena BookService menjadi sub class dari BaseResponse maka harus diberkan super()
}
...
}
Setelah kita extends BaseResponse
, selanjutkan kita impelementasikan pada return setiap method service di book.service.ts
book.service.ts
async getAllBooks(query: FindBookDto): Promise<ResponsePagination> {
const { page, pageSize, limit, title, author, from_year, to_year } = query;
console.log('q', query);
const total = await this.bookRepository.count();
const filter: {
[key: string]: any;
} = {};
if (title) {
filter.title = Like(`%${title}%`);
}
if (author) {
filter.author = Like(`%${author}%`);
}
if (from_year && to_year) {
filter.year = Between(from_year, to_year);
}
if (from_year && !!to_year === false) {
filter.year = Between(from_year, from_year);
}
const result = await this.bookRepository.find({
where: filter,
skip: limit,
take: pageSize,
});
return this._pagination('OK', result, total, page, pageSize); // implementasi method _pagination disini
}
async createBook(createBookDto: CreateBookDto): Promise<ResponseSuccess> {
const { title, author, year } = createBookDto;
try {
await this.bookRepository.save({
title: title,
author: author,
year: year,
});
return this._success('OK'); // implementasi method _success disini
} catch (err) {
throw new HttpException('Ada Kesalahan', HttpStatus.BAD_REQUEST);
}
}
Pengujian pada Postman create
Pengujian pada Postman get all dengan filter
Selanjutkan silahkan implementasikan pada method-method lain pada book.service.ts