eletrotupi / tcc/ api/src/utils/validators.js06314a5b665164bc343bc1c0a38ca4a562c53b7b
2.2 KB | 97 lines Raw
1
// Email validation
2
export function isValidEmail(email) {
3
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
4
  return emailRegex.test(email);
5
}
6

7
// Password validation (minimum 6 characters)
8
export function isValidPassword(password) {
9
  return password && password.length >= 6;
10
}
11

12
import { parseISO, isValid, isFuture, isAfter } from 'date-fns';
13

14
// Date validation
15
export function isValidDate(dateString) {
16
  if (!dateString) return false;
17
  try {
18
    const date = parseISO(dateString);
19
    return isValid(date);
20
  } catch {
21
    return false;
22
  }
23
}
24

25
// Check if date is not in the future
26
export function isNotFutureDate(dateString) {
27
  if (!dateString) return false;
28
  try {
29
    const date = parseISO(dateString);
30
    return isValid(date) && !isFuture(date);
31
  } catch {
32
    return false;
33
  }
34
}
35

36
// Validate date range
37
export function isValidDateRange(startDate, endDate) {
38
  if (!startDate || !endDate) return false;
39
  try {
40
    const start = parseISO(startDate);
41
    const end = parseISO(endDate);
42

43
    if (!isValid(start) || !isValid(end)) {
44
      return false;
45
    }
46

47
    return !isAfter(start, end);
48
  } catch {
49
    return false;
50
  }
51
}
52

53
// Sanitize string input
54
export function sanitizeString(str) {
55
  if (typeof str !== 'string') return '';
56
  return str.trim().slice(0, 500); // Limit to 500 chars
57
}
58

59
// Validate required fields
60
export function validateRequiredFields(data, fields) {
61
  const missing = [];
62

63
  for (const field of fields) {
64
    if (data[field] === undefined || data[field] === null || data[field] === '') {
65
      missing.push(field);
66
    }
67
  }
68

69
  return {
70
    valid: missing.length === 0,
71
    missing
72
  };
73
}
74

75
// Validate number in range
76
export function isInRange(value, min, max) {
77
  const num = Number(value);
78
  return !isNaN(num) && num >= min && num <= max;
79
}
80

81
// Parse and validate integer
82
export function parseIntOrDefault(value, defaultValue = null) {
83
  const parsed = parseInt(value, 10);
84
  return isNaN(parsed) ? defaultValue : parsed;
85
}
86

87
// Validate pagination parameters
88
export function validatePagination(page, limit) {
89
  const validPage = Math.max(1, parseIntOrDefault(page, 1));
90
  const validLimit = Math.min(100, Math.max(1, parseIntOrDefault(limit, 20)));
91

92
  return {
93
    page: validPage,
94
    limit: validLimit,
95
    offset: (validPage - 1) * validLimit
96
  };
97
}