package media import ( "errors" "net/http" "github.com/gin-gonic/gin" "github.com/go-admin-team/go-admin-core/sdk/api" coreService "github.com/go-admin-team/go-admin-core/sdk/service" ) type API struct{ api.Api } func (e *API) service(c *gin.Context) (*Service, error) { base := coreService.Service{} if err := e.MakeContext(c).MakeOrm().MakeService(&base).Errors; err != nil { return nil, err } return serviceFor(base.Orm), nil } func (e *API) List(c *gin.Context) { service, err := e.service(c) if err != nil { e.writeError(err) return } items, err := service.List(c.Request.Context()) if err != nil { e.writeError(err) return } e.OK(gin.H{"list": items, "total": len(items)}, "查询成功") } func (e *API) Process(c *gin.Context) { service, err := e.service(c) if err != nil { e.writeError(err) return } e.OK(service.ProcessState(), "查询成功") } func (e *API) ReconcileAll(c *gin.Context) { service, err := e.service(c) if err != nil { e.writeError(err) return } if err = service.EnsureAllVerified(c.Request.Context()); err == nil { err = service.ReconcileDue(c.Request.Context()) } if err != nil { e.writeError(err) return } e.OK(nil, "对账完成") } func (e *API) Reconcile(c *gin.Context) { service, err := e.service(c) if err != nil { e.writeError(err) return } item, err := service.Reconcile(c.Request.Context(), c.Param("id")) if err != nil && item.ID == "" { e.writeError(err) return } e.OK(item, "对账完成") } func (e *API) Stop(c *gin.Context) { service, err := e.service(c) if err != nil { e.writeError(err) return } item, err := service.StopRoute(c.Request.Context(), c.Param("id")) if err != nil { e.writeError(err) return } e.OK(item, "媒体路径已停止") } func (e *API) writeError(err error) { switch { case errors.Is(err, ErrNotFound): e.Error(http.StatusNotFound, err, err.Error()) case errors.Is(err, ErrRuntimeUnavailable), errors.Is(err, ErrUnsafeControlAPI): e.Error(http.StatusServiceUnavailable, err, "视频服务运行配置不可用") default: e.Error(http.StatusInternalServerError, err, "视频服务操作失败") } }