costco-grocery-list/backend/constants/classifications.js
2026-01-02 14:27:39 -08:00

134 lines
2.2 KiB
JavaScript

// Backend classification constants (mirror of frontend)
const ITEM_TYPES = {
PRODUCE: "produce",
MEAT: "meat",
DAIRY: "dairy",
BAKERY: "bakery",
FROZEN: "frozen",
PANTRY: "pantry",
BEVERAGE: "beverage",
SNACK: "snack",
HOUSEHOLD: "household",
PERSONAL_CARE: "personal_care",
OTHER: "other",
};
const ITEM_GROUPS = {
[ITEM_TYPES.PRODUCE]: [
"Fruits",
"Vegetables",
"Salad Mix",
"Herbs",
"Organic Produce",
],
[ITEM_TYPES.MEAT]: [
"Beef",
"Pork",
"Chicken",
"Seafood",
"Deli Meat",
"Prepared Meat",
],
[ITEM_TYPES.DAIRY]: [
"Milk",
"Cheese",
"Yogurt",
"Butter",
"Eggs",
"Cream",
],
[ITEM_TYPES.BAKERY]: [
"Bread",
"Rolls",
"Pastries",
"Cakes",
"Bagels",
"Tortillas",
],
[ITEM_TYPES.FROZEN]: [
"Frozen Meals",
"Ice Cream",
"Frozen Vegetables",
"Frozen Meat",
"Pizza",
"Desserts",
],
[ITEM_TYPES.PANTRY]: [
"Canned Goods",
"Pasta",
"Rice",
"Cereal",
"Condiments",
"Spices",
"Baking",
"Oils",
],
[ITEM_TYPES.BEVERAGE]: [
"Water",
"Soda",
"Juice",
"Coffee",
"Tea",
"Alcohol",
"Sports Drinks",
],
[ITEM_TYPES.SNACK]: [
"Chips",
"Crackers",
"Nuts",
"Candy",
"Cookies",
"Protein Bars",
],
[ITEM_TYPES.HOUSEHOLD]: [
"Cleaning Supplies",
"Paper Products",
"Laundry",
"Kitchen Items",
"Storage",
],
[ITEM_TYPES.PERSONAL_CARE]: [
"Bath & Body",
"Hair Care",
"Oral Care",
"Skincare",
"Health",
],
[ITEM_TYPES.OTHER]: [
"Miscellaneous",
],
};
const ZONES = [
"Front Entry",
"Fresh Foods Right",
"Fresh Foods Left",
"Center Aisles",
"Bakery",
"Meat Department",
"Dairy Cooler",
"Freezer Section",
"Back Wall",
"Checkout Area",
];
// Validation helpers
const isValidItemType = (type) => Object.values(ITEM_TYPES).includes(type);
const isValidItemGroup = (type, group) => {
if (!isValidItemType(type)) return false;
return ITEM_GROUPS[type]?.includes(group) || false;
};
const isValidZone = (zone) => ZONES.includes(zone);
module.exports = {
ITEM_TYPES,
ITEM_GROUPS,
ZONES,
isValidItemType,
isValidItemGroup,
isValidZone,
};