@practica/create-node-app
Version:
Create Node.js app that is packed with best practices AND strive for simplicity
44 lines (36 loc) • 1.55 kB
text/typescript
import { logger } from '@practica/logger';
import { getCountryModel } from './models/country-model';
import { getOrderModel } from './models/order-model';
// ️️️✅ Best Practice: The repository pattern - This is a plain JS object (POJO) that is returned to the domain layer
// This way, the domain/business-logic can focus on its business and avoid delving into DB/ORM narratives
type OrderRecord = {
id: number;
userId: number;
productId: number;
countryId: number;
paymentTermsInDays: number;
deliveryAddress: string;
};
// ️️️✅ Best Practice: The repository pattern - Wrap the entire DB layer with a simple interface that returns plain JS objects
export async function getOrderById(id: number): Promise<OrderRecord | null> {
logger.info(`Getting order by id ${id}`);
const foundOrder = await getOrderModel().findOne({
where: { id },
include: getCountryModel(),
// ✅ Best Practice: The data access layer should return a plain JS object and avoid leaking DB narratives outside
// The 'Raw' option below instructs to include only pure data within the response
raw: true,
nest: false,
});
return foundOrder;
}
export async function addOrder(orderDetails: Omit<OrderRecord, 'id'>) {
const addingResponse = await getOrderModel().create(orderDetails);
return addingResponse;
}
export async function deleteOrder(orderIdToDelete: number) {
await getOrderModel().destroy({ where: { id: orderIdToDelete } });
}
export async function cleanupData() {
await getOrderModel().truncate();
}