96 lines
3.2 KiB
Go
Executable File
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...")
|
|
}
|