ldap-cesi/ldap-cesi/Services/UtilisateurService.cs

94 lines
3.2 KiB
C#

using AutoMapper;
using ldap_cesi.DTOs.Inputs;
using ldap_cesi.DTOs.Outputs.Utilisateur;
using ldap_cesi.Models;
using ldap_cesi.Repository.Services;
using ldap_cesi.Services.Interfaces;
using ldap_cesi.Validator.Utilisateur;
namespace ldap_cesi.Services;
public class UtilisateurService : IUtilisateurService
{
private readonly IRepositoryUtilisateur _repositoryUtilisateur;
private readonly IJwtService _jwtService;
private readonly IMapper _mapper;
public UtilisateurService(IRepositoryUtilisateur repositoryUtilisateur, IJwtService jwtService, IMapper mapper)
{
_repositoryUtilisateur = repositoryUtilisateur;
_jwtService = jwtService;
_mapper = mapper;
}
public async Task<IResponseDataModel<List<UtilisateurOutputDto>>> GetAll()
{
var utilisateurs = await _repositoryUtilisateur.GetAllAsync(1,10);
var utilisateursOutputDto = _mapper.Map<List<UtilisateurOutputDto>>(utilisateurs);
return new ResponseDataModel<List<UtilisateurOutputDto>>
{
Success = true,
StatusCode = 200,
Data = utilisateursOutputDto,
};
}
public async Task<IResponseDataModel<UtilisateurOutputDto>> GetById(int id)
{
var utililisateur = await _repositoryUtilisateur.GetByIdIncludeRoleAsync(id);
var utilisateurOutput = _mapper.Map<UtilisateurOutputDto>(utililisateur);
return new ResponseDataModel<UtilisateurOutputDto>
{
Success = true,
StatusCode = 200,
Data = utilisateurOutput,
};
}
public async Task<IResponseDataModel<UtilisateurOutputDto>> Login(UtilisateurLoginDto utilisateurInput)
{
var validation = new UtilisateurLoginValidator();
var result = validation.Validate(utilisateurInput);
if (!result.IsValid)
{
return new ResponseDataModel<UtilisateurOutputDto>
{
StatusCode = 400,
Success = false,
Message = "Données utilisateur invalides: " + string.Join(", ", result.Errors)
};
}
var utilisateur = await _repositoryUtilisateur.GetByEmailAsync(utilisateurInput.Email);
if (utilisateur == null)
{
return new ResponseDataModel<UtilisateurOutputDto>
{
Success = false,
StatusCode = 404,
Message = "Utilisateur non trouvé."
};
}
if (!BCrypt.Net.BCrypt.Verify(utilisateurInput.MotDePasse, utilisateur.MotDePasse))
{
return new ResponseDataModel<UtilisateurOutputDto>
{
Success = false,
StatusCode = 401,
Message = "Mot de passe incorrect."
};
}
var token = _jwtService.GenerateToken(utilisateur);
var utilisateurOutputDto = _mapper.Map<UtilisateurOutputDto>(utilisateur);
return new ResponseDataModel<UtilisateurOutputDto>
{
Success = true,
StatusCode = 200,
Data = utilisateurOutputDto,
Token = token,
Message = "Connexion réussie."
};
}
}