OnProfNext/OnProfNext.Server/Controllers/OrdersController.cs
2025-10-15 13:29:50 +02:00

130 lines
4.2 KiB
C#

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<ActionResult<IEnumerable<OrderDto>>> 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<ActionResult<OrderDto>> 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<ActionResult<OrderDto>> 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<IActionResult> 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<IActionResult> DeleteOrder(int id)
{
var order = await _context.Orders.FindAsync(id);
if (order == null) return NotFound();
_context.Orders.Remove(order);
await _context.SaveChangesAsync();
return NoContent();
}
}
}