// src/Webshop.Api/Controllers/Admin/AdminSuppliersController.cs using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Webshop.Application.DTOs; using Webshop.Application.Services.Admin; // Wichtig für IAdminSupplierService using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Webshop.Api.Controllers.Admin { [ApiController] [Route("api/v1/admin/[controller]")] [Authorize(Roles = "Admin")] public class AdminSuppliersController : ControllerBase { // Der Controller hängt vom Interface ab, nicht von der konkreten Klasse private readonly IAdminSupplierService _adminSupplierService; public AdminSuppliersController(IAdminSupplierService adminSupplierService) { _adminSupplierService = adminSupplierService; } [HttpGet] public async Task>> GetAllSuppliers() { var suppliers = await _adminSupplierService.GetAllSuppliersAsync(); return Ok(suppliers); } [HttpGet("{id:guid}")] public async Task> GetSupplierById(Guid id) { var supplier = await _adminSupplierService.GetSupplierByIdAsync(id); if (supplier == null) return NotFound(); return Ok(supplier); } [HttpPost] public async Task> CreateSupplier([FromBody] SupplierDto supplierDto) { if (supplierDto == null) return BadRequest("Supplier data is required."); if (!ModelState.IsValid) return BadRequest(ModelState); var createdSupplier = await _adminSupplierService.CreateSupplierAsync(supplierDto); return CreatedAtAction(nameof(GetSupplierById), new { id = createdSupplier.Id }, createdSupplier); } [HttpPut("{id:guid}")] public async Task UpdateSupplier(Guid id, [FromBody] SupplierDto supplierDto) { if (id != supplierDto.Id) return BadRequest("Mismatched ID in route and body."); if (!ModelState.IsValid) return BadRequest(ModelState); var success = await _adminSupplierService.UpdateSupplierAsync(id, supplierDto); if (!success) return NotFound(); return NoContent(); // Standardantwort für erfolgreiches Update } [HttpDelete("{id:guid}")] public async Task DeleteSupplier(Guid id) { var success = await _adminSupplierService.DeleteSupplierAsync(id); if (!success) return NotFound(); return NoContent(); // Standardantwort für erfolgreiches Löschen } } }