You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.5 KiB
48 lines
1.5 KiB
package main |
|
|
|
import ( |
|
"flag" |
|
"log/slog" |
|
"os" |
|
|
|
"git/palnet/slack-notifier/internal/config" |
|
"git/palnet/slack-notifier/internal/logging" |
|
"git/palnet/slack-notifier/internal/mapping" |
|
"git/palnet/slack-notifier/internal/notion" |
|
"git/palnet/slack-notifier/internal/server" |
|
"git/palnet/slack-notifier/internal/slack" |
|
) |
|
|
|
func main() { |
|
// 실행 환경은 명령어 플래그로 분기한다 (예: `slack-notifier -env prod`). |
|
// 미지정 시 APP_ENV 환경변수 → 그래도 없으면 dev. |
|
envFlag := flag.String("env", "", "실행 환경: dev | prod") |
|
flag.Parse() |
|
|
|
cfg := config.Load(*envFlag) |
|
|
|
// Slack 클라이언트를 먼저 만들어 로깅에 주입한다 — Error 로그를 모니터 채널로 알리기 위함. |
|
slackClient := slack.New(cfg.SlackBotToken) |
|
logging.Setup(cfg, slackClient) |
|
|
|
store, err := mapping.New(cfg.MappingFile) |
|
if err != nil { |
|
slog.Error("failed to load mapping store", "file", cfg.MappingFile, "err", err) |
|
os.Exit(1) |
|
} |
|
|
|
notionSnapshots, err := notion.NewSnapshotStore(cfg.NotionSnapshotFile) |
|
if err != nil { |
|
slog.Warn("failed to load notion snapshot store — diff disabled", "file", cfg.NotionSnapshotFile, "err", err) |
|
notionSnapshots = nil |
|
} |
|
notionClient := notion.New(cfg.NotionAPIToken, cfg.NotionAssigneeProperties, notionSnapshots) |
|
|
|
srv := server.New(cfg, slackClient, store, notionClient) |
|
|
|
slog.Info("slack-notifier starting", "addr", cfg.Addr, "log_level", cfg.LogLevel, "log_format", cfg.LogFormat) |
|
if err := srv.Router().Run(cfg.Addr); err != nil { |
|
slog.Error("server stopped", "err", err) |
|
os.Exit(1) |
|
} |
|
}
|
|
|