Files
planetposen-backend/src/webserver/controllers/productController.ts

238 lines
5.9 KiB
TypeScript

import logger from "../../logger";
import ProductRepository from "../../product";
const productRepository = new ProductRepository();
import type { Request, Response } from "express";
async function add(req: Request, res: Response) {
logger.info("Adding new product");
try {
const productId = await productRepository.add();
const product = await productRepository.get(productId);
logger.info("New product", { product });
return res.send({
success: true,
product,
});
} catch (error) {
logger.error("Error while adding product", { error });
res.statusCode = error.statusCode || 500;
return res.send({
success: false,
message: error?.message || "Unexpected error while adding product",
});
}
}
function update(req: Request, res: Response) {
const { product_id } = req.params;
logger.info("Updating product", { product_id });
return productRepository
.get(product_id)
.then((product) => {
logger.info("Updated product", { product, product_id });
res.send({
success: true,
product: product,
});
})
.catch((error) => {
logger.error("Error while updating product", { error, product_id });
res.statusCode = error.statusCode || 500;
return res.send({
success: false,
message: error?.message || "Unexpected error while updating product",
});
});
}
function getAll(req: Request, res: Response) {
logger.info("Getting all products");
return productRepository
.getAllProducts()
.then((products) => {
logger.info("Found products", { products });
res.send({
success: true,
products: products,
});
})
.catch((error) => {
logger.error("Error while getting all products", { error });
res.statusCode = error.statusCode || 500;
res.send({
success: false,
message:
error?.message || "Unexpected error while getting all products",
});
});
}
function getById(req: Request, res: Response) {
const { product_id } = req.params;
logger.info("Getting product", { product_id });
return productRepository
.get(product_id)
.then((product) => {
logger.info("Found product", { product, product_id });
res.send({
success: true,
product: product,
});
})
.catch((error) => {
logger.error("Error while getting product by id", { product_id });
res.statusCode = error.statusCode || 500;
res.send({
success: false,
message:
error?.message || "Unexpected error while getting product by id",
});
});
}
async function addSku(req: Request, res: Response) {
const { product_id } = req.params;
logger.info("Adding new sku", { product_id });
try {
await productRepository.addSku(product_id);
const skus = await productRepository.getSkus(product_id);
if (!skus.find((sku) => sku.default_price === true)) {
await productRepository.setSkuDefaultPrice(
product_id,
skus[skus.length - 1].sku_id
);
skus[skus.length - 1].default_price = true;
}
logger.info("New skus after add", { skus, product_id });
res.send({
success: true,
skus,
});
} catch (error) {
logger.error("Error adding sku", { error, product_id });
res.statusCode = error?.statusCode || 500;
res.send({
success: false,
message: error?.message || "Unexpected error while adding new sku",
});
}
}
async function getSkus(req: Request, res: Response) {
const { product_id } = req.params;
const skus = await productRepository.getSkus(product_id);
return res.send({
success: true,
skus,
});
}
async function updateSku(req: Request, res: Response) {
const { product_id, sku_id } = req.params;
const { stock, size, price } = req.body;
logger.info("Updating sku", { product_id, sku_id, stock, price, size });
try {
await productRepository.updateSku(product_id, sku_id, stock, size, price);
const skus = await productRepository.getSkus(product_id);
logger.info("New skus after update", { skus, product_id, sku_id });
res.send({
success: true,
skus,
});
} catch (error) {
logger.error("Error updating sku", { product_id, sku_id, error });
res.statusCode = error?.statusCode || 500;
res.send({
success: false,
message: error?.message || "Unexpected error while updating sku",
});
}
}
async function deleteSku(req: Request, res: Response) {
const { product_id, sku_id } = req.params;
try {
await productRepository.deleteSku(product_id, sku_id);
const skus = await productRepository.getSkus(product_id);
logger.info("New skus after delete", { skus, product_id, sku_id });
res.send({
success: true,
skus,
});
} catch (error) {
logger.error("Error deleting sku", { product_id, sku_id, error });
res.statusCode = error?.statusCode || 500;
res.send({
success: false,
message: error?.message || "Unexpected error while deleting sku",
});
}
}
async function setSkuDefaultPrice(req: Request, res: Response) {
const { product_id, sku_id } = req.params;
logger.info("Updating sku default price", { product_id, sku_id });
try {
await productRepository.setSkuDefaultPrice(product_id, sku_id);
const skus = await productRepository.getSkus(product_id);
logger.info("New skus after update default price", {
skus,
product_id,
sku_id,
});
res.send({
success: true,
skus,
});
} catch (error) {
logger.error("Error while updating sku default price", {
product_id,
sku_id,
error,
});
res.statusCode = error?.statusCode || 500;
res.send({
success: false,
message:
error?.message ||
"Unexpected error while updating default price for sku",
});
}
}
export default {
add,
update,
getAll,
getById,
addSku,
getSkus,
updateSku,
deleteSku,
setSkuDefaultPrice,
};