112 lines
4.0 KiB
TypeScript
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)
|