using AutoMapper; using DigitalData.Core.DTO; using DigitalData.UserManager.Application.Contracts; using DigitalData.UserManager.Application.DTOs.User; using DigitalData.UserManager.Domain.Entities; using DigitalData.UserManager.Infrastructure.Contracts; using Microsoft.Extensions.Localization; namespace DigitalData.UserManager.Application.Services { public class UserService : BaseService, IUserService { private readonly IStringLocalizer _localizer; public UserService(IUserRepository repository, IStringLocalizer localizer, IMapper mapper) : base(repository, mapper) { _localizer = localizer; } public async Task>> ReadByModuleIdAsync(int moduleId) { var users = await _repository.ReadByModuleIdAsync(moduleId); IEnumerable readDTOs = _mapper.Map>(users); return Result.Success(readDTOs); } public async Task>> ReadByGroupIdAsync(int groupId) { var users = await _repository.ReadByGroupIdAsync(groupId); IEnumerable readDTOs = _mapper.Map>(users); return Result.Success(readDTOs); } public async Task>> ReadUnassignedByModuleIdAsync(int moduleId) { var users = await _repository.ReadUnassignedByModuleIdAsync(moduleId); IEnumerable readDTOs = _mapper.Map>(users); return Result.Success(readDTOs); } public async Task>> ReadUnassignedByGroupIdAsync(int groupId) { var users = await _repository.ReadUnassignedByGroupIdAsync(groupId); IEnumerable readDTOs = _mapper.Map>(users); return Result.Success(readDTOs); } public async Task> CreateAsync(UserPrincipalDto upDto) { var user = _mapper.Map(upDto); if (await HasEntity(user.Id)) return Result.Fail().Message(_localizer[Key.UserAlreadyExists]); //set the user var current_user = await GetUserAsync(); user.AddedWho = current_user?.Username ?? "UNAUTHORIZED"; var createdUser = await _repository.CreateAsync(user); if (createdUser is null) return Result.Fail(); else return Result.Success(createdUser.Id); } public async Task> ReadByUsernameAsync(string username) { var user = await _repository.ReadByUsernameAsync(username); if (user is null) return Result.Fail().Message(_localizer[Key.UserNotFoundInLocalDB]); var userDto = _mapper.Map(user); return Result.Success(userDto); } } }