64 lines
1.8 KiB
Go
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)
|
|
}
|
|
}
|