Project/Project.Web/Controllers/ProductController.cs
2024-06-28 15:15:15 +02:00

125 lines
4.2 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Project.Application.DTOs.Incoming;
using Project.Application.Interfaces;
using Project.Application.Services;
using System.Security.Claims;
namespace Project.Web.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ProductController : ControllerBase
{
// FIELDS FOR CTOR
private readonly IProductService _productService;
// CTOR
public ProductController(IProductService productService)
{
_productService = productService;
}
// CREATE
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> CreateProduct([FromBody] CreatingProductDto creatingProductDto) // with form body
{
var result = await _productService.AddProductAsync(creatingProductDto);
if (result != null)
{
var id = result.Id;
var createdResource = new { Id = id };
var actionName = nameof(GetProductById);
var routeValue = new { id = createdResource.Id };
return CreatedAtAction(actionName, routeValue, createdResource);
}
else
{
return BadRequest("geht nix");
}
}
// READ ALL
[Authorize(Roles ="Admin")]
[HttpGet]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> GetProducts()
{
var products = await _productService.GetAllAsync();
return Ok(products);
}
public async Task<IActionResult> GetProducts()
{
var id = User.FindFirst(ClaimTypes.NameIdentifier);
var products = await _productService.getproductbyuserid(id);
return Ok(products);
}
// READ BY ID
[HttpGet("id/{id}", Name = "GetProductById")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> GetProductById(int id)
{
if (id <= 0)
{
return BadRequest("Invalid Id");
}
var product = await _productService.GetByIdAsync(id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}
// READ BY NAME
[HttpGet("name/{name}", Name = "GetProductByName")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> GetProductByName(string name)
{
if (string.IsNullOrEmpty(name))
{
return BadRequest("Name cannot be empty");
}
var product = await _productService.GetByNameAsync(name);
if (product == null)
{
return NotFound();
}
return Ok(product);
}
// UPDATE
[HttpPut("id/{id}", Name = "UpdateProduct")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> UpdateProduct(int id, UpdatingProductDto updatingProductDto)
{
var updated = await _productService.UpdateProductAsync(updatingProductDto);
return Ok(updated);
}
// DELETE
[HttpDelete("id/{id}", Name = "DeleteProduct")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> DeleteProduct([FromRoute] int id)
{
await _productService.DeleteProductAsync(id);
return Ok();
}
}
}