Objectives

1. Microservice Overview

2. Structure architechture

1
2
3
4
5
6
7
8
9
10
order-service/
├── controllers/
│   └── order.controller.js
├── models/
│   └── order.model.js
├── routes/
│   └── order.routes.js
├── .env
├── server.js
├── package.json

2.1. Project Setup

2.2. Mongoose Order Schema

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const mongoose = require('mongoose');

const orderSchema = new mongoose.Schema({
  userId: { type: String, required: true },
  products: [
    {
      productId: String,
      quantity: Number
    }
  ],
  totalPrice: { type: Number, required: true },
  status: {
    type: String,
    enum: ['pending', 'processing', 'shipped', 'delivered', 'cancelled'],
    default: 'pending'
  },
  createdAt: { type: Date, default: Date.now }
});

module.exports = mongoose.model('Order', orderSchema);

2.3. Order Controller

exports.createOrder = async (req, res) => { try { const order = await Order.create(req.body); res.status(201).json(order); } catch (err) { res.status(400).json({ error: ‘Failed to create order.’ }); } };

exports.getAllOrders = async (req, res) => { const orders = await Order.find(); res.json(orders); };

exports.getOrderById = async (req, res) => { const order = await Order.findById(req.params.id); if (!order) return res.status(404).json({ error: ‘Order not found’ }); res.json(order); };

exports.updateOrder = async (req, res) => { const order = await Order.findByIdAndUpdate(req.params.id, req.body, { new: true }); if (!order) return res.status(404).json({ error: ‘Order not found’ }); res.json(order); };

exports.deleteOrder = async (req, res) => { const order = await Order.findByIdAndDelete(req.params.id); if (!order) return res.status(404).json({ error: ‘Order not found’ }); res.json({ message: ‘Order deleted successfully’ }); };

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
### 2.4. Routes
- routes/order.routes.js
```js
const express = require('express');
const router = express.Router();
const {
  createOrder,
  getAllOrders,
  getOrderById,
  updateOrder,
  deleteOrder
} = require('../controllers/order.controller');

router.post('/', createOrder);
router.get('/', getAllOrders);
router.get('/:id', getOrderById);
router.put('/:id', updateOrder);
router.delete('/:id', deleteOrder);

module.exports = router;

2.5. Server Setup

const app = express(); app.use(express.json());

app.use(‘/api/orders’, require(‘./routes/order.routes’));

mongoose.connect(process.env.MONGO_URI) .then(() => app.listen(process.env.PORT, () => { console.log(Order service running on port ${process.env.PORT}); })) .catch(err => console.error(err));

1
2
3
### 2.6. Environment Variables
Create a .env file in the root directory:

PORT=4003 MONGO_URI=mongodb://localhost:27017/order-service ```

3. Testing with Postman

Method Endpoint Description Request Body
POST /api/orders Create new order has Payload
GET /api/orders Get all orders -
GET /api/orders/:id Get order by ID -
PUT /api/orders/:id Update order status has Payload
DELETE /api/orders/:id Delete order -