Project/Project.Web/Controllers/RoleController.cs
2024-07-10 09:00:36 +02:00

124 lines
4.0 KiB
C#

using Microsoft.AspNetCore.Mvc;
using Project.Application.DTOs.Incoming;
using Project.Application.Interfaces;
namespace Project.Web.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class RoleController : ControllerBase
{
// FIELDS FOR CTOR
private readonly IRoleService _roleService;
// CTOR
public RoleController(IRoleService roleService)
{
_roleService = roleService;
}
// CREATE
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> CreateRole([FromBody] CreatingRoleDto creatingRoleDto)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
try
{
var result = await _roleService.AddRoleAsync(creatingRoleDto);
if (result != null)
{
var id = result.Id;
var createdResource = new { Id = id };
var actionName = nameof(GetRoleById);
var routeValue = new { id = createdResource.Id };
return CreatedAtAction(actionName, routeValue, createdResource);
}
else
{
return BadRequest("geht nix");
}
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
}
// READ ALL
[HttpGet]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> GetRoles()
{
var roles = await _roleService.GetAllAsync();
return Ok(roles);
}
// READ BY ID
[HttpGet("id/{id}", Name = "GetRoleById")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> GetRoleById(int id)
{
if (id <= 0)
{
return BadRequest("Invalid Id");
}
var role = await _roleService.GetByIdAsync(id);
if (role == null)
{
return NotFound();
}
return Ok(role);
}
// READ BY NAME
[HttpGet("name/{name}", Name = "GetRoleByName")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> GetRoleByName(string name)
{
if (string.IsNullOrEmpty(name))
{
return BadRequest("Name cannot be empty");
}
var role = await _roleService.GetByNameAsync(name);
if (role == null)
{
return NotFound();
}
return Ok(role);
}
// UPDATE
[HttpPut("id/{id}", Name = "UpdateRole")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> UpdateRole(int id, UpdatingRoleDto updatingRoleDto)
{
var updated = await _roleService.UpdateRoleAsync(updatingRoleDto);
return Ok(updated);
}
// DELETE
[HttpDelete("id/{id}", Name = "DeleteRole")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> DeleteRole([FromRoute] int id)
{
await _roleService.DeleteRoleAsync(id);
return Ok();
}
}
}