74 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import { faker } from '@faker-js/faker';
 | |
| import { verifyAccessToken } from '~/utils/jwt-utils';
 | |
| import { unAuthorizedResponse, usePageResponseSuccess } from '~/utils/response';
 | |
| 
 | |
| function generateMockDataList(count: number) {
 | |
|   const dataList = [];
 | |
| 
 | |
|   for (let i = 0; i < count; i++) {
 | |
|     const dataItem = {
 | |
|       id: faker.string.uuid(),
 | |
|       imageUrl: faker.image.avatar(),
 | |
|       imageUrl2: faker.image.avatar(),
 | |
|       open: faker.datatype.boolean(),
 | |
|       status: faker.helpers.arrayElement(['success', 'error', 'warning']),
 | |
|       productName: faker.commerce.productName(),
 | |
|       price: faker.commerce.price(),
 | |
|       currency: faker.finance.currencyCode(),
 | |
|       quantity: faker.number.int({ min: 1, max: 100 }),
 | |
|       available: faker.datatype.boolean(),
 | |
|       category: faker.commerce.department(),
 | |
|       releaseDate: faker.date.past(),
 | |
|       rating: faker.number.float({ min: 1, max: 5 }),
 | |
|       description: faker.commerce.productDescription(),
 | |
|       weight: faker.number.float({ min: 0.1, max: 10 }),
 | |
|       color: faker.color.human(),
 | |
|       inProduction: faker.datatype.boolean(),
 | |
|       tags: Array.from({ length: 3 }, () => faker.commerce.productAdjective()),
 | |
|     };
 | |
| 
 | |
|     dataList.push(dataItem);
 | |
|   }
 | |
| 
 | |
|   return dataList;
 | |
| }
 | |
| 
 | |
| const mockData = generateMockDataList(100);
 | |
| 
 | |
| export default eventHandler(async (event) => {
 | |
|   const userinfo = verifyAccessToken(event);
 | |
|   if (!userinfo) {
 | |
|     return unAuthorizedResponse(event);
 | |
|   }
 | |
| 
 | |
|   await sleep(600);
 | |
| 
 | |
|   const { page, pageSize, sortBy, sortOrder } = getQuery(event);
 | |
|   const listData = structuredClone(mockData);
 | |
|   if (sortBy && Reflect.has(listData[0], sortBy as string)) {
 | |
|     listData.sort((a, b) => {
 | |
|       if (sortOrder === 'asc') {
 | |
|         if (sortBy === 'price') {
 | |
|           return (
 | |
|             Number.parseFloat(a[sortBy as string]) -
 | |
|             Number.parseFloat(b[sortBy as string])
 | |
|           );
 | |
|         } else {
 | |
|           return a[sortBy as string] > b[sortBy as string] ? 1 : -1;
 | |
|         }
 | |
|       } else {
 | |
|         if (sortBy === 'price') {
 | |
|           return (
 | |
|             Number.parseFloat(b[sortBy as string]) -
 | |
|             Number.parseFloat(a[sortBy as string])
 | |
|           );
 | |
|         } else {
 | |
|           return a[sortBy as string] < b[sortBy as string] ? 1 : -1;
 | |
|         }
 | |
|       }
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   return usePageResponseSuccess(page as string, pageSize as string, listData);
 | |
| });
 |