2024-07-19 20:02:18 +08:00
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"caatsm/internal/config"
|
2024-07-21 23:09:29 +08:00
|
|
|
"caatsm/internal/nats"
|
2024-08-14 11:48:39 +08:00
|
|
|
"caatsm/internal/repository"
|
2024-07-24 11:07:04 +08:00
|
|
|
"caatsm/pkg/utils"
|
2024-08-05 10:11:33 +08:00
|
|
|
"os"
|
2024-07-22 12:42:30 +08:00
|
|
|
|
|
|
|
|
"fmt"
|
2024-08-05 10:11:33 +08:00
|
|
|
|
|
|
|
|
"github.com/urfave/cli/v2"
|
2024-07-19 20:02:18 +08:00
|
|
|
)
|
|
|
|
|
|
2024-08-05 10:58:20 +08:00
|
|
|
var (
|
|
|
|
|
cfg *config.Config
|
|
|
|
|
)
|
|
|
|
|
|
2024-07-19 20:02:18 +08:00
|
|
|
func main() {
|
2024-08-05 10:11:33 +08:00
|
|
|
app := setupApp()
|
|
|
|
|
if err := app.Run(os.Args); err != nil {
|
|
|
|
|
fmt.Printf("Error running application: %v\n", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func setupApp() *cli.App {
|
|
|
|
|
app := &cli.App{
|
2024-08-05 10:58:20 +08:00
|
|
|
Name: "telegram message process",
|
2024-08-05 15:58:46 +08:00
|
|
|
Usage: "A Civial Aviation Authority Telegram Message Processor",
|
2024-08-05 10:11:33 +08:00
|
|
|
Before: func(c *cli.Context) error {
|
2024-08-05 10:58:20 +08:00
|
|
|
|
2024-08-05 10:11:33 +08:00
|
|
|
return nil
|
|
|
|
|
},
|
|
|
|
|
Commands: []*cli.Command{
|
|
|
|
|
{
|
2024-08-05 10:58:20 +08:00
|
|
|
Name: "listen",
|
|
|
|
|
Usage: "Listen to nats messages",
|
|
|
|
|
Flags: []cli.Flag{
|
|
|
|
|
&cli.StringFlag{
|
|
|
|
|
Name: "nats",
|
2024-08-05 11:42:33 +08:00
|
|
|
Aliases: []string{"n"},
|
2024-08-05 10:58:20 +08:00
|
|
|
Usage: "Nats server address",
|
|
|
|
|
Value: "nats://localhost:4222",
|
|
|
|
|
EnvVars: []string{"NATS_SERVER"},
|
|
|
|
|
},
|
|
|
|
|
&cli.StringFlag{
|
|
|
|
|
Name: "topic",
|
2024-08-05 11:42:33 +08:00
|
|
|
Aliases: []string{"t"},
|
2024-08-05 10:58:20 +08:00
|
|
|
Usage: "Nats topic to listen to",
|
|
|
|
|
Value: "Telegram.Serial",
|
|
|
|
|
EnvVars: []string{"NATS_SUBJECT"},
|
|
|
|
|
},
|
|
|
|
|
},
|
2024-08-05 10:11:33 +08:00
|
|
|
Action: executeListen,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
return app
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-05 10:58:20 +08:00
|
|
|
func overrideConfig(c *cli.Context) {
|
|
|
|
|
if c.IsSet("nats") {
|
|
|
|
|
cfg.Nats.URL = c.String("nats")
|
2024-08-05 11:23:22 +08:00
|
|
|
fmt.Printf("Overriding nats url to %s\n", cfg.Nats.URL)
|
2024-08-05 10:58:20 +08:00
|
|
|
}
|
|
|
|
|
if c.IsSet("topic") {
|
|
|
|
|
cfg.Subscription.Topic = c.String("topic")
|
2024-08-05 11:23:22 +08:00
|
|
|
fmt.Printf("Overriding nats topic to %s\n", cfg.Subscription.Topic)
|
2024-08-05 10:58:20 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-05 10:11:33 +08:00
|
|
|
func executeListen(c *cli.Context) error {
|
2024-08-05 11:23:22 +08:00
|
|
|
cfg, err := config.LoadConfig()
|
|
|
|
|
if err != nil {
|
|
|
|
|
fmt.Printf("Error loading configuration: %v\n", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
if err := config.ValidateConfig(cfg); err != nil {
|
|
|
|
|
fmt.Printf("Invalid configuration: %v\n", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
overrideConfig(c)
|
2024-07-22 12:42:30 +08:00
|
|
|
fmt.Println("Loaded configuration successfully")
|
2024-08-05 11:23:22 +08:00
|
|
|
log := utils.GetLogger()
|
2024-07-24 11:07:04 +08:00
|
|
|
log.Info("Starting nats subscriber")
|
2024-08-14 11:48:39 +08:00
|
|
|
publisher := nats.NewPub(cfg)
|
|
|
|
|
repository := repository.NewHasura(cfg)
|
|
|
|
|
handler := nats.NewHandler(cfg, publisher, repository)
|
|
|
|
|
subscriber := nats.NewSub(cfg)
|
|
|
|
|
subscriber.Subscribe(cfg, handler)
|
2024-08-05 10:11:33 +08:00
|
|
|
return nil
|
2024-07-19 20:02:18 +08:00
|
|
|
}
|