Update order system with new gRPC services and wallet integration
This commit is contained in:
@@ -1,47 +1,64 @@
|
||||
using FrontOffice.BFF.UserOrder.Protobuf.Protos.UserOrder;
|
||||
|
||||
namespace FrontOffice.Main.Utilities;
|
||||
|
||||
public enum PaymentMethod
|
||||
{
|
||||
Wallet = 1,
|
||||
}
|
||||
// public enum PaymentMethod
|
||||
// {
|
||||
// Wallet = 1,
|
||||
// }
|
||||
//
|
||||
// public enum OrderStatus
|
||||
// {
|
||||
// Pending = 0,
|
||||
// Paid = 1,
|
||||
// }
|
||||
|
||||
public enum OrderStatus
|
||||
{
|
||||
Pending = 0,
|
||||
Paid = 1,
|
||||
}
|
||||
|
||||
public record OrderItem(long ProductId, string Title, string ImageUrl, long UnitPrice, int Quantity)
|
||||
{
|
||||
public long LineTotal => UnitPrice * Quantity;
|
||||
}
|
||||
|
||||
public class Order
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public DateTime CreatedAt { get; set; } = DateTime.Now;
|
||||
public OrderStatus Status { get; set; } = OrderStatus.Pending;
|
||||
public PaymentMethod PaymentMethod { get; set; } = PaymentMethod.Wallet;
|
||||
public long AddressId { get; set; }
|
||||
public string AddressSummary { get; set; } = string.Empty;
|
||||
public List<OrderItem> Items { get; set; } = new();
|
||||
public long Total => Items.Sum(i => i.LineTotal);
|
||||
}
|
||||
// public record OrderItem(long ProductId, string Title, string ImageUrl, long UnitPrice, int Quantity)
|
||||
// {
|
||||
// public long LineTotal => UnitPrice * Quantity;
|
||||
// }
|
||||
//
|
||||
// public class Order
|
||||
// {
|
||||
// public long Id { get; set; }
|
||||
// public DateTime CreatedAt { get; set; } = DateTime.Now;
|
||||
// public OrderStatus Status { get; set; } = OrderStatus.Pending;
|
||||
// public PaymentMethod PaymentMethod { get; set; } = PaymentMethod.Wallet;
|
||||
// public long AddressId { get; set; }
|
||||
// public string AddressSummary { get; set; } = string.Empty;
|
||||
// public List<OrderItem> Items { get; set; } = new();
|
||||
// public long Total => Items.Sum(i => i.LineTotal);
|
||||
// }
|
||||
|
||||
public class OrderService
|
||||
{
|
||||
private long _seq = 1000;
|
||||
private readonly List<Order> _orders = new();
|
||||
private readonly List<GetUserOrderResponse> _orders = new();
|
||||
private readonly UserOrderContract.UserOrderContractClient _userOrderContractClient;
|
||||
|
||||
public Task<List<Order>> GetOrdersAsync() => Task.FromResult(_orders.OrderByDescending(o => o.CreatedAt).ToList());
|
||||
|
||||
public Task<Order?> GetOrderAsync(long id) => Task.FromResult(_orders.FirstOrDefault(o => o.Id == id));
|
||||
|
||||
public Task<long> CreateOrderAsync(Order order)
|
||||
public OrderService(UserOrderContract.UserOrderContractClient userOrderContractClient)
|
||||
{
|
||||
order.Id = Interlocked.Increment(ref _seq);
|
||||
_orders.Add(order);
|
||||
return Task.FromResult(order.Id);
|
||||
_userOrderContractClient = userOrderContractClient;
|
||||
}
|
||||
}
|
||||
|
||||
public Task<List<GetUserOrderResponse>> GetOrdersAsync()
|
||||
{
|
||||
return Task.FromResult(_orders.OrderByDescending(o => o.PaymentDate).ToList());
|
||||
}
|
||||
|
||||
public async Task<GetUserOrderResponse?> GetOrderAsync(long id)
|
||||
{
|
||||
var order = _orders.FirstOrDefault(o => o.Id == id);
|
||||
if (order == null)
|
||||
{
|
||||
var result = await _userOrderContractClient.GetUserOrderAsync(new GetUserOrderRequest()
|
||||
{
|
||||
Id = id
|
||||
});
|
||||
_orders.Add(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
return order;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user