Я написал фрагмент кода для создания контроллера. Как видите, код запутан, и я хотел бы сделать его чище, используя классы Es6.
Вот фрагмент кода контроллера:
const createRental = async (req, res) => {
const customer = await Customer.findById(req.body.customerId);
if (!customer)
return res
.status(StatusCodes.BAD_REQUEST)
.json({ message: "Customer doesn't exist!" });
const movie = await Movie.findById(req.body.movieId);
if (!movie)
return res
.status(StatusCodes.BAD_REQUEST)
.json({ message: "Movie doesn't exists!" });
if (movie.numberInStock === 0)
return res
.status(StatusCodes.NOT_FOUND)
.json({ message: "Film is niet op voorraad!" });
const rental = await new Rental({
customer: {
_id: customer._id,
name: customer.name,
phone: customer.phone,
},
movie: {
_id: movie._id,
title: movie.title,
dailyRentalRate: movie.dailyRentalRate,
},
});
try {
new Fawn.Task()
.save("rentals", rental)
.update("movies", { _id: movie._id }, { $inc: { numberInStock: -1 } })
.run();
} catch (ex) {
res
.status(StatusCodes.INTERNAL_SERVER_ERROR)
.json({ message: "Something failed!" });
}
res.status(StatusCodes.OK).json({ rental });
};
Хотели бы иметь классы клиентов, фильмы, прокат, где классы получают req в качестве параметра, где я могу использовать эти классы в createRental функция контроллера и класс, который расширяет Fawn для выполнения операции транзакции. Что касается модели, я использовал mongoose в качестве библиотеки моделирования объектных данных (ODM).
Как я могу достичь своей цели?