namespace TCM_API.Services; using Microsoft.EntityFrameworkCore; using TCM_API.Authorization; using TCM_API.Entities; using TCM_API.Models; public interface IUserService { AuthenticateResponse? Authenticate(AuthenticateRequest model); IEnumerable GetAll(); User? GetById(int id); } public class UserService : IUserService { /* // users hardcoded for simplicity, store in a db with hashed passwords in production applications private List user_test = new List { new User { Id = 1, FirstName = "Test", LastName = "User", Username = "test", Password = "test" }, new User { Id = 2, FirstName = "Test", LastName = "User", Username = "admin", Password = "admin" } }; public DbSet user_test { get; set; } = null!; public List GetUsers () { return _dbContext.user_test.ToList(); } */ private readonly IJwtUtils _jwtUtils; public UserService(IJwtUtils jwtUtils, SqlContext dbContext) { _jwtUtils = jwtUtils; _dbContext = dbContext; } private readonly SqlContext _dbContext; public AuthenticateResponse? Authenticate(AuthenticateRequest model) { var user = _dbContext.user_table.SingleOrDefault( x => (x.username == model.Username || x.email == model.Username) && x.password == model.Password); // return null if user not found if (user == null ) return null; if (!int.TryParse(user.level, out int level) || level % 2 != 0) { return null; } // authentication successful so generate jwt token var token = _jwtUtils.GenerateJwtToken(user); return new AuthenticateResponse(user, token); } public IEnumerable GetAll() { return _dbContext.user_table; } public User? GetById(int id) { return _dbContext.user_table.FirstOrDefault(x => x.id == id); } }