feat: api upload car img (#88)
This commit is contained in:
parent
eda869622e
commit
de54ac6669
@ -1,4 +1,4 @@
|
|||||||
import { GetOrder, CreateOrder } from "../../models/api";
|
import { GetOrder, CreateOrder, UploadCarImage } from "../../models/api";
|
||||||
|
|
||||||
import { api } from "./api";
|
import { api } from "./api";
|
||||||
import { extractBodyFromResponse, extractErrorMessageFromResponse } from "./utils";
|
import { extractBodyFromResponse, extractErrorMessageFromResponse } from "./utils";
|
||||||
@ -19,5 +19,13 @@ export const landingApi = api.injectEndpoints({
|
|||||||
transformResponse: extractBodyFromResponse<CreateOrder.Response>,
|
transformResponse: extractBodyFromResponse<CreateOrder.Response>,
|
||||||
transformErrorResponse: extractErrorMessageFromResponse,
|
transformErrorResponse: extractErrorMessageFromResponse,
|
||||||
}),
|
}),
|
||||||
|
uploadCarImage: mutation<UploadCarImage.Response, UploadCarImage.Params>({
|
||||||
|
query: ({ orderId, body }) => ({
|
||||||
|
url: `/order/${orderId}/upload-car-img`,
|
||||||
|
body,
|
||||||
|
method: 'POST'
|
||||||
|
}),
|
||||||
|
transformErrorResponse: extractErrorMessageFromResponse,
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
@ -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> =
|
type GetArrItemType<ArrType> =
|
||||||
ArrType extends Array<infer ItemType> ? ItemType : never;
|
ArrType extends Array<infer ItemType> ? ItemType : never;
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-require-imports */
|
/* eslint-disable @typescript-eslint/no-require-imports */
|
||||||
const router = require('express').Router();
|
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) => {
|
router.get('/set/:name/:value', (req, res) => {
|
||||||
const { name, value } = req.params;
|
const { name, value } = req.params;
|
||||||
@ -15,28 +15,34 @@ router.get('/set/:name/:value', (req, res) => {
|
|||||||
router.get('/', (req, res) => {
|
router.get('/', (req, res) => {
|
||||||
res.send(`<div>
|
res.send(`<div>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>Мастера</legend>
|
<legend>Мастера</legend>
|
||||||
${generateRadioInput('masters', 'success')}
|
${generateRadioInput('masters', 'success')}
|
||||||
${generateRadioInput('masters', 'error')}
|
${generateRadioInput('masters', 'error')}
|
||||||
${generateRadioInput('masters', 'empty')}
|
${generateRadioInput('masters', 'empty')}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>Заказы</legend>
|
<legend>Заказы</legend>
|
||||||
${generateRadioInput('orders', 'success')}
|
${generateRadioInput('orders', 'success')}
|
||||||
${generateRadioInput('orders', 'error')}
|
${generateRadioInput('orders', 'error')}
|
||||||
${generateRadioInput('orders', 'empty')}
|
${generateRadioInput('orders', 'empty')}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>Лендинг - Сделать заказ</legend>
|
<legend>Лендинг - Сделать заказ</legend>
|
||||||
${generateRadioInput('orderCreate', 'success')}
|
${generateRadioInput('orderCreate', 'success')}
|
||||||
${generateRadioInput('orderCreate', 'error')}
|
${generateRadioInput('orderCreate', 'error')}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>Лендинг - Детали заказа</legend>
|
<legend>Лендинг - Детали заказа</legend>
|
||||||
${generateRadioInput('orderView', 'success-pending')}
|
${generateRadioInput('orderView', 'success-pending')}
|
||||||
${generateRadioInput('orderView', 'success-working')}
|
${generateRadioInput('orderView', 'success-working')}
|
||||||
${generateRadioInput('orderView', 'error')}
|
${generateRadioInput('orderView', 'error')}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
<fieldset>
|
||||||
|
<legend>Лендинг - Детали заказа, фото машины</legend>
|
||||||
|
${generateRadioInput('orderCarImg', 'success')}
|
||||||
|
${generateRadioInput('orderCarImg', 'error-file-type')}
|
||||||
|
${generateRadioInput('orderCarImg', 'error-file-size')}
|
||||||
|
</fieldset>
|
||||||
</div>`);
|
</div>`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -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'));
|
router.use('/admin', require('./admin'));
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"success": false,
|
||||||
|
"error": "Invalid car image file size. Limit is 5MB"
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"success": false,
|
||||||
|
"error": "Invalid car image file type. Allowed types: jpg, png"
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"success": true
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user