190 lines
5.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Server;
using MyCore.Interfaces.Models;
using MyCore.Service.Services;
using MyCore.Services;
using MyCore.Interfaces.DTO;
namespace MyCore.Controllers
{
[Authorize] // TODO Add ROLES (Roles = "Admin")
[Route("api/user")]
[ApiController]
public class UserController : ControllerBase
{
private UserDatabaseService _userService;
private TokensService _tokenService;
public UserController(UserDatabaseService userService, TokensService tokenService)
{
_userService = userService;
_tokenService = tokenService;
}
// GET api/user
/// <summary>
/// Get a list of user
/// </summary>
[ProducesResponseType(typeof(List<UserInfo>), 200)]
[HttpGet]
public ObjectResult Get()
{
try
{
List<UserInfo> users = _userService.GetAll();
return new OkObjectResult(users);
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
// GET api/user/5
/// <summary>
/// Get a specific user
/// </summary>
/// <param name="id">id user</param>
[ProducesResponseType(typeof(UserInfoDetailDTO), 200)]
[HttpGet("{id}")]
public ObjectResult Get(string id)
{
try
{
// TODO ! Add object id verification
UserInfo user = _userService.GetById(id);
if (user == null)
{
return Conflict("This user was not found");
}
return new OkObjectResult(user.ToDTO());
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
// POST: User/Create
/// <summary>
///
/// </summary>
[AllowAnonymous]
[ProducesResponseType(typeof(UserInfoDetailDTO), 200)]
[HttpPost]
public ObjectResult CreateUser([FromBody] UserInfo newUser)
{
try
{
if (newUser != null)
{
newUser.Token = _tokenService.GenerateToken(newUser.Email).ToString();
newUser.DateCreation = DateTime.Now;
List<UserInfo> users = _userService.GetAll();
if (users.Select(u => u.Email).Contains(newUser.Email))
{
return Conflict("This Email is already used");
}
UserInfo userCreated = _userService.Create(newUser);
return new OkObjectResult(userCreated.ToDTO());
}
else {
// TODO
return new ObjectResult("An error has occurred") { StatusCode = 500 };
}
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
// PUT: User/Update
/// <summary>
///
/// </summary>
[ProducesResponseType(typeof(UserInfoDetailDTO), 200)]
[HttpPut]
public ObjectResult UpdateUser([FromBody] UserInfo updatedUser)
{
try
{
// TODO ! Add object id verification
if (updatedUser != null)
{
UserInfo user = _userService.GetById(updatedUser.Id);
if (user != null)
{
return NotFound("The user was not found");
}
UserInfo userModified = _userService.Update(updatedUser.Id, updatedUser);
return new OkObjectResult(userModified.ToDTO());
}
else {
// TODO
return new ObjectResult("An error has occurred") { StatusCode = 500 };
}
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
// DELETE: User/Delete
[HttpDelete("{id}")]
public ObjectResult DeleteUser(string id)
{
try
{
// TODO ! Add object id verification
if (id != null)
{
UserInfo user = _userService.GetById(id);
if (user != null)
{
return NotFound("The user was not found");
}
_userService.Remove(id);
return Accepted("The user has been deleted");
}
else
{
// TODO
return new ObjectResult("An error has occurred") { StatusCode = 500 };
}
}
catch (Exception ex)
{
return new ObjectResult(ex.Message) { StatusCode = 500 };
}
}
}
}