83 lines
2.6 KiB
Go
83 lines
2.6 KiB
Go
package main
|
||
|
||
import (
|
||
"context"
|
||
"log"
|
||
"net/http"
|
||
"os"
|
||
|
||
"gitea.mrixs.me/minecraft-platform/backend/internal/api"
|
||
"gitea.mrixs.me/minecraft-platform/backend/internal/core"
|
||
"gitea.mrixs.me/minecraft-platform/backend/internal/database"
|
||
|
||
"github.com/go-chi/chi/v5"
|
||
"github.com/go-chi/chi/v5/middleware"
|
||
)
|
||
|
||
func main() {
|
||
// Инициализируем соединение с БД
|
||
db := database.Connect()
|
||
defer db.Close()
|
||
|
||
userRepo := &database.UserRepository{DB: db}
|
||
serverRepo := &database.ServerRepository{DB: db}
|
||
serverPoller := &core.ServerPoller{Repo: serverRepo}
|
||
|
||
// Запускаем поллер в фоновой горутине
|
||
go serverPoller.Start(context.Background())
|
||
|
||
// Сервисы
|
||
userService := &core.UserService{Repo: userRepo}
|
||
authService := &core.AuthService{UserRepo: userRepo} // Новый сервис
|
||
// Инициализируем сервис профилей, читая путь к ключу и домен из переменных окружения
|
||
keyPath := os.Getenv("RSA_PRIVATE_KEY_PATH")
|
||
if keyPath == "" {
|
||
log.Fatal("RSA_PRIVATE_KEY_PATH environment variable is not set")
|
||
}
|
||
domain := os.Getenv("APP_DOMAIN")
|
||
if domain == "" {
|
||
log.Fatal("APP_DOMAIN environment variable is not set")
|
||
}
|
||
profileService, err := core.NewProfileService(userRepo, keyPath, domain)
|
||
if err != nil {
|
||
log.Fatalf("Failed to create profile service: %v", err)
|
||
}
|
||
// Хендлеры
|
||
userHandler := &api.UserHandler{Service: userService}
|
||
authHandler := &api.AuthHandler{Service: authService}
|
||
profileHandler := &api.ProfileHandler{Service: profileService}
|
||
serverHandler := &api.ServerHandler{Repo: serverRepo}
|
||
// --- Настраиваем роутер ---
|
||
r := chi.NewRouter()
|
||
r.Use(middleware.Logger)
|
||
r.Use(middleware.Recoverer)
|
||
|
||
// --- Публичные роуты ---
|
||
r.Route("/api", func(r chi.Router) {
|
||
r.Post("/register", userHandler.Register)
|
||
r.Post("/login", authHandler.Login)
|
||
r.Get("/servers", serverHandler.GetServers)
|
||
})
|
||
r.Route("/authserver", func(r chi.Router) {
|
||
r.Post("/authenticate", authHandler.Authenticate)
|
||
})
|
||
r.Route("/sessionserver/session/minecraft", func(r chi.Router) {
|
||
r.Post("/join", authHandler.Join)
|
||
r.Get("/profile/{uuid}", profileHandler.GetProfile)
|
||
})
|
||
|
||
// --- Защищенные роуты ---
|
||
r.Group(func(r chi.Router) {
|
||
r.Use(api.AuthMiddleware)
|
||
|
||
r.Route("/api/user", func(r chi.Router) {
|
||
r.Post("/skin", profileHandler.UploadSkin)
|
||
})
|
||
})
|
||
|
||
log.Println("Starting backend server on :8080")
|
||
if err := http.ListenAndServe(":8080", r); err != nil {
|
||
log.Fatalf("Failed to start server: %v", err)
|
||
}
|
||
}
|