增加发布协议确认配置

This commit is contained in:
yml2213
2026-06-07 21:14:49 +08:00
parent 954c3d6be3
commit eebd2d3b04
19 changed files with 760 additions and 13 deletions
+3
View File
@@ -47,6 +47,9 @@ type CreateRequest struct {
ScreenshotURLS []string `json:"screenshot_urls"`
Price float64 `json:"price"`
DepositAmount float64 `json:"deposit_amount"`
AgreedVirtualAssetSale bool `json:"agreed_virtual_asset_sale"`
AgreedSellerAgreement bool `json:"agreed_seller_agreement"`
}
type UpdateRequest = CreateRequest
@@ -577,6 +577,8 @@ func writeListingError(c *gin.Context, err error) {
response.BadRequest(c, "哈夫币数量不正确")
case errors.Is(err, ErrMissingScreenshot):
response.BadRequest(c, "请至少上传一张账号截图")
case errors.Is(err, ErrAgreementRequired):
response.BadRequest(c, "请先阅读并同意发布协议")
case errors.Is(err, ErrMissingUploaderName):
response.BadRequest(c, "上传人名称不能为空")
case errors.Is(err, ErrMissingUploadData):
@@ -22,6 +22,7 @@ var (
ErrDepositTooLow = errors.New("listing deposit too low")
ErrInvalidHafCoin = errors.New("invalid haf coin amount")
ErrMissingScreenshot = errors.New("missing screenshot")
ErrAgreementRequired = errors.New("listing publish agreement required")
ErrMissingUploaderName = errors.New("missing uploader name")
ErrMissingUploadData = errors.New("missing upload data")
ErrUploaderNotFound = errors.New("uploader not found")
@@ -80,6 +81,9 @@ func (s *Service) Create(ownerID uint64, req CreateRequest) (*ListingDTO, error)
if s.repo == nil {
return nil, ErrDependencyUnavailable
}
if !req.AgreedVirtualAssetSale || !req.AgreedSellerAgreement {
return nil, ErrAgreementRequired
}
rules, err := s.publishRules()
if err != nil {
return nil, err
@@ -58,6 +58,15 @@ func TestValidateRequestRequiresDepositAboveConsumables(t *testing.T) {
}
}
func TestCreateRequiresPublishAgreements(t *testing.T) {
service := NewService(&Repository{}, nil)
_, err := service.Create(1, CreateRequest{})
if err != ErrAgreementRequired {
t.Fatalf("expected ErrAgreementRequired, got %v", err)
}
}
func TestApplySellerListingPriceUsesSellerTotalPrice(t *testing.T) {
item := &ListingDTO{
Price: 238,