/
OrderController.cs
67 lines (56 loc) · 1.85 KB
/
OrderController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using Microsoft.AspNetCore.Mvc;
using SagaPattern.Models;
using SagaPattern.Repositories;
using SagaPattern.Saga.Messages;
namespace SagaPattern.Controllers
{
[ApiController]
[Route("[controller]")]
public class OrderController : ControllerBase
{
private readonly ILogger<OrderController> _logger;
private readonly IOrderRepository _repository;
private readonly IMessageSession _messageSession;
public OrderController(ILogger<OrderController> logger,
IOrderRepository repository,
IMessageSession messageSession)
{
_logger = logger;
_repository = repository;
_messageSession = messageSession;
}
[HttpGet(Name = "GetOrder")]
public async Task<ActionResult<Order>> Get(string orderId)
{
Guid orderGuid;
var validGuid = Guid.TryParse(orderId, out orderGuid);
if (validGuid)
{
var order = await _repository.GetOrderById(orderGuid);
return Ok(order);
}
return BadRequest();
}
[HttpPost(Name = "PostOrder")]
public async Task<ActionResult> Post([FromBody] OrderRequest request)
{
var order = MapToOrder(request);
await _repository.AddOrder(order);
var startOrderMessage = new StartOrder
{
OrderId = order.OrderId,
};
await _messageSession.Send(startOrderMessage);
return CreatedAtRoute("GetOrder", new { order.OrderId });
}
private Order MapToOrder(OrderRequest request)
{
return new Order
{
OrderId = Guid.NewGuid(),
Price = request.Price,
Status = OrderStatus.OrderCreated
};
}
}
}