feat: implement async modpack import with websockets

This commit is contained in:
2026-01-05 18:06:54 +03:00
parent 0751ddb88a
commit 9bf2a15045
8 changed files with 435 additions and 64 deletions

View File

@@ -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)
})