84 lines
2.9 KiB
Go
84 lines
2.9 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/aykhans/oh-my-chat/internal/adapter/auth/jwt"
|
|
"github.com/aykhans/oh-my-chat/internal/adapter/config"
|
|
httpHandlers "github.com/aykhans/oh-my-chat/internal/adapter/handlers/http"
|
|
middlewares "github.com/aykhans/oh-my-chat/internal/adapter/handlers/http/middlewares"
|
|
"github.com/aykhans/oh-my-chat/internal/adapter/logger"
|
|
"github.com/aykhans/oh-my-chat/internal/adapter/storages/postgres"
|
|
postgresRepo "github.com/aykhans/oh-my-chat/internal/adapter/storages/postgres/repository"
|
|
"github.com/aykhans/oh-my-chat/internal/adapter/storages/scylla"
|
|
scyllaRepo "github.com/aykhans/oh-my-chat/internal/adapter/storages/scylla/repository"
|
|
kafkaConsumer "github.com/aykhans/oh-my-chat/internal/adapter/streamers/kafka/consumer"
|
|
kafkaProducer "github.com/aykhans/oh-my-chat/internal/adapter/streamers/kafka/producer"
|
|
"github.com/aykhans/oh-my-chat/internal/core/service"
|
|
"github.com/aykhans/oh-my-chat/internal/core/utils"
|
|
)
|
|
|
|
var log = logger.NewStdLogger()
|
|
|
|
func main() {
|
|
containerConfig := config.NewContainerConfig()
|
|
|
|
postgresDB, err := postgres.NewDB(containerConfig.PostgresConfig)
|
|
if err != nil {
|
|
log.Error("Error postgres connection", "error", err)
|
|
utils.ExitErr()
|
|
}
|
|
|
|
userRepository := postgresRepo.NewUserRepository(postgresDB)
|
|
userService := service.NewUserService(userRepository)
|
|
validator := httpHandlers.NewValidator()
|
|
userHandler := httpHandlers.NewUserHandler(userService, validator)
|
|
|
|
jwtService := jwt.NewJWTService(
|
|
*containerConfig.AppConfig.JWTDuration,
|
|
containerConfig.AppConfig.SecretKey,
|
|
)
|
|
authService := service.NewAuthService(userRepository, jwtService)
|
|
authHandler := httpHandlers.NewAuthHandler(authService, validator)
|
|
|
|
messageProducer, err := kafkaProducer.NewMessageProducer(containerConfig.KafkaConfig.KafkaProducerConfig)
|
|
if err != nil {
|
|
log.Error("Error kafka producer connection", "error", err)
|
|
utils.ExitErr()
|
|
}
|
|
|
|
messageConsumer := kafkaConsumer.NewMessageConsumer(containerConfig.KafkaConfig.KafkaConsumerConfig)
|
|
scyllaDB, err := scylla.NewDB(containerConfig.ScyllaConfig)
|
|
if err != nil {
|
|
log.Error("Error scylla connection", "error", err)
|
|
utils.ExitErr()
|
|
}
|
|
|
|
messageRepository := scyllaRepo.NewMessageRepository(scyllaDB)
|
|
messageService := service.NewMessageService(messageProducer, messageConsumer, messageRepository)
|
|
chatHandler := httpHandlers.NewChatHandler(messageService, validator)
|
|
|
|
authMiddleware := middlewares.NewAuthMiddleware(jwtService)
|
|
wsMiddleware := middlewares.NewWSMiddleware()
|
|
|
|
app := httpHandlers.NewApp(
|
|
// configs
|
|
containerConfig.AppConfig.IsDev,
|
|
containerConfig.CORSAllowedOrigins,
|
|
// middlewares
|
|
authMiddleware, wsMiddleware,
|
|
// handlers
|
|
userHandler, authHandler, chatHandler,
|
|
)
|
|
|
|
err = app.Listen(
|
|
fmt.Sprintf(
|
|
":%d", containerConfig.AppConfig.ListenerPort,
|
|
),
|
|
)
|
|
if err != nil {
|
|
log.Error("Error starting app", "error", err)
|
|
utils.ExitErr()
|
|
}
|
|
}
|