response.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { ERROR_CODE } from '@/utils/constants';
  2. import type { NextApiRequest, NextApiResponse } from 'next';
  3. type IApiResponse<T = any> = {
  4. statusCode?: number;
  5. success: boolean;
  6. message: string;
  7. data: T;
  8. errorCode?: ERROR_CODE | (string & {});
  9. };
  10. type Methods = 'GET' | 'OPTIONS' | 'PUT' | 'POST' | 'PATCH' | 'DELETE' | (string & {});
  11. export function response<T = any>(res: NextApiResponse, options?: Partial<IApiResponse<T>>) {
  12. const { statusCode = 200, message, data = null, errorCode } = options ?? {};
  13. res.status(statusCode).json({
  14. success: statusCode === 200 && !errorCode,
  15. err_msg: message ?? (statusCode === 200 && !errorCode ? 'successful' : 'failed'),
  16. data,
  17. err_code: errorCode ?? (statusCode === 200 ? undefined : statusCode),
  18. });
  19. }
  20. export function checkAllowMethods(res: NextApiResponse, method: string = '', methods: Methods[]) {
  21. if (!method || !methods.includes(method)) {
  22. response(res, { statusCode: 405 });
  23. return false;
  24. }
  25. return true;
  26. }
  27. export function checkAuthorized(req: NextApiRequest, res: NextApiResponse) {
  28. if (!req.session) {
  29. response(res, { statusCode: 401 });
  30. return false;
  31. }
  32. return true;
  33. }