UNPKG

trainingpeaks-sdk

Version:
85 lines (84 loc) 2.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getUserPreference = exports.hasUserPreference = exports.updateUserAvatar = exports.updateUserPreferences = exports.updateUserName = exports.createUser = void 0; const domain_errors_1 = require("../../domain/errors/domain-errors.js"); const FIELD_KEY_MAP = { 'user id': 'id', 'user name': 'name', username: 'username', }; const createUser = (id, name, username, avatar, preferences) => { validateStringField(id, 'User ID'); validateStringField(name, 'User name'); validateStringField(username, 'Username'); if (avatar) { validateAvatarUrl(avatar); } return { id: id.trim(), name: name.trim(), username: username.trim(), avatar, preferences, }; }; exports.createUser = createUser; const updateUserName = (user, newName) => { validateStringField(newName, 'User name'); return { ...user, name: newName.trim(), }; }; exports.updateUserName = updateUserName; const updateUserPreferences = (user, preferences) => ({ ...user, preferences, }); exports.updateUserPreferences = updateUserPreferences; const updateUserAvatar = (user, avatar) => { if (avatar) { validateAvatarUrl(avatar); } return { ...user, avatar, }; }; exports.updateUserAvatar = updateUserAvatar; const hasUserPreference = (user, key) => { return user.preferences ? key in user.preferences : false; }; exports.hasUserPreference = hasUserPreference; const getUserPreference = (user, key, defaultValue) => { if (!user.preferences || !(key in user.preferences)) { return defaultValue; } return user.preferences[key]; }; exports.getUserPreference = getUserPreference; const validateStringField = (value, fieldName, maxLength = 100) => { const normalizedFieldName = fieldName.trim().toLowerCase(); const fieldKey = FIELD_KEY_MAP[normalizedFieldName] || normalizedFieldName; const trimmed = value?.trim() || ''; if (trimmed.length === 0) { throw new domain_errors_1.ValidationError(`${fieldName} cannot be empty`, fieldKey); } if (trimmed.length > maxLength) { throw new domain_errors_1.ValidationError(`${fieldName} cannot exceed ${maxLength} characters`, fieldKey); } }; const validateAvatarUrl = (avatar) => { if (!isValidUrl(avatar)) { throw new domain_errors_1.ValidationError('Avatar must be a valid URL', 'avatar'); } }; const isValidUrl = (url) => { try { new URL(url); return true; } catch { return false; } };