feat: tenant-scoped routing and portal navigation

This commit is contained in:
2026-01-08 21:30:46 +08:00
parent f3aa92078a
commit 3e095c57f3
52 changed files with 1111 additions and 670 deletions

View File

@@ -39,6 +39,7 @@ func Test_Order(t *testing.T) {
func (s *OrderTestSuite) Test_PurchaseFlow() {
Convey("Purchase Flow", s.T(), func() {
ctx := s.T().Context()
tenantID := int64(0)
database.Truncate(ctx, s.DB,
models.TableNameOrder, models.TableNameOrderItem, models.TableNameUser,
models.TableNameContent, models.TableNameContentPrice, models.TableNameTenant,
@@ -57,6 +58,7 @@ func (s *OrderTestSuite) Test_PurchaseFlow() {
Status: consts.TenantStatusVerified,
}
models.TenantQuery.WithContext(ctx).Create(tenant)
tenantID = tenant.ID
// Content
content := &models.Content{
TenantID: tenant.ID,
@@ -83,7 +85,7 @@ func (s *OrderTestSuite) Test_PurchaseFlow() {
Convey("should create and pay order successfully", func() {
// Step 1: Create Order
form := &order_dto.OrderCreateForm{ContentID: content.ID}
createRes, err := Order.Create(ctx, buyer.ID, form)
createRes, err := Order.Create(ctx, tenantID, buyer.ID, form)
So(err, ShouldBeNil)
So(createRes.OrderID, ShouldNotBeEmpty)
@@ -95,7 +97,7 @@ func (s *OrderTestSuite) Test_PurchaseFlow() {
// Step 2: Pay Order
payForm := &order_dto.OrderPayForm{Method: "balance"}
_, err = Order.Pay(ctx, buyer.ID, createRes.OrderID, payForm)
_, err = Order.Pay(ctx, tenantID, buyer.ID, createRes.OrderID, payForm)
So(err, ShouldBeNil)
// Verify Order Paid
@@ -130,11 +132,11 @@ func (s *OrderTestSuite) Test_PurchaseFlow() {
Update(models.UserQuery.Balance, 500)
form := &order_dto.OrderCreateForm{ContentID: content.ID}
createRes, err := Order.Create(ctx, buyer.ID, form)
createRes, err := Order.Create(ctx, tenantID, buyer.ID, form)
So(err, ShouldBeNil)
payForm := &order_dto.OrderPayForm{Method: "balance"}
_, err = Order.Pay(ctx, buyer.ID, createRes.OrderID, payForm)
_, err = Order.Pay(ctx, tenantID, buyer.ID, createRes.OrderID, payForm)
So(err, ShouldNotBeNil)
// Error should be QuotaExceeded or similar
})
@@ -144,6 +146,7 @@ func (s *OrderTestSuite) Test_PurchaseFlow() {
func (s *OrderTestSuite) Test_OrderDetails() {
Convey("Order Details", s.T(), func() {
ctx := s.T().Context()
tenantID := int64(0)
database.Truncate(
ctx,
s.DB,
@@ -164,6 +167,7 @@ func (s *OrderTestSuite) Test_OrderDetails() {
models.UserQuery.WithContext(ctx).Create(creator)
tenant := &models.Tenant{UserID: creator.ID, Name: "Best Shop", Status: consts.TenantStatusVerified}
models.TenantQuery.WithContext(ctx).Create(tenant)
tenantID = tenant.ID
content := &models.Content{
TenantID: tenant.ID,
UserID: creator.ID,
@@ -199,13 +203,14 @@ func (s *OrderTestSuite) Test_OrderDetails() {
// Create & Pay
createRes, _ := Order.Create(
ctx,
tenantID,
buyer.ID,
&order_dto.OrderCreateForm{ContentID: content.ID},
)
Order.Pay(ctx, buyer.ID, createRes.OrderID, &order_dto.OrderPayForm{Method: "balance"})
Order.Pay(ctx, tenantID, buyer.ID, createRes.OrderID, &order_dto.OrderPayForm{Method: "balance"})
// Get Detail
detail, err := Order.GetUserOrder(ctx, buyer.ID, createRes.OrderID)
detail, err := Order.GetUserOrder(ctx, tenantID, buyer.ID, createRes.OrderID)
So(err, ShouldBeNil)
So(detail.TenantName, ShouldEqual, "Best Shop")
So(len(detail.Items), ShouldEqual, 1)
@@ -219,6 +224,7 @@ func (s *OrderTestSuite) Test_OrderDetails() {
func (s *OrderTestSuite) Test_PlatformCommission() {
Convey("Platform Commission", s.T(), func() {
ctx := s.T().Context()
tenantID := int64(0)
database.Truncate(
ctx,
s.DB,
@@ -236,6 +242,7 @@ func (s *OrderTestSuite) Test_PlatformCommission() {
// Tenant
t := &models.Tenant{UserID: creator.ID, Name: "Shop C", Status: consts.TenantStatusVerified}
models.TenantQuery.WithContext(ctx).Create(t)
tenantID = t.ID
// Buyer
buyer := &models.User{Username: "buyer_c", Balance: 2000}
models.UserQuery.WithContext(ctx).Create(buyer)
@@ -253,7 +260,7 @@ func (s *OrderTestSuite) Test_PlatformCommission() {
Convey("should deduct 10% fee", func() {
payForm := &order_dto.OrderPayForm{Method: "balance"}
_, err := Order.Pay(ctx, buyer.ID, o.ID, payForm)
_, err := Order.Pay(ctx, tenantID, buyer.ID, o.ID, payForm)
So(err, ShouldBeNil)
// Verify Creator Balance (1000 - 10% = 900)
@@ -270,6 +277,7 @@ func (s *OrderTestSuite) Test_PlatformCommission() {
func (s *OrderTestSuite) Test_ExternalPayment() {
Convey("External Payment", s.T(), func() {
ctx := s.T().Context()
tenantID := int64(0)
database.Truncate(
ctx,
s.DB,
@@ -287,6 +295,7 @@ func (s *OrderTestSuite) Test_ExternalPayment() {
// Tenant
t := &models.Tenant{UserID: creator.ID, Name: "Shop Ext", Status: consts.TenantStatusVerified}
models.TenantQuery.WithContext(ctx).Create(t)
tenantID = t.ID
// Buyer (Balance 0)
buyer := &models.User{Username: "buyer_ext", Balance: 0}
models.UserQuery.WithContext(ctx).Create(buyer)
@@ -302,7 +311,7 @@ func (s *OrderTestSuite) Test_ExternalPayment() {
models.OrderItemQuery.WithContext(ctx).Create(&models.OrderItem{OrderID: o.ID, ContentID: 999})
Convey("should process external payment callback", func() {
err := Order.ProcessExternalPayment(ctx, o.ID, "ext_tx_id_123")
err := Order.ProcessExternalPayment(ctx, tenantID, o.ID, "ext_tx_id_123")
So(err, ShouldBeNil)
// Verify Status