using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using OnProfNext.Server.Data; using OnProfNext.Shared.Models; using OnProfNext.Shared.Models.DTOs; namespace OnProfNext.Server.Controllers { [Route("api/[controller]")] [ApiController] [Authorize] public class OrdersController : ControllerBase { private readonly AppDbContext _context; public OrdersController(AppDbContext context) { _context = context; } //Get: api/orders/byproject/5 [HttpGet("byproject/{projectId}")] public async Task>> GetOrdersByProject(int projectId) { var orders = await _context.Orders .Where(o => o.ProjectId == projectId) .Select(o => new OrderDto { Id = o.Id, ProjectId = o.ProjectId, Auftragsnummer = o.Auftragsnummer, Titel = o.Titel, Status = o.Status, Planstunden = o.Planstunden, Iststunden = o.Iststunden, Projektcode = o.Projektcode, MandantId = o.MandantId, CreatedAt = o.CreatedAt, UpdatedAt = o.UpdatedAt }) .ToListAsync(); return Ok(orders); } //GET: api/orders/5 [HttpGet("{id}")] public async Task> GetOrder(int id) { var o = await _context.Orders.FindAsync(id); if (o == null) return NotFound(); return new OrderDto { Id = o.Id, ProjectId = o.ProjectId, Auftragsnummer = o.Auftragsnummer, Titel = o.Titel, Status = o.Status, Planstunden = o.Planstunden, Iststunden = o.Iststunden, Projektcode = o.Projektcode, MandantId = o.MandantId, CreatedAt = o.CreatedAt, UpdatedAt = o.UpdatedAt }; } //POST: api/orders [HttpPost] public async Task> CreateOrder(OrderDto dto) { var order = new Order { ProjectId = dto.ProjectId, Auftragsnummer = dto.Auftragsnummer, Titel = dto.Titel, Status = dto.Status, Planstunden = dto.Planstunden, Iststunden = dto.Iststunden, Projektcode = dto.Projektcode, MandantId = dto.MandantId, CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow }; _context.Orders.Add(order); await _context.SaveChangesAsync(); dto.Id = order.Id; dto.CreatedAt = order.CreatedAt; dto.UpdatedAt = order.UpdatedAt; return CreatedAtAction(nameof(GetOrder), new { id = order.Id }, dto); } //PUT: api/orders/5 [HttpPut("{id}")] public async Task UpdateOrder(int id, OrderDto dto) { var order = await _context.Orders.FindAsync(id); if (order == null) return NotFound(); order.Titel = dto.Titel; order.Status = dto.Status; order.Planstunden = dto.Planstunden; order.Iststunden = dto.Iststunden; order.Projektcode = dto.Projektcode; order.UpdatedAt = DateTime.UtcNow; await _context.SaveChangesAsync(); return NoContent(); } // DELETE: api/orders/5 [HttpDelete("{id}")] public async Task DeleteOrder(int id) { var order = await _context.Orders.FindAsync(id); if (order == null) return NotFound(); _context.Orders.Remove(order); await _context.SaveChangesAsync(); return NoContent(); } } }