Initial commit

This commit is contained in:
Lorenzo Sanesi
2026-03-26 22:46:03 +01:00
commit 18e0e04700
80 changed files with 13114 additions and 0 deletions
@@ -0,0 +1,49 @@
const Joi = require('joi');
const config = require('../../../config');
const participantSchema = Joi.object({
user: Joi.number().integer().positive().required(),
role: Joi.string()
.valid(...Object.values(config.PARTICIPANT_ROLES))
.required(),
});
const createBetSchema = Joi.object({
title: Joi.string().trim().min(1).max(200).required().messages({
'string.empty': 'Bet title is required',
'string.max': 'Bet title must not exceed 200 characters',
}),
description: Joi.string().trim().max(1000).optional().allow(''),
stake: Joi.string().trim().min(1).required().messages({
'string.empty': 'Bet stake is required',
}),
participants: Joi.array().items(participantSchema).min(1).required().messages({
'array.min': 'At least one participant is required',
}),
isPublic: Joi.boolean().optional().default(false),
groupId: Joi.string().optional().allow(null),
});
const updateBetSchema = Joi.object({
title: Joi.string().trim().min(1).max(200).optional(),
description: Joi.string().trim().max(1000).optional().allow(''),
stake: Joi.string().trim().min(1).optional(),
status: Joi.string()
.valid(...Object.values(config.BET_STATUS))
.optional(),
endDate: Joi.date().optional(),
winner: Joi.number().integer().positive().optional().allow(null),
});
const declareWinnerSchema = Joi.object({
winnerId: Joi.number().integer().positive().required().messages({
'number.base': 'Winner ID must be a number',
'any.required': 'Winner ID is required',
}),
});
module.exports = {
createBetSchema,
updateBetSchema,
declareWinnerSchema,
};
@@ -0,0 +1,11 @@
const Joi = require('joi');
const sendFriendRequestSchema = Joi.object({
identifier: Joi.alternatives().try(Joi.number().integer().positive(), Joi.string().min(1)).required().messages({
'any.required': 'User identifier (ID, name, or email) is required',
}),
});
module.exports = {
sendFriendRequestSchema,
};
@@ -0,0 +1,29 @@
const Joi = require('joi');
const createGroupSchema = Joi.object({
name: Joi.string().trim().min(1).max(100).required().messages({
'string.empty': 'Group name is required',
'string.min': 'Group name must be at least 1 character',
'string.max': 'Group name must not exceed 100 characters',
}),
members: Joi.array().items(Joi.number().integer().positive()).min(1).required().messages({
'array.min': 'At least one member is required',
'array.base': 'Members must be an array',
}),
});
const updateGroupSchema = Joi.object({
name: Joi.string().trim().min(1).max(100).optional(),
});
const addMembersSchema = Joi.object({
userIds: Joi.array().items(Joi.number().integer().positive()).min(1).required().messages({
'array.min': 'At least one user ID is required',
}),
});
module.exports = {
createGroupSchema,
updateGroupSchema,
addMembersSchema,
};
@@ -0,0 +1,11 @@
const Joi = require('joi');
const updateUserSchema = Joi.object({
name: Joi.string().trim().min(1).max(100).optional(),
email: Joi.string().email().optional(),
avatarUrl: Joi.string().uri().optional().allow('', null),
});
module.exports = {
updateUserSchema,
};