using CalendarReminder.Api.Data; using CalendarReminder.Api.Models; using CalendarReminder.Api.Services; using CalendarReminder.Domain.Entities; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace CalendarReminder.Api.Controllers; [ApiController] [Route("api/[controller]")] public class AuthController : ControllerBase { private readonly AppDbContext _db; private readonly TokenService _tokenService; public AuthController(AppDbContext db, TokenService tokenService) { _db = db; _tokenService = tokenService; } // POST api/auth/register [HttpPost("register")] public async Task Register(RegisterRequest req) { if (await _db.Users.AnyAsync(u => u.Email == req.Email)) return BadRequest("Email je už registrovaný."); if (await _db.Users.AnyAsync(u => u.Username == req.Username)) return BadRequest("Používateľské meno je obsadené."); var user = new User { Username = req.Username, Email = req.Email, PasswordHash = BCrypt.Net.BCrypt.HashPassword(req.Password) }; _db.Users.Add(user); await _db.SaveChangesAsync(); var token = _tokenService.GenerateToken(user); return Ok(new AuthResponse(token, user.Username, user.Email)); } // POST api/auth/login [HttpPost("login")] public async Task Login(LoginRequest req) { var user = await _db.Users.FirstOrDefaultAsync(u => u.Email == req.Email); if (user is null || !BCrypt.Net.BCrypt.Verify(req.Password, user.PasswordHash)) return Unauthorized("Nesprávny email alebo heslo."); var token = _tokenService.GenerateToken(user); return Ok(new AuthResponse(token, user.Username, user.Email)); } }