utils.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import Joi from "joi";
  2. import moment from "moment";
  3. const appointmentTimeSchema = Joi.object().keys({
  4. date: Joi.date().required(),
  5. available: Joi.boolean().required()
  6. });
  7. function isValidEmail(email) {
  8. const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  9. return emailRegex.test(email);
  10. }
  11. function isDueDatePassed(dueDate) {
  12. return moment(dueDate, 'YYYY-MM-DD', true).isAfter();
  13. }
  14. function isDatePassed(dateA, dateB) {
  15. const dueDateA = new Date(dateA);
  16. const dueDateB = new Date(dateB);
  17. return dueDateA < dueDateB;
  18. }
  19. function isValidAppointmentTimes(data) {
  20. return data.every(item => {
  21. try {
  22. if (!moment(item.date, 'YYYY-MM-DDTHH:mm', true).isValid() || appointmentTimeSchema.validate(item)['error']) {
  23. return false;
  24. }
  25. } catch (e) {
  26. return false;
  27. }
  28. return true;
  29. });
  30. }
  31. function validateDates(res, startDate, endDate, dueDate) {
  32. if (isDatePassed(startDate, dueDate)) {
  33. res.status(400).json({ 'message': 'Due date is after start date' });
  34. return false;
  35. }
  36. if (isDueDatePassed(dueDate)) {
  37. res.status(400).json({ 'message': 'Due date is in the past' });
  38. return false;
  39. }
  40. if (isDatePassed(endDate, startDate)) {
  41. res.status(400).json({ 'message': 'End date is before start date' });
  42. return false;
  43. }
  44. return true;
  45. }
  46. export {isValidEmail, isDueDatePassed, isDatePassed, validateDates, isValidAppointmentTimes, appointmentTimeSchema};