fix(distribution): 修正商品归属回填、禁止全站灌货并拒绝无效站点头

用货架写入时间与上传来源回滚误标产地,不再依赖绝对时间戳;同步仅收本站上传与显式勾选。
This commit is contained in:
yml2213
2026-09-08 17:30:12 +08:00
parent 96bc6a4db6
commit 31bf6dd3b6
15 changed files with 287 additions and 84 deletions
@@ -891,6 +891,14 @@ func TestCreateListingWithDistributionSiteCode(t *testing.T) {
t.Fatalf("expected enabled, got %s", dsa.DisplayStatus)
}
var stored model.RentalListing
if err := db.First(&stored, dto.ID).Error; err != nil {
t.Fatalf("load listing: %v", err)
}
if stored.SourceChannel != site.SiteCode {
t.Fatalf("stored source_channel = %q, want %q", stored.SourceChannel, site.SiteCode)
}
// 验证审核工作台列表展示分销站来源
pending, err := repo.ListPendingReview(context.Background())
if err != nil {
@@ -904,6 +912,43 @@ func TestCreateListingWithDistributionSiteCode(t *testing.T) {
}
}
func TestCreateListingInvalidDistributionSiteCode(t *testing.T) {
db := database.NewTestDB()
if err := database.MigrateListingLifecycleTestSchema(db); err != nil {
t.Fatalf("migrate err: %v", err)
}
repo := NewRepository(db, nil)
user := model.User{Phone: "18800000011", Nickname: "分销卖家", RealnameStatus: "verified", Status: "active"}
db.Create(&user)
inactive := model.DistributionSite{
SiteCode: "dist_inactive",
SiteName: "已停用分销站",
Domain: "inactive.example.com",
Status: "disabled",
DisplayAccountEnabled: true,
}
db.Create(&inactive)
req := CreateRequest{Title: "无效站点商品", ServerRegion: "QQ", LoginPlatform: "PC", PriceCent: 1000}
if _, err := repo.Create(context.Background(), user.ID, req, true, 0, "does_not_exist"); !errors.Is(err, ErrDistributionSiteInvalid) {
t.Fatalf("unknown site err = %v, want ErrDistributionSiteInvalid", err)
}
if _, err := repo.Create(context.Background(), user.ID, req, true, 0, "dist_inactive"); !errors.Is(err, ErrDistributionSiteInvalid) {
t.Fatalf("inactive site err = %v, want ErrDistributionSiteInvalid", err)
}
var count int64
if err := db.Model(&model.RentalListing{}).Count(&count).Error; err != nil {
t.Fatal(err)
}
if count != 0 {
t.Fatalf("invalid site must not create listing, got %d", count)
}
}
func TestListMineSiteIsolation(t *testing.T) {
db := database.NewTestDB()
if err := database.MigrateListingLifecycleTestSchema(db); err != nil {