98 lines
3.0 KiB
JavaScript
98 lines
3.0 KiB
JavaScript
import User from '../models/community/user.js';
|
|
import UserParam from '../models/community/user_param.js';
|
|
import UserParamType from '../models/type/user_param.js';
|
|
import UserParamVisibility from '../models/community/user_param_visibility.js';
|
|
import UserParamVisibilityType from '../models/type/user_param_visibility.js';
|
|
import { Op } from 'sequelize';
|
|
import UserRight from '../models/community/user_right.js';
|
|
import UserRightType from '../models/type/user_right.js';
|
|
|
|
class BaseService {
|
|
async getUserByHashedId(hashedId) {
|
|
const user = await User.findOne({ where: { hashedId } });
|
|
if (!user) {
|
|
throw new Error('User not found');
|
|
}
|
|
return user;
|
|
}
|
|
|
|
async getUserById(userId) {
|
|
const user = await User.findOne({ where: { id: userId } });
|
|
if (!user) {
|
|
throw new Error('User not found');
|
|
}
|
|
return user;
|
|
}
|
|
|
|
async getUserParams(userId, paramDescriptions) {
|
|
return await UserParam.findAll({
|
|
where: { userId },
|
|
include: [
|
|
{
|
|
model: UserParamType,
|
|
as: 'paramType',
|
|
where: { description: { [Op.in]: paramDescriptions } }
|
|
},
|
|
{
|
|
model: UserParamVisibility,
|
|
as: 'param_visibilities',
|
|
include: [
|
|
{
|
|
model: UserParamVisibilityType,
|
|
as: 'visibility_type'
|
|
}
|
|
]
|
|
}
|
|
]
|
|
});
|
|
}
|
|
|
|
calculateAge(birthdate) {
|
|
const birthDate = new Date(birthdate);
|
|
const ageDifMs = Date.now() - birthDate.getTime();
|
|
const ageDate = new Date(ageDifMs);
|
|
return Math.abs(ageDate.getUTCFullYear() - 1970);
|
|
}
|
|
|
|
|
|
async isUserAdult(userId) {
|
|
const birthdateParam = await this.getUserParams(userId, ['birthdate']);
|
|
if (!birthdateParam || birthdateParam.length === 0) {
|
|
return false;
|
|
}
|
|
const birthdate = birthdateParam[0].value;
|
|
const age = this.calculateAge(birthdate);
|
|
return age >= 18;
|
|
}
|
|
|
|
async checkUserAccess(hashedId) {
|
|
const user = await this.getUserByHashedId(hashedId);
|
|
if (!user || !user.active) throw new Error('Access denied: User not found or inactive');
|
|
return user.id;
|
|
}
|
|
|
|
async getUserRights(userId) {
|
|
const userRights = await UserRight.findAll({
|
|
where: { userId },
|
|
include: [
|
|
{
|
|
model: UserRightType,
|
|
as: 'rightType',
|
|
attributes: ['title']
|
|
}
|
|
]
|
|
});
|
|
|
|
return userRights.map((right) => right.rightType.title);
|
|
}
|
|
|
|
async hasUserRight(userId, requiredRights) {
|
|
console.log(requiredRights);
|
|
const userRights = await this.getUserRights(userId);
|
|
return userRights.some((right) => requiredRights.includes(right));
|
|
}
|
|
|
|
}
|
|
|
|
export default BaseService;
|