Update order system with new gRPC services and wallet integration

This commit is contained in:
masoodafar-web
2025-11-28 05:12:55 +03:30
parent 973beb9e2f
commit d8e1fe77b3
20 changed files with 502 additions and 209 deletions
+53 -36
View File
@@ -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;
}
}