70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"os"
|
|
|
|
"gitea.d3m0k1d.ru/d3m0k1d/rostpoliplast/backend/docs"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
swaggerFiles "github.com/swaggo/files"
|
|
ginSwagger "github.com/swaggo/gin-swagger"
|
|
|
|
"gitea.d3m0k1d.ru/d3m0k1d/rostpoliplast/backend/internal/handlers"
|
|
"gitea.d3m0k1d.ru/d3m0k1d/rostpoliplast/backend/internal/mq"
|
|
"gitea.d3m0k1d.ru/d3m0k1d/rostpoliplast/backend/internal/storage"
|
|
)
|
|
|
|
// @securityDefinitions.apikey Bearer
|
|
// @in header
|
|
// @name Authorization
|
|
// @description Type "Bearer" followed by a space and the JWT token.
|
|
|
|
func main() {
|
|
ctx := context.Background()
|
|
|
|
connStr := os.Getenv("DATABASE_URL")
|
|
if connStr == "" {
|
|
connStr = "postgres://postgres:postgres@localhost:5432/rostpoliplast?sslmode=disable"
|
|
}
|
|
|
|
pool, err := pgxpool.New(ctx, connStr)
|
|
if err != nil {
|
|
log.Fatalf("failed to connect to database: %v", err)
|
|
}
|
|
defer pool.Close()
|
|
|
|
if err := pool.Ping(ctx); err != nil {
|
|
log.Fatalf("failed to ping database: %v", err)
|
|
}
|
|
|
|
rabbit, err := mq.NewRabbitMQ()
|
|
if err != nil {
|
|
log.Printf("warning: failed to connect to rabbitmq: %v", err)
|
|
}
|
|
defer rabbit.Close()
|
|
|
|
repo := storage.NewRepository(pool)
|
|
h := &handlers.Handlers{Repo: repo, MQ: rabbit}
|
|
|
|
router := gin.Default()
|
|
v1 := router.Group("/api/v1")
|
|
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
|
docs.SwaggerInfo.BasePath = "/api/v1"
|
|
docs.SwaggerInfo.Title = "Atmosphera Smart Layer API"
|
|
docs.SwaggerInfo.Version = "1.0"
|
|
docs.SwaggerInfo.Schemes = []string{"http", "https"}
|
|
|
|
h.RegisterRoutes(v1)
|
|
|
|
{
|
|
v1.GET("/health", func(c *gin.Context) {
|
|
c.JSON(200, gin.H{
|
|
"status": "ok",
|
|
})
|
|
})
|
|
}
|
|
router.Run(":8080")
|
|
}
|