response.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import type { EventHandlerRequest, H3Event } from 'h3';
  2. import { setResponseStatus } from 'h3';
  3. export function useResponseSuccess<T = any>(data: T) {
  4. return {
  5. code: 0,
  6. data,
  7. error: null,
  8. message: 'ok',
  9. };
  10. }
  11. export function usePageResponseSuccess<T = any>(
  12. page: number | string,
  13. pageSize: number | string,
  14. list: T[],
  15. { message = 'ok' } = {},
  16. ) {
  17. const pageData = pagination(
  18. Number.parseInt(`${page}`),
  19. Number.parseInt(`${pageSize}`),
  20. list,
  21. );
  22. return {
  23. ...useResponseSuccess({
  24. items: pageData,
  25. total: list.length,
  26. }),
  27. message,
  28. };
  29. }
  30. export function useResponseError(message: string, error: any = null) {
  31. return {
  32. code: -1,
  33. data: null,
  34. error,
  35. message,
  36. };
  37. }
  38. export function forbiddenResponse(
  39. event: H3Event<EventHandlerRequest>,
  40. message = 'Forbidden Exception',
  41. ) {
  42. setResponseStatus(event, 403);
  43. return useResponseError(message, message);
  44. }
  45. export function unAuthorizedResponse(event: H3Event<EventHandlerRequest>) {
  46. setResponseStatus(event, 401);
  47. return useResponseError('Unauthorized Exception', 'Unauthorized Exception');
  48. }
  49. export function sleep(ms: number) {
  50. return new Promise((resolve) => setTimeout(resolve, ms));
  51. }
  52. export function pagination<T = any>(
  53. pageNo: number,
  54. pageSize: number,
  55. array: T[],
  56. ): T[] {
  57. const offset = (pageNo - 1) * Number(pageSize);
  58. return offset + Number(pageSize) >= array.length
  59. ? array.slice(offset)
  60. : array.slice(offset, offset + Number(pageSize));
  61. }