43 lines
1.1 KiB
Go
43 lines
1.1 KiB
Go
package handler
|
||
|
||
import (
|
||
"fmt"
|
||
"net/http"
|
||
|
||
"silk-server-go/internal/middleware"
|
||
"silk-server-go/internal/model"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
// RegisterAlarmClipRoutes 注册告警视频片段路由
|
||
func RegisterAlarmClipRoutes(rg *gin.RouterGroup, db *gorm.DB) {
|
||
rg.GET("/alarms/:id/clip", middleware.RequirePermission(db, "alarm:read"), getAlarmClip(db))
|
||
}
|
||
|
||
// getAlarmClip 获取告警关联视频片段(查 video_clips 表 where alarm_id=:id,按 start_at DESC)
|
||
func getAlarmClip(db *gorm.DB) gin.HandlerFunc {
|
||
return func(c *gin.Context) {
|
||
id := c.Param("id")
|
||
|
||
// 先检查告警是否存在
|
||
var alarm model.Alarm
|
||
if db.Where("id = ?", id).First(&alarm).Error != nil {
|
||
c.JSON(http.StatusNotFound, gin.H{"error": "alarm not found"})
|
||
return
|
||
}
|
||
|
||
var clips []model.VideoClip
|
||
db.Where("alarm_id = ?", id).Order("start_at DESC").Find(&clips)
|
||
|
||
// 为每个片段设置 playbackUrl
|
||
for i := range clips {
|
||
url := fmt.Sprintf("/api/v1/video/clips/%d/stream", clips[i].ID)
|
||
clips[i].PlaybackURL = &url
|
||
}
|
||
|
||
c.JSON(http.StatusOK, clips)
|
||
}
|
||
}
|