in src/ModernTacoShop/SubmitOrder/src/Services/SubmitOrderService.cs [47:90]
public override async Task<Empty> SubmitOrder(Order order, ServerCallContext serverCallContext)
{
try
{
var systemsManagementClient = new AmazonSimpleSystemsManagementClient();
if (string.IsNullOrEmpty(_tableName))
{
// The name of the table may vary, so get it from the Systems Manager Parameter Store.
var tableNameParameter = await systemsManagementClient.GetParameterAsync(
new GetParameterRequest { Name = "/ModernTacoShop/SubmitOrder/OrderTableName" });
_tableName = tableNameParameter.Parameter.Value;
}
var client = new AmazonDynamoDBClient();
var context = new DynamoDBContext(client);
var record = new SubmitOrderDynamoDbRecord(order);
await context.SaveAsync(record, new DynamoDBOperationConfig() { OverrideTableName = _tableName });
// Submit the order to the 'Track Order' service.
// First, get the domain name of the 'Track Order' service from the parameter store.
var trackOrderServiceDomainNameParameter = await systemsManagementClient.GetParameterAsync(
new GetParameterRequest { Name = "/ModernTacoShop/TrackOrder/DomainName" });
var trackOrderServiceDomainName = trackOrderServiceDomainNameParameter.Parameter.Value;
using var channel = GrpcChannel.ForAddress($"https://{trackOrderServiceDomainName}");
var trackOrderClient = new TrackOrder.Protos.TrackOrder.TrackOrderClient(channel);
var reply = await trackOrderClient.StartTrackingOrderAsync(new TrackOrder.Protos.Order
{
LastPosition = null,
LastUpdated = Timestamp.FromDateTime(DateTime.UtcNow),
OrderId = order.OrderId,
PlacedOn = order.PlacedOn,
Status = TrackOrder.Protos.OrderStatus.Placed
});
}
catch (Exception ex)
{
_logger.LogError(ex, "Error in SubmitOrder");
}
return new Empty();
}