You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. const Person = require('../../models/person');
  2. import dbConnect from '../../utils/helpers/dbHelpers';
  3. import type { NextApiRequest, NextApiResponse } from 'next';
  4. import { IPerson, PersonRespone } from '../../utils/interface/personInterface';
  5. async function handler(
  6. req: NextApiRequest,
  7. res: NextApiResponse<PersonRespone>
  8. ) {
  9. const { method } = req;
  10. await dbConnect();
  11. const pageIndex = parseInt(req.query.page ? req.query.page.toString() : '0');
  12. if (pageIndex < 1) {
  13. res.status(422).json({
  14. message: 'Page does not exist ',
  15. });
  16. return;
  17. }
  18. switch (method) {
  19. case 'GET': {
  20. try {
  21. const dataCount: number = await Person.countDocuments();
  22. if (dataCount === 0) {
  23. res.status(200).json({
  24. message: 'No data.',
  25. data: [],
  26. dataCount: 0,
  27. });
  28. break;
  29. }
  30. if ((pageIndex - 1) * 4 >= dataCount) {
  31. throw new Error('Page does not exist!');
  32. }
  33. const dataFromDB: Array<IPerson> = await Person.find({})
  34. .skip((pageIndex - 1) * 4)
  35. .limit(4);
  36. if (!dataFromDB) {
  37. throw new Error('No data!');
  38. }
  39. res.status(200).json({
  40. message: 'Fetched data successfully',
  41. data: dataFromDB,
  42. dataCount,
  43. });
  44. } catch (error) {
  45. if (error instanceof Error)
  46. res.status(400).json({ message: error.message });
  47. else res.status(400).json({ message: 'Unexpected error' + error });
  48. }
  49. break;
  50. }
  51. case 'POST': {
  52. try {
  53. const person = await Person.create(
  54. req.body
  55. ); /* create a new model in the database */
  56. res
  57. .status(201)
  58. .json({ message: 'Created successfully!', data: person });
  59. } catch (error) {
  60. if (error instanceof Error)
  61. res.status(400).json({ message: error.message });
  62. else res.status(400).json({ message: 'Unexpected error' + error });
  63. }
  64. break;
  65. }
  66. default:
  67. res.status(405).json({ message: 'Method not allowed' });
  68. break;
  69. }
  70. }
  71. export default handler;