package main import ( "CatsOfMastodonBotGo/internal/config" "CatsOfMastodonBotGo/internal/database" "CatsOfMastodonBotGo/internal/domain" "CatsOfMastodonBotGo/internal/server" "CatsOfMastodonBotGo/internal/services" "context" "log/slog" "strconv" "time" ) func main() { // Setup config config.Init() // Initialize database database.Init() services.InitPostService() ticker := time.NewTicker(10 * time.Minute) runFetchPosts := func() { // Get posts ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) defer cancel() var posts []domain.Post = nil err, posts := services.PostServiceInstance.GetPostsFromApi(ctx, config.Config.Tag, config.Config.Instance) if err != nil { slog.Error(err.Error()) return } var existingPostIds = services.PostServiceInstance.GetExistingPostIds() var existingAccountIds = services.PostServiceInstance.GetExistingAccountIds() var newPosts = services.PostServiceInstance.GetNewPosts(existingPostIds, posts) var newAccounts = services.PostServiceInstance.GetNewAccounts(existingAccountIds, newPosts) // Save to database slog.Info("Fetched " + strconv.Itoa(len(posts)) + " posts; " + strconv.Itoa(len(existingPostIds)) + " existing posts; " + strconv.Itoa(len(newPosts)) + " new posts and " + strconv.Itoa(len(newAccounts)) + " new accounts\n") // Additional logging if newAccounts != nil { slog.Info("Inserted " + strconv.Itoa(services.PostServiceInstance.InsertNewAccounts(newAccounts)) + " accounts\n") } if newPosts != nil { slog.Info("Inserted " + strconv.Itoa(services.PostServiceInstance.InsertNewPosts(newPosts)) + " posts\n") } } go func() { for range ticker.C { runFetchPosts() } }() // Run initial fetch on startup go func() { runFetchPosts() }() // https://seefnasrul.medium.com/create-your-first-go-rest-api-with-jwt-authentication-in-gin-framework-dbe5bda72817 r := server.SetupRouter() err := r.Run(":8080") if err != nil { slog.Error(err.Error()) } }