Files
datamarket/internal/handler/pricing.go
2026-04-01 17:05:08 +08:00

64 lines
1.8 KiB
Go

package handler
import (
"net/http"
"gitea.starryskymeow.cn/B309/datamarket/internal/service"
"github.com/go-chi/chi/v5"
"github.com/go-chi/render"
)
type CreatePricingRequest struct {
AssetID string `json:"asset_id"`
TaskType string `json:"task_type"`
ModelType string `json:"model_type"`
BuyerBudgetMin *float64 `json:"buyer_budget_min"`
BuyerBudgetMax *float64 `json:"buyer_budget_max"`
PrivacyRequirement *string `json:"privacy_requirement"`
UsagePurpose *string `json:"usage_purpose"`
RequestNote *string `json:"request_note"`
}
func (req *CreatePricingRequest) Bind(_ *http.Request) error {
return nil
}
func CreatePricing(svc service.PricingService) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
req := &CreatePricingRequest{}
if err := render.Bind(r, req); err != nil {
renderServiceError(w, r, service.NewValidationError("request data error: "+err.Error()))
return
}
result, err := svc.CreatePricing(r.Context(), service.PricingCreateInput{
AssetID: req.AssetID,
TaskType: req.TaskType,
ModelType: req.ModelType,
BuyerBudgetMin: req.BuyerBudgetMin,
BuyerBudgetMax: req.BuyerBudgetMax,
PrivacyRequirement: req.PrivacyRequirement,
UsagePurpose: req.UsagePurpose,
RequestNote: req.RequestNote,
})
if err != nil {
renderServiceError(w, r, err)
return
}
renderSuccess(w, r, http.StatusCreated, "定价建议生成成功", result)
}
}
func GetPricing(svc service.PricingService) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
result, err := svc.GetPricing(r.Context(), chi.URLParam(r, "id"))
if err != nil {
renderServiceError(w, r, err)
return
}
renderSuccess(w, r, http.StatusOK, "success", result)
}
}