107 lines
2.3 KiB
JavaScript
107 lines
2.3 KiB
JavaScript
'use strict';
|
|
|
|
const { ValidationError } = require('../../shared/errors');
|
|
|
|
const VALID_FREQUENCIES = [
|
|
'daily',
|
|
'weekdays',
|
|
'weekly',
|
|
'1h',
|
|
'2h',
|
|
'4h',
|
|
'8h',
|
|
'12h',
|
|
];
|
|
|
|
/**
|
|
* Validate first day of week.
|
|
*/
|
|
function validateFirstDayOfWeek(value) {
|
|
if (value === undefined) return;
|
|
if (typeof value !== 'number' || value < 0 || value > 6) {
|
|
throw new ValidationError(
|
|
'First day of week must be a number between 0 (Sunday) and 6 (Saturday)',
|
|
'first_day_of_week'
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validate password.
|
|
*/
|
|
function validatePassword(password, field = 'password') {
|
|
if (password && password.length < 6) {
|
|
throw new ValidationError(
|
|
'Password must be at least 6 characters',
|
|
field
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validate task summary frequency.
|
|
*/
|
|
function validateFrequency(frequency) {
|
|
if (!frequency) {
|
|
throw new ValidationError('Frequency is required.');
|
|
}
|
|
if (!VALID_FREQUENCIES.includes(frequency)) {
|
|
throw new ValidationError('Invalid frequency value.');
|
|
}
|
|
return frequency;
|
|
}
|
|
|
|
/**
|
|
* Validate API key ID.
|
|
*/
|
|
function validateApiKeyId(id) {
|
|
const tokenId = parseInt(id, 10);
|
|
if (Number.isNaN(tokenId)) {
|
|
throw new ValidationError('Invalid API key id.');
|
|
}
|
|
return tokenId;
|
|
}
|
|
|
|
/**
|
|
* Validate API key name.
|
|
*/
|
|
function validateApiKeyName(name) {
|
|
if (!name || !name.trim()) {
|
|
throw new ValidationError('API key name is required.');
|
|
}
|
|
return name.trim();
|
|
}
|
|
|
|
/**
|
|
* Validate expires_at date.
|
|
*/
|
|
function validateExpiresAt(expires_at) {
|
|
if (!expires_at) return null;
|
|
const parsedDate = new Date(expires_at);
|
|
if (Number.isNaN(parsedDate.getTime())) {
|
|
throw new ValidationError('expires_at must be a valid date.');
|
|
}
|
|
return parsedDate;
|
|
}
|
|
|
|
/**
|
|
* Validate sidebar settings.
|
|
*/
|
|
function validateSidebarSettings(body) {
|
|
const { pinnedViewsOrder } = body;
|
|
if (!Array.isArray(pinnedViewsOrder)) {
|
|
throw new ValidationError('pinnedViewsOrder must be an array');
|
|
}
|
|
return { pinnedViewsOrder };
|
|
}
|
|
|
|
module.exports = {
|
|
VALID_FREQUENCIES,
|
|
validateFirstDayOfWeek,
|
|
validatePassword,
|
|
validateFrequency,
|
|
validateApiKeyId,
|
|
validateApiKeyName,
|
|
validateExpiresAt,
|
|
validateSidebarSettings,
|
|
};
|