trainingpeaks-sdk
Version:
TypeScript SDK for TrainingPeaks API integration
85 lines (84 loc) • 2.65 kB
JavaScript
;
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;
}
};