JewelryMall/server/src/routes/admin.ts
2026-03-28 18:30:52 +08:00

112 lines
4.0 KiB
TypeScript

import { Router } from 'express'
import multer from 'multer'
import { upload, uploadFile } from '../controllers/upload'
import { adminLogin, verifyAdmin } from '../controllers/adminAuth'
import {
adminGetProducts,
adminGetProductDetail,
adminCreateProduct,
adminUpdateProduct,
adminDeleteProduct,
} from '../controllers/adminProduct'
import { exportSpecData, importSpecData, adminGetSpecData, adminCreateSpecData, adminDeleteSpecData, adminUpdateSpecData, lookupByBarcodes } from '../controllers/specDataIO'
import { getStockAlerts } from '../controllers/stockAlert'
import {
adminGetOrders,
adminGetOrderDetail,
adminCreateOrder,
adminUpdateOrder,
adminUpdateOrderStatus,
adminReturnOrder,
adminGetOrderReturns,
} from '../controllers/adminOrder'
import {
adminGetMolds,
adminCreateMold,
adminUpdateMold,
adminDeleteMold,
} from '../controllers/adminMold'
import {
adminGetCategories,
adminCreateCategory,
adminDeleteCategory,
adminGetCategoryFilters,
adminSaveCategoryFilters,
} from '../controllers/adminCategory'
import { adminGetConfigs, adminUpdateConfig } from '../controllers/config'
import { adminGetUsers } from '../controllers/adminUser'
import { getGoldPriceLogs, getLatestGoldPrice, setGoldPrice, getPlatinumPriceLogs, getLatestPlatinumPrice, setPlatinumPrice } from '../controllers/goldPrice'
const csvUpload = multer({ storage: multer.memoryStorage() })
export const adminRoutes = Router()
// Admin login (no auth required)
adminRoutes.post('/login', adminLogin)
// All routes below require admin auth
adminRoutes.use(verifyAdmin)
// File upload
adminRoutes.post('/upload', upload.single('file'), uploadFile)
// Product CRUD
adminRoutes.get('/products', adminGetProducts)
adminRoutes.get('/products/:id', adminGetProductDetail)
adminRoutes.post('/products', adminCreateProduct)
adminRoutes.put('/products/:id', adminUpdateProduct)
adminRoutes.delete('/products/:id', adminDeleteProduct)
// Spec data CRUD + import/export
adminRoutes.get('/products/:id/spec-data/export', exportSpecData)
adminRoutes.post('/products/:id/spec-data/import', csvUpload.single('file'), importSpecData)
adminRoutes.get('/products/:id/spec-data', adminGetSpecData)
adminRoutes.post('/products/:id/spec-data', adminCreateSpecData)
adminRoutes.delete('/products/:productId/spec-data/:specId', adminDeleteSpecData)
adminRoutes.put('/products/:productId/spec-data/:specId', adminUpdateSpecData)
// Spec data barcode lookup
adminRoutes.post('/spec-data/lookup', lookupByBarcodes)
// Stock alerts
adminRoutes.get('/stock-alerts', getStockAlerts)
// Order management
adminRoutes.get('/orders', adminGetOrders)
adminRoutes.get('/orders/:id', adminGetOrderDetail)
adminRoutes.post('/orders', adminCreateOrder)
adminRoutes.put('/orders/:id', adminUpdateOrder)
adminRoutes.put('/orders/:id/status', adminUpdateOrderStatus)
adminRoutes.post('/orders/:id/return', adminReturnOrder)
adminRoutes.get('/orders/:id/returns', adminGetOrderReturns)
// Mold management
adminRoutes.get('/molds', adminGetMolds)
adminRoutes.post('/molds', adminCreateMold)
adminRoutes.put('/molds/:id', adminUpdateMold)
adminRoutes.delete('/molds/:id', adminDeleteMold)
// Category management
adminRoutes.get('/categories', adminGetCategories)
adminRoutes.post('/categories', adminCreateCategory)
adminRoutes.delete('/categories/:id', adminDeleteCategory)
adminRoutes.get('/categories/:id/filters', adminGetCategoryFilters)
adminRoutes.post('/categories/:id/filters', adminSaveCategoryFilters)
// System config management
adminRoutes.get('/configs', adminGetConfigs)
adminRoutes.put('/configs/:key', adminUpdateConfig)
// User management
adminRoutes.get('/users', adminGetUsers)
// Gold price management
adminRoutes.get('/gold-price', getGoldPriceLogs)
adminRoutes.get('/gold-price/latest', getLatestGoldPrice)
adminRoutes.post('/gold-price', setGoldPrice)
// Platinum price management
adminRoutes.get('/platinum-price', getPlatinumPriceLogs)
adminRoutes.get('/platinum-price/latest', getLatestPlatinumPrice)
adminRoutes.post('/platinum-price', setPlatinumPrice)