85 lines
2.5 KiB
C#
85 lines
2.5 KiB
C#
// все про заказы
|
||
using DEMO.Data; // база
|
||
using DEMO.Models; // заказы
|
||
using Microsoft.AspNetCore.Mvc; // контроллер
|
||
using Microsoft.EntityFrameworkCore; // база
|
||
|
||
namespace DEMO.Controllers;
|
||
|
||
[ApiController] // это api
|
||
[Route("api/[controller]")] // адрес будет api/orders
|
||
public class OrdersController : ControllerBase
|
||
{
|
||
private readonly AppDbContext _context; // база
|
||
|
||
// запоминаю базу
|
||
public OrdersController(AppDbContext context)
|
||
{
|
||
_context = context;
|
||
}
|
||
|
||
// отдать все заказы
|
||
[HttpGet]
|
||
public async Task<IActionResult> GetOrders()
|
||
{
|
||
// беру заказы и кто их сделал
|
||
var orders = await _context.Orders
|
||
.Include(o => o.User)
|
||
.ToListAsync();
|
||
|
||
return Ok(orders);
|
||
}
|
||
|
||
// какие статусы можно ставить
|
||
private static readonly string[] OkStatuses = ["New", "Processing", "Completed", "Cancelled"];
|
||
|
||
// добавить заказ
|
||
[HttpPost]
|
||
public async Task<IActionResult> CreateOrder(Order order) // приходит человек дата статус
|
||
{
|
||
if (!OkStatuses.Contains(order.Status))
|
||
return BadRequest("Такого статуса нет.");
|
||
|
||
_context.Orders.Add(order); // добавляю
|
||
await _context.SaveChangesAsync(); // сохраняю
|
||
return Ok(order);
|
||
}
|
||
|
||
// изменить заказ
|
||
[HttpPut("{id}")]
|
||
public async Task<IActionResult> UpdateOrder(int id, Order order)
|
||
{
|
||
var existingOrder = await _context.Orders.FindAsync(id); // ищу старый
|
||
|
||
if (existingOrder == null)
|
||
return NotFound();
|
||
|
||
if (!OkStatuses.Contains(order.Status))
|
||
return BadRequest("Такого статуса нет.");
|
||
|
||
// меняю поля
|
||
existingOrder.UserId = order.UserId;
|
||
existingOrder.Date = order.Date;
|
||
existingOrder.Status = order.Status;
|
||
|
||
await _context.SaveChangesAsync(); // сохраняю
|
||
|
||
return Ok(existingOrder);
|
||
}
|
||
|
||
// удалить заказ
|
||
[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();
|
||
}
|
||
}
|