iT邦幫忙

2024 iThome 鐵人賽

DAY 23
1
佛心分享-SideProject30

收納規劃APP系列 第 23

Day23:API開發結束

  • 分享至 

  • xImage
  •  

開始寫之後發現跟一開始預設的有一點點出入,因為有階層的關係,所以查詢時要帶入上層的ID才能正確拿到全部,不然會拿到別人家具。

以下是開發完的API名稱,但這次30天內會用到的應該只會有家具跟收納資料的 API:

1. Floor Plan API

  • 新增平面圖
  • 刪除指定的平面圖
  • 取得所有平面圖 (指定使用者)
  • 取得指定的平面圖
  • 修改指定平面圖

2. Room API

  • 取得所有房間資料 (指定 Floor Plan)
  • 取得指定的房間
  • 新增房間
  • 修改指定的房間
  • 刪除指定的房間

3. Furniture API

  • 取得所有家具的資料 (指定房間)
  • 取得指定的家具
  • 新增家具
  • 修改指定的家具
  • 刪除指定的家具

4. Storage Item (收納資料) API

  • 取得家具中的所有收納資料
  • 取得指定的收納資料
  • 新增收納資料
  • 修改指定的收納資料
  • 刪除指定的收納資料

大概就是這樣的內容,小調整再換個名稱重複寫5遍

import express, { Request, Response, Router } from 'express';
import StorageItem from './storage-item.model';
import { sendErrorResponse, sendSuccessResponse } from '../common/interface/api-response.interface'; // 假設你有相同的回應格式

const router: Router = express.Router();

/** 取得家具中的所有收納資料 */
router.get('/****/:furnitureId', async (req: Request<{ furnitureId: string }>, res: any) => {
    try {
        const storageItems = await StorageItem.find({ furnitureId: req.params.furnitureId }); // 查詢所有收納資料
        console.log('req', req);
        if (storageItems.length === 0) {
            return sendErrorResponse(res, 404, 'Not found', 'No storage items found for this furniture');
        }

        sendSuccessResponse(res, 200, storageItems, { message: 'Storage items retrieved successfully' });
    } catch (error: any) {
        sendErrorResponse(res, 500, 'Server error', error.message);
    }
});

/** 取得指定的收納資料 */
router.get('/****/:id', async (req: Request<{ id: string }>, res: any) => {
    try {
        const storageItem = await StorageItem.findById(req.params.id); // 透過 ID 查詢特定收納資料

        if (!storageItem) {
            return sendErrorResponse(res, 404, 'Not found', 'Storage item not found');
        }

        sendSuccessResponse(res, 200, storageItem, { message: 'Storage item retrieved successfully' });
    } catch (error: any) {
        sendErrorResponse(res, 500, 'Server error', error.message);
    }
});

/** 新增收納資料 */
router.post('/****', async (req: Request, res: Response) => {
    try {
        const storageItemData: Partial<typeof StorageItem> = req.body; // 從請求中取得新增的收納資料
        const newStorageItem = await StorageItem.create(storageItemData); // 新增收納資料

        sendSuccessResponse(res, 200, newStorageItem, { message: 'Storage item added successfully' });
    } catch (error: any) {
        sendErrorResponse(res, 500, 'Server error', error.message);
    }
});

/** 修改指定的收納資料 */
router.put('/****/:id', async (req: Request<{ id: string }>, res: any) => {
    try {
        const storageItemData = req.body; // 從請求中取得要更新的資料
        const updatedStorageItem = await StorageItem.findByIdAndUpdate(req.params.id, storageItemData, { new: true }); // 更新資料並返回更新後的結果

        if (!updatedStorageItem) {
            return sendErrorResponse(res, 404, 'Not found', 'Storage item not found');
        }

        sendSuccessResponse(res, 200, updatedStorageItem, { message: 'Storage item updated successfully' });
    } catch (error: any) {
        sendErrorResponse(res, 500, 'Server error', error.message);
    }
});

/** 刪除指定的收納資料 */
router.delete('/****/:id', async (req: Request<{ id: string }>, res: any) => {
    try {
        const deletedStorageItem = await StorageItem.findByIdAndDelete(req.params.id); // 根據 ID 刪除收納資料

        if (!deletedStorageItem) {
            return sendErrorResponse(res, 404, 'Not found', 'Storage item not found');
        }

        sendSuccessResponse(res, 200, deletedStorageItem, { message: 'Storage item deleted successfully' });
    } catch (error: any) {
        sendErrorResponse(res, 500, 'Server error', error.message);
    }
});

// 匯出路由
export default router;


上一篇
Day22:定義回傳型別
下一篇
Day24:前後端串接-底層Service
系列文
收納規劃APP32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言