Files
zsp-project/backend/cmd/api/main.go
2026-06-03 20:59:39 +08:00

96 lines
3.2 KiB
Go
Executable File

package main
import (
"log"
"os"
"os/signal"
"strconv"
"syscall"
"github.com/rovina/zsp-backend/internal/handler"
"github.com/rovina/zsp-backend/internal/middleware"
"github.com/rovina/zsp-backend/internal/repository"
"github.com/rovina/zsp-backend/internal/server"
"github.com/rovina/zsp-backend/internal/service"
"github.com/rovina/zsp-backend/pkg/config"
"github.com/rovina/zsp-backend/pkg/database"
)
func main() {
configPath := os.Getenv("CONFIG_PATH")
if configPath == "" {
configPath = "./configs/config.dev.yaml"
}
cfg, err := config.Load(configPath)
if err != nil {
log.Fatal(err)
}
// 自动创建数据库
err = database.EnsureDatabase(&cfg.Database)
if err != nil {
log.Fatalf("create db failed: %v", err)
}
// 连接数据库
db, err := database.NewDB(&cfg.Database)
if err != nil {
log.Fatal(err)
}
// 自动建表
err = database.AutoMigrate(db)
if err != nil {
log.Fatalf("migrate failed: %v", err)
}
userRepo := repository.NewUserRepository(db)
contractRepo := repository.NewContractRepository(db)
contractFolderRepo := repository.NewContractFolderRepository(db)
contractBatchRepo := repository.NewContractBatchRepository(db)
zspContractRepo := repository.NewZSPContractRepository(db)
userService, err := service.NewUserService(userRepo, cfg.JWT.Secret)
if err != nil {
log.Fatalf("error in userService Create: %s", err.Error())
return
}
contractService, err := service.NewContractService(contractRepo)
if err != nil {
log.Fatalf("error in contractService Create: %s", err.Error())
return
}
contractFolderService := service.NewContractFolderService(contractFolderRepo)
contractBatchService := service.NewContractBatchService(contractBatchRepo)
zspContractService, err := service.NewZSPContractService(zspContractRepo)
if err != nil {
log.Fatalf("error in zspContractService Create: %s", err.Error())
return
}
zspFinancesService := service.NewZSPFinancesService(db)
companyRepo := repository.NewCompanyRepository(db)
companyService := service.NewCompanyService(companyRepo)
userHandler := handler.NewUserHandler(userService)
contractHandler := handler.NewContractHandler(contractService, contractFolderService, contractBatchService)
zspContractHandler := handler.NewZSPContractHandler(zspContractService)
zspFinancesHandler := handler.NewZSPFinancesHandler(zspFinancesService)
companyHandler := handler.NewCompanyHandler(companyService)
deliveryRepo := repository.NewDeliveryRepository(db)
deliveryService := service.NewDeliveryService(deliveryRepo)
deliveryHandler := handler.NewDeliveryHandler(deliveryService)
authMiddleware := middleware.AuthMiddleware(cfg.JWT.Secret)
router := server.SetupRouter(userHandler, contractHandler, zspContractHandler, zspFinancesHandler, companyHandler, deliveryHandler, authMiddleware)
go func() {
log.Printf("Server starting on port %d", cfg.Server.Port)
if err := router.Run(":" + strconv.Itoa(cfg.Server.Port)); err != nil {
log.Fatalf("Failed to start server: %v", err)
}
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("Shutting down server...")
}