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

86 lines
2.2 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 CreateValidationRequest struct {
AssetID string `json:"asset_id"`
RequestID string `json:"request_id"`
ValidationType string `json:"validation_type"`
}
func (req *CreateValidationRequest) Bind(_ *http.Request) error {
return nil
}
type ListPageQuery struct {
Limit int32 `schema:"limit"`
Offset int32 `schema:"offset"`
OrderStatus string `schema:"order_status"`
}
func CreateValidation(svc service.ValidationService) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
req := &CreateValidationRequest{}
if err := render.Bind(r, req); err != nil {
renderServiceError(w, r, service.NewValidationError("request data error: "+err.Error()))
return
}
result, err := svc.CreateValidation(r.Context(), service.ValidationCreateInput{
AssetID: req.AssetID,
RequestID: req.RequestID,
ValidationType: req.ValidationType,
})
if err != nil {
renderServiceError(w, r, err)
return
}
renderSuccess(w, r, http.StatusCreated, "验证申请提交成功", result)
}
}
func GetValidation(svc service.ValidationService) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
result, err := svc.GetValidation(r.Context(), chi.URLParam(r, "id"))
if err != nil {
renderServiceError(w, r, err)
return
}
renderSuccess(w, r, http.StatusOK, "success", result)
}
}
func ListValidations(svc service.ValidationService) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var query ListPageQuery
if err := decoder.Decode(&query, r.URL.Query()); err != nil {
renderServiceError(w, r, service.NewValidationError("request data error: "+err.Error()))
return
}
result, err := svc.ListValidations(r.Context(), service.ValidationListInput{
Limit: query.Limit,
Offset: query.Offset,
})
if err != nil {
renderServiceError(w, r, err)
return
}
renderSuccess(w, r, http.StatusOK, "success", ListResponse[service.Validation]{
List: result.List,
Total: result.Total,
Limit: result.Limit,
Offset: result.Offset,
})
}
}