104 lines
3.1 KiB
C#
104 lines
3.1 KiB
C#
using GradeBookServer.Application.Common.Authentication;
|
|
using GradeBookServer.Application.DTOs.User;
|
|
using GradeBookServer.Application.Interfaces;
|
|
using GradeBookServer.Domain.Entities;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace GradeBookServer.Application.Services
|
|
{
|
|
public class UserService
|
|
{
|
|
private readonly IUserRepository _repository;
|
|
private readonly JwtTokenGenerator _tokenGenerator;
|
|
|
|
public UserService(IUserRepository repository, JwtTokenGenerator tokenGenerator)
|
|
{
|
|
_repository = repository;
|
|
_tokenGenerator = tokenGenerator;
|
|
}
|
|
|
|
public async Task<UserReadDto?> AuthenticateAsync(UserLoginDto loginDto)
|
|
{
|
|
var user = await _repository.GetByLoginAsync(loginDto.Login);
|
|
|
|
if (user == null || user.Password != loginDto.Password)
|
|
return null;
|
|
|
|
return new UserReadDto
|
|
{
|
|
ID = user.ID,
|
|
Name = user.Name,
|
|
Email = user.Email,
|
|
PhoneNumber = user.PhoneNumber,
|
|
Role = user.Role
|
|
};
|
|
}
|
|
|
|
public async Task<UserReadDto?> GetCurrentUserAsync(int userId)
|
|
{
|
|
var user = await _repository.GetByIdAsync(userId);
|
|
if (user == null)
|
|
return null;
|
|
|
|
return new UserReadDto
|
|
{
|
|
ID = user.ID,
|
|
Name = user.Name,
|
|
Email = user.Email,
|
|
PhoneNumber = user.PhoneNumber,
|
|
Role = user.Role
|
|
};
|
|
}
|
|
|
|
public async Task<List<UserReadDto>> GetTeachersAsync()
|
|
{
|
|
var teachers = await _repository.GetTeachersAsync();
|
|
return teachers.Select(u => new UserReadDto
|
|
{
|
|
ID = u.ID,
|
|
Name = u.Name,
|
|
Email = u.Email,
|
|
PhoneNumber = u.PhoneNumber,
|
|
Role = u.Role
|
|
}).ToList();
|
|
}
|
|
|
|
public async Task<UserReadDto?> ValidateCredentialsAsync(string login, string password)
|
|
{
|
|
var user = await _repository.GetByLoginAsync(login);
|
|
|
|
if (user == null || user.Password != password)
|
|
return null;
|
|
|
|
return new UserReadDto
|
|
{
|
|
ID = user.ID,
|
|
Name = user.Name,
|
|
Email = user.Email,
|
|
PhoneNumber = user.PhoneNumber,
|
|
Role = user.Role
|
|
};
|
|
}
|
|
|
|
public async Task<TokenDto?> GenerateToken(int userID)
|
|
{
|
|
var user = await _repository.GetByIdAsync(userID);
|
|
|
|
if (user == null)
|
|
return null;
|
|
|
|
var token = _tokenGenerator.GenerateToken(user);
|
|
|
|
return (new TokenDto
|
|
{
|
|
Token = token,
|
|
User = new UserReadDto { ID = user.ID, Name = user.Name, Email = user.Email, PhoneNumber = user.PhoneNumber, Role = user.Role }
|
|
});
|
|
}
|
|
}
|
|
}
|