99 lines
2.1 KiB
Go
99 lines
2.1 KiB
Go
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, "视频服务操作失败")
|
|
}
|
|
}
|