diff --git a/src/__data__/service/landing.api.ts b/src/__data__/service/landing.api.ts index 7f84aef..9372cf8 100644 --- a/src/__data__/service/landing.api.ts +++ b/src/__data__/service/landing.api.ts @@ -1,4 +1,4 @@ -import { GetOrder, CreateOrder } from "../../models/api"; +import { GetOrder, CreateOrder, UploadCarImage } from "../../models/api"; import { api } from "./api"; import { extractBodyFromResponse, extractErrorMessageFromResponse } from "./utils"; @@ -19,5 +19,13 @@ export const landingApi = api.injectEndpoints({ transformResponse: extractBodyFromResponse, transformErrorResponse: extractErrorMessageFromResponse, }), + uploadCarImage: mutation({ + query: ({ orderId, body }) => ({ + url: `/order/${orderId}/upload-car-img`, + body, + method: 'POST' + }), + transformErrorResponse: extractErrorMessageFromResponse, + }), }) }); diff --git a/src/models/api/order.ts b/src/models/api/order.ts index dabe6f9..71e6503 100644 --- a/src/models/api/order.ts +++ b/src/models/api/order.ts @@ -21,6 +21,17 @@ export namespace CreateOrder { }; } +export namespace UploadCarImage { + export type Response = void; + export type Params = { + orderId: Order.Id; + /** + * @example { file: File } + */ + body: FormData; + }; +} + type GetArrItemType = ArrType extends Array ? ItemType : never; diff --git a/stubs/api/admin.js b/stubs/api/admin.js index cf071cf..d5b8bf1 100644 --- a/stubs/api/admin.js +++ b/stubs/api/admin.js @@ -2,7 +2,7 @@ /* eslint-disable @typescript-eslint/no-require-imports */ const router = require('express').Router(); -const STUBS = { masters: 'success', orders: 'success', orderCreate: 'success', orderView: 'success-pending' }; +const STUBS = { masters: 'success', orders: 'success', orderCreate: 'success', orderView: 'success-pending', orderCarImg: 'success' }; router.get('/set/:name/:value', (req, res) => { const { name, value } = req.params; @@ -15,28 +15,34 @@ router.get('/set/:name/:value', (req, res) => { router.get('/', (req, res) => { res.send(`
- Мастера + Мастера ${generateRadioInput('masters', 'success')} ${generateRadioInput('masters', 'error')} ${generateRadioInput('masters', 'empty')}
- Заказы + Заказы ${generateRadioInput('orders', 'success')} ${generateRadioInput('orders', 'error')} ${generateRadioInput('orders', 'empty')}
- Лендинг - Сделать заказ + Лендинг - Сделать заказ ${generateRadioInput('orderCreate', 'success')} ${generateRadioInput('orderCreate', 'error')}
- Лендинг - Детали заказа + Лендинг - Детали заказа ${generateRadioInput('orderView', 'success-pending')} ${generateRadioInput('orderView', 'success-working')} ${generateRadioInput('orderView', 'error')}
+
+ Лендинг - Детали заказа, фото машины + ${generateRadioInput('orderCarImg', 'success')} + ${generateRadioInput('orderCarImg', 'error-file-type')} + ${generateRadioInput('orderCarImg', 'error-file-size')} +
`); }); diff --git a/stubs/api/index.js b/stubs/api/index.js index 2ecef50..d1e0a3c 100644 --- a/stubs/api/index.js +++ b/stubs/api/index.js @@ -98,6 +98,22 @@ router.post('/order/create', (req, res) => { ); }); +router.post('/order/:orderId/upload-car-img', (req, res) => { + const { orderId } = req.params; + const stubName = `${orderId}-${STUBS.orderCarImg}`; + + try { + res + .status(/error/.test(stubName) ? 500 : 200) + .send(require(`../json/landing-order-car-image-upload/${stubName}.json`)); + } catch (e) { + console.error(e); + res + .status(500) + .send(commonError); + } +}); + router.use('/admin', require('./admin')); module.exports = router; diff --git a/stubs/json/landing-order-car-image-upload/id1-error-file-size.json b/stubs/json/landing-order-car-image-upload/id1-error-file-size.json new file mode 100644 index 0000000..62806a0 --- /dev/null +++ b/stubs/json/landing-order-car-image-upload/id1-error-file-size.json @@ -0,0 +1,4 @@ +{ + "success": false, + "error": "Invalid car image file size. Limit is 5MB" +} \ No newline at end of file diff --git a/stubs/json/landing-order-car-image-upload/id1-error-file-type.json b/stubs/json/landing-order-car-image-upload/id1-error-file-type.json new file mode 100644 index 0000000..c861b2a --- /dev/null +++ b/stubs/json/landing-order-car-image-upload/id1-error-file-type.json @@ -0,0 +1,4 @@ +{ + "success": false, + "error": "Invalid car image file type. Allowed types: jpg, png" +} \ No newline at end of file diff --git a/stubs/json/landing-order-car-image-upload/id1-success.json b/stubs/json/landing-order-car-image-upload/id1-success.json new file mode 100644 index 0000000..28e7be1 --- /dev/null +++ b/stubs/json/landing-order-car-image-upload/id1-success.json @@ -0,0 +1,3 @@ +{ + "success": true +} \ No newline at end of file