package main import ( "context" "embed" "net/http" "strings" commonHttp "video-factory/common/http" "video-factory/shortdrama/controller" "video-factory/shortdrama/service" _ "github.com/gogf/gf/contrib/drivers/sqlite/v2" "github.com/gogf/gf/v2/net/ghttp" ) //go:embed shortdrama/view/*.html var viewFS embed.FS func main() { // ==================== HTML 页面路由 ==================== servePage := func(name string) ghttp.HandlerFunc { return func(r *ghttp.Request) { data, err := viewFS.ReadFile("shortdrama/view/" + name) if err != nil { r.Response.WriteStatus(http.StatusNotFound) return } r.Response.Write(data) } } commonHttp.Httpserver.BindHandler("/", servePage("index.html")) commonHttp.Httpserver.BindHandler("/views/*", func(r *ghttp.Request) { name := strings.TrimPrefix(r.URL.Path, "/views/") if name == "" || !strings.HasSuffix(name, ".html") { r.Response.WriteStatus(http.StatusNotFound) return } servePage(name)(r) }) // ==================== API 路由(通过 RouteRegister 自动注册,遵循 ai-agent 规范) ==================== commonHttp.RouteRegister([]interface{}{ controller.Drama, controller.Config, }) // ==================== 静态文件服务(workspace 目录) ==================== commonHttp.Httpserver.AddStaticPath("/workspace", "workspace") // 启动时恢复未完成的视频生成轮询 service.DramaService.StartVideoPoller(context.Background()) // 保持运行 select {} }