using API.Authentication.Interfaces; using API.DTO.Base; using API.DTO.Login; using DAL.Contexts; using DAL.Models; using DAL.Models.Audits; namespace API.Services { public class UserService : ServiceBase { private readonly ulong _defaultUserPermission; private readonly PermissionService _permissionService; public UserService(ILogger logger, SASGContext context, IUserAuthentication auth, PermissionService permissionService, ulong defaultUserPermission) : base(logger, context, auth) { _permissionService = permissionService; _defaultUserPermission = defaultUserPermission; } public User? add(UserRegisterDTO registerDTO, string hashedPassword, byte[] salt, User? user = null, ulong? permissionId = null) { Permission? defaultPermission = _permissionService.getNoAuthentication(_defaultUserPermission); if (defaultPermission == null) throw new InvalidOperationException("defaultUserPermission doesn't exist."); User model = new User { firstName = registerDTO.firstName, lastName = registerDTO.lastName, phoneNumber = registerDTO.phoneNumber, password = hashedPassword, salt = salt, permissionId = permissionId ?? defaultPermission.id, updated = DateTime.Now }; if (permissionId != null && user != null) { model.permissionId = permissionId.Value; model.updater = user.id; UserDTO userDTO = new UserDTO(); userDTO.adaptFromModel(user); if (!_auth.canAdd(userDTO, user)) return null; Context.Add(model); Context.SaveChanges(); return model; } Context.Add(model); Context.SaveChanges(); return model; } } }