Files
order-service/src/routes/order.routes.ts
T

130 lines
2.7 KiB
TypeScript

import { Router } from "express";
import { OrderController } from "../controllers/order.controller.js";
import { authMiddleware } from "../middleware/auth.middleware.js";
import { requireRole } from "../middleware/role.middleware.js";
import { validate } from "../middleware/validate.middleware.js";
import {
createOrderSchema,
orderIdParamSchema,
} from "../validation/order.schema.js";
const router: Router = Router();
/**
* @openapi
* /orders:
* post:
* tags:
* - Orders
* summary: Create a new order
* security:
* - BearerAuth: []
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* items:
* type: array
* items:
* type: object
* properties:
* productId:
* type: string
* quantity:
* type: number
* responses:
* 201:
* description: Order created
* 400:
* description: Invalid input
*/
router.post(
"/",
authMiddleware,
requireRole(["customer", "admin"]),
validate(createOrderSchema),
OrderController.create,
);
/**
* @openapi
* /orders:
* get:
* tags:
* - Orders
* summary: List my orders
* security:
* - BearerAuth: []
* responses:
* 200:
* description: List of orders
* content:
* application/json:
* schema:
* type: array
* items:
* $ref: '#/components/schemas/Order'
*/
router.get("/", authMiddleware, OrderController.list);
/**
* @openapi
* /orders/{id}/pay:
* post:
* tags:
* - Orders
* summary: Pay for an order
* security:
* - BearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: string
* responses:
* 200:
* description: Order paid
* 404:
* description: Order not found
*/
router.post(
"/:id/pay",
authMiddleware,
validate(orderIdParamSchema),
OrderController.pay,
);
/**
* @openapi
* /orders/{id}/cancel:
* post:
* tags:
* - Orders
* summary: Cancel an order
* security:
* - BearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: string
* responses:
* 200:
* description: Order cancelled
* 404:
* description: Order not found
*/
router.post(
"/:id/cancel",
authMiddleware,
validate(orderIdParamSchema),
OrderController.cancel,
);
export default router;