All checks were successful
Server CI/CD / deploy (push) Successful in 35s
- zip 스트리밍 업로드 (StreamRequestBody) → /data/game/game.zip 저장 - A301.exe SHA256 해시 자동 추출 (zip 분석) - 버전·파일명·크기 파일명 및 용량에서 자동 추출 - GET /api/download/file 엔드포인트 추가 - BASE_URL, GAME_DIR 환경변수 추가 - Dockerfile에 /data/game 디렉토리 생성 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
67 lines
1.8 KiB
Go
67 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
|
|
"a301_server/internal/announcement"
|
|
"a301_server/internal/auth"
|
|
"a301_server/internal/download"
|
|
"a301_server/pkg/config"
|
|
"a301_server/pkg/database"
|
|
"a301_server/routes"
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/gofiber/fiber/v2/middleware/cors"
|
|
"github.com/gofiber/fiber/v2/middleware/logger"
|
|
)
|
|
|
|
func main() {
|
|
config.Load()
|
|
|
|
if err := database.ConnectMySQL(); err != nil {
|
|
log.Fatalf("MySQL 연결 실패: %v", err)
|
|
}
|
|
log.Println("MySQL 연결 성공")
|
|
|
|
// AutoMigrate
|
|
database.DB.AutoMigrate(&auth.User{}, &announcement.Announcement{}, &download.Info{})
|
|
|
|
if err := database.ConnectRedis(); err != nil {
|
|
log.Fatalf("Redis 연결 실패: %v", err)
|
|
}
|
|
log.Println("Redis 연결 성공")
|
|
|
|
// 의존성 주입
|
|
authRepo := auth.NewRepository(database.DB)
|
|
authSvc := auth.NewService(authRepo, database.RDB)
|
|
authHandler := auth.NewHandler(authSvc)
|
|
|
|
// 초기 admin 계정 생성
|
|
if err := authSvc.EnsureAdmin(config.C.AdminUsername, config.C.AdminPassword); err != nil {
|
|
log.Printf("admin 계정 생성 실패: %v", err)
|
|
} else {
|
|
log.Printf("admin 계정 확인 완료: %s", config.C.AdminUsername)
|
|
}
|
|
|
|
annRepo := announcement.NewRepository(database.DB)
|
|
annSvc := announcement.NewService(annRepo)
|
|
annHandler := announcement.NewHandler(annSvc)
|
|
|
|
dlRepo := download.NewRepository(database.DB)
|
|
dlSvc := download.NewService(dlRepo, config.C.GameDir)
|
|
dlHandler := download.NewHandler(dlSvc, config.C.BaseURL)
|
|
|
|
app := fiber.New(fiber.Config{
|
|
StreamRequestBody: true,
|
|
})
|
|
app.Use(logger.New())
|
|
app.Use(cors.New(cors.Config{
|
|
AllowOrigins: "https://a301.tolelom.xyz",
|
|
AllowHeaders: "Origin, Content-Type, Authorization",
|
|
AllowMethods: "GET, POST, PUT, DELETE",
|
|
}))
|
|
|
|
routes.Register(app, authHandler, annHandler, dlHandler)
|
|
|
|
log.Fatal(app.Listen(":" + config.C.AppPort))
|
|
}
|