yao/service/watch.go
Max 787954f0af Enhance OpenAPI Integration and API Routing
- Introduced support for OpenAPI mode, allowing dynamic routing and OAuth guards for API endpoints.
- Updated API root path handling to accommodate OpenAPI configurations, ensuring consistent URL structures.
- Added well-known routes for Yao metadata and OAuth discovery, improving API discoverability.
- Refactored middleware and guards to streamline OpenAPI integration, enhancing overall service functionality.
- Removed deprecated agent TypeScript file, simplifying the codebase and improving maintainability.
2026-01-04 15:46:09 +08:00

62 lines
1.6 KiB
Go

package service
import (
"fmt"
"strings"
"github.com/fatih/color"
"github.com/yaoapp/gou/application"
"github.com/yaoapp/gou/server/http"
"github.com/yaoapp/yao/config"
"github.com/yaoapp/yao/engine"
"github.com/yaoapp/yao/openapi"
)
// Watch the application code change for hot update
func Watch(srv *http.Server, interrupt chan uint8) (err error) {
if application.App == nil {
return fmt.Errorf("Application is not initialized")
}
return application.App.Watch(func(event, name string) {
if strings.Contains(event, "CHMOD") {
return
}
// Reload
err = engine.Reload(config.Conf, engine.LoadOption{Action: "watch"})
if err != nil {
fmt.Println(color.RedString("[Watch] Reload: %s", err.Error()))
return
}
fmt.Println(color.GreenString("[Watch] Reload Completed"))
// Model
if strings.HasPrefix(name, "/models") {
fmt.Println(color.GreenString("[Watch] Model: %s changed (Please run yao migrate manually)", name))
}
// API changes: hot reload or restart
if strings.HasPrefix(name, "/apis") {
if openapi.Server != nil {
// OpenAPI mode: hot reload (no server restart needed)
err = ReloadAPIs()
if err != nil {
fmt.Println(color.RedString("[Watch] Reload APIs: %s", err.Error()))
return
}
fmt.Println(color.GreenString("[Watch] APIs Reloaded"))
} else {
// Traditional mode: restart server
err = Restart(srv, config.Conf)
if err != nil {
fmt.Println(color.RedString("[Watch] Restart: %s", err.Error()))
return
}
fmt.Println(color.GreenString("[Watch] Restart Completed"))
}
}
}, interrupt)
}