costco-grocery-list/backend/controllers/lists.controller.js
2026-01-02 13:55:54 -08:00

66 lines
1.8 KiB
JavaScript

const List = require("../models/list.model");
exports.getList = async (req, res) => {
const items = await List.getUnboughtItems();
res.json(items);
};
exports.getItemByName = async (req, res) => {
const { itemName } = req.query;
const item = await List.getItemByName(itemName);
res.json(item);
}
exports.addItem = async (req, res) => {
const { itemName, quantity } = req.body;
const userId = req.user.id;
// Get processed image if uploaded
const imageBuffer = req.processedImage?.buffer || null;
const mimeType = req.processedImage?.mimeType || null;
const id = await List.addOrUpdateItem(itemName, quantity, userId, imageBuffer, mimeType);
await List.addHistoryRecord(id, quantity, userId);
res.json({ message: "Item added/updated", addedBy: userId });
};
exports.markBought = async (req, res) => {
const userId = req.user.id;
await List.setBought(req.body.id, userId);
res.json({ message: "Item marked bought" });
};
exports.getSuggestions = async (req, res) => {
const { query } = req.query || "";
const suggestions = await List.getSuggestions(query);
res.json(suggestions);
};
exports.getRecentlyBought = async (req, res) => {
const items = await List.getRecentlyBoughtItems();
res.json(items);
};
exports.updateItemImage = async (req, res) => {
const { id, itemName, quantity } = req.body;
const userId = req.user.id;
// Get processed image
const imageBuffer = req.processedImage?.buffer || null;
const mimeType = req.processedImage?.mimeType || null;
if (!imageBuffer) {
return res.status(400).json({ message: "No image provided" });
}
// Update the item with new image
await List.addOrUpdateItem(itemName, quantity, userId, imageBuffer, mimeType);
res.json({ message: "Image updated successfully" });
};