feat: implement async modpack import with websockets
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
||||
"gitea.mrixs.me/minecraft-platform/backend/internal/api"
|
||||
"gitea.mrixs.me/minecraft-platform/backend/internal/core"
|
||||
"gitea.mrixs.me/minecraft-platform/backend/internal/database"
|
||||
"gitea.mrixs.me/minecraft-platform/backend/internal/ws"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/go-chi/chi/v5/middleware"
|
||||
@@ -31,12 +32,17 @@ func main() {
|
||||
userRepo := &database.UserRepository{DB: dbPool}
|
||||
serverRepo := &database.ServerRepository{DB: dbPool}
|
||||
modpackRepo := &database.ModpackRepository{DB: dbPool}
|
||||
jobRepo := &database.JobRepository{DB: dbPool}
|
||||
|
||||
// --- Инициализация сервисов ---
|
||||
userService := &core.UserService{Repo: userRepo}
|
||||
authService := &core.AuthService{UserRepo: userRepo}
|
||||
serverPoller := &core.ServerPoller{Repo: serverRepo}
|
||||
|
||||
// --- Инициализация WebSocket Hub ---
|
||||
hub := ws.NewHub()
|
||||
go hub.Run()
|
||||
|
||||
keyPath := os.Getenv("RSA_PRIVATE_KEY_PATH")
|
||||
if keyPath == "" {
|
||||
slog.Error("RSA_PRIVATE_KEY_PATH environment variable is not set")
|
||||
@@ -74,7 +80,9 @@ func main() {
|
||||
launcherHandler := &api.LauncherHandler{ModpackRepo: modpackRepo}
|
||||
modpackHandler := &api.ModpackHandler{
|
||||
ModpackRepo: modpackRepo,
|
||||
JobRepo: jobRepo,
|
||||
JanitorService: janitorService,
|
||||
Hub: hub,
|
||||
}
|
||||
adminUserHandler := &api.AdminUserHandler{UserRepo: userRepo}
|
||||
|
||||
@@ -120,6 +128,11 @@ func main() {
|
||||
r.Route("/api/admin", func(r chi.Router) {
|
||||
r.Use(api.AdminMiddleware)
|
||||
|
||||
// WebSocket endpoint for jobs
|
||||
r.Get("/ws/jobs", func(w http.ResponseWriter, r *http.Request) {
|
||||
ws.ServeWs(hub, w, r)
|
||||
})
|
||||
|
||||
r.Route("/modpacks", func(r chi.Router) {
|
||||
r.Post("/import", modpackHandler.ImportModpack)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user