92 lines
2.4 KiB
Go
92 lines
2.4 KiB
Go
package main
|
|
|
|
// Общая инфраструктура: БД, кэш, шина событий.
|
|
// Этим владеет платформенная команда (или DevOps).
|
|
// Бизнес-команды используют, но не трогают.
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
|
|
"go.uber.org/fx"
|
|
)
|
|
|
|
var InfraModule = fx.Module("infra",
|
|
fx.Provide(newDB, newCache, newEventBus),
|
|
)
|
|
|
|
// --- DB ---
|
|
|
|
type dbImpl struct{ dsn string }
|
|
|
|
func (db *dbImpl) Query(query string) error { return nil }
|
|
func (db *dbImpl) QueryRow(query string) error { return nil }
|
|
func (db *dbImpl) Exec(query string) error { return nil }
|
|
func (db *dbImpl) BeginTx() error { return nil }
|
|
func (db *dbImpl) BulkInsert(query string, args ...any) error { return nil }
|
|
func (db *dbImpl) Close() error {
|
|
slog.Info("БД: соединение закрыто")
|
|
return nil
|
|
}
|
|
|
|
func newDB(lc fx.Lifecycle) (DB, error) {
|
|
db := &dbImpl{dsn: "postgres://localhost:5432/demo"}
|
|
lc.Append(fx.Hook{
|
|
OnStart: func(ctx context.Context) error {
|
|
slog.Info("БД: подключение установлено", "dsn", db.dsn)
|
|
return nil
|
|
},
|
|
OnStop: func(ctx context.Context) error {
|
|
return db.Close()
|
|
},
|
|
})
|
|
return db, nil
|
|
}
|
|
|
|
// --- Cache ---
|
|
|
|
type cacheImpl struct{}
|
|
|
|
func (c *cacheImpl) Get(key string) (string, error) { return "", nil }
|
|
func (c *cacheImpl) Set(key, value string) error { return nil }
|
|
func (c *cacheImpl) Close() error {
|
|
slog.Info("Кэш: соединение закрыто")
|
|
return nil
|
|
}
|
|
|
|
func newCache(lc fx.Lifecycle) Cache {
|
|
c := &cacheImpl{}
|
|
lc.Append(fx.Hook{
|
|
OnStart: func(ctx context.Context) error {
|
|
slog.Info("Кэш: подключение установлено")
|
|
return nil
|
|
},
|
|
OnStop: func(ctx context.Context) error {
|
|
return c.Close()
|
|
},
|
|
})
|
|
return c
|
|
}
|
|
|
|
// --- EventBus ---
|
|
|
|
type eventBusImpl struct{}
|
|
|
|
func (b *eventBusImpl) Publish(event string) { slog.Info("событие", "event", event) }
|
|
func (b *eventBusImpl) Subscribe(event string, handler func()) { slog.Info("подписка", "event", event) }
|
|
|
|
func newEventBus(lc fx.Lifecycle) EventBus {
|
|
bus := &eventBusImpl{}
|
|
lc.Append(fx.Hook{
|
|
OnStart: func(ctx context.Context) error {
|
|
slog.Info("EventBus: запущен")
|
|
return nil
|
|
},
|
|
OnStop: func(ctx context.Context) error {
|
|
slog.Info("EventBus: остановлен")
|
|
return nil
|
|
},
|
|
})
|
|
return bus
|
|
}
|