using System; using System.Threading.Tasks; using AutoMapper; using DevHive.Data.Models; using DevHive.Data.Repositories; using DevHive.Services.Models.Identity.User; using DevHive.Services.Options; using DevHive.Services.Services; using DevHive.Web.Models.Identity.User; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace DevHive.Web.Controllers { [ApiController] [Route("/api/[controller]")] public class UserController: ControllerBase { private readonly UserService _userService; private readonly IMapper _userMapper; public UserController(DevHiveContext context, IMapper mapper, JWTOptions jwtOptions) { this._userService = new UserService(context, mapper, jwtOptions); this._userMapper = mapper; } [HttpPost] [Route("Login")] public async Task Login([FromBody] LoginWebModel loginModel) { LoginServiceModel loginServiceModel = this._userMapper.Map(loginModel); TokenServiceModel tokenServiceModel = await this._userService.LoginUser(loginServiceModel); TokenWebModel tokenWebModel = this._userMapper.Map(tokenServiceModel); return new OkObjectResult(tokenWebModel); } [HttpPost] [Route("Register")] public async Task Register([FromBody] RegisterWebModel registerModel) { RegisterServiceModel registerServiceModel = this._userMapper.Map(registerModel); UserServiceModel userServiceModel = await this._userService.RegisterUser(registerServiceModel); UserWebModel userWebModel = this._userMapper.Map(userServiceModel); return new CreatedResult("Register", userWebModel); } //Read [HttpGet] public async Task GetById(Guid id) { UserServiceModel userServiceModel = await this._userService.GetUserById(id); UserWebModel userWebModel = this._userMapper.Map(userServiceModel); return new OkObjectResult(userWebModel); } //Update [HttpPut] [Authorize(Roles = Role.DefaultRole)] public async Task Update(Guid id, [FromBody] UpdateUserWebModel updateModel) { UpdateUserServiceModel updateUserServiceModel = this._userMapper.Map(updateModel); updateUserServiceModel.Id = id; UserServiceModel userServiceModel = await this._userService.UpdateUser(updateUserServiceModel); UserWebModel userWebModel = this._userMapper.Map(userServiceModel); return new AcceptedResult("UpdateUser", userWebModel); } //Delete [HttpDelete] [Authorize(Roles = Role.DefaultRole)] public async Task Delete(Guid id) { await this._userService.DeleteUser(id); return new OkResult(); } } }