From f9ec882cd9174b3a35ecf47e89ef5539391f64e3 Mon Sep 17 00:00:00 2001 From: Mohammad Mahdi Date: Tue, 13 May 2025 22:47:52 +0330 Subject: [PATCH] Add periodic post fetching and update default Mastodon instance to mstdn.party --- cmd/main.go | 70 ++++++++++++++++------------- internal/helpers/SetupAppContext.go | 13 +++--- 2 files changed, 46 insertions(+), 37 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index fafa13f..e1a789e 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -15,41 +15,51 @@ func main() { // Setup AppContext var appContext = helpers.SetupAppContext() - // Get posts - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - var posts []models.Post = nil - err, posts := appContext.PostService.GetPostsFromApi(ctx, appContext.Tag, appContext.Instance) - if err != nil { - log.Fatal(err) + ticker := time.NewTicker(1 * time.Minute) + + runFetchPosts := func() { + // Get posts + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + var posts []models.Post = nil + err, posts := appContext.PostService.GetPostsFromApi(ctx, appContext.Tag, appContext.Instance) + if err != nil { + log.Fatal(err) + } + + var existingPostIds = appContext.PostService.GetExistingPostIds() + var existingAccountIds = appContext.PostService.GetExistingAccountIds() + var newPosts = appContext.PostService.GetNewPosts(existingPostIds, posts) + var newAccounts = appContext.PostService.GetNewAccounts(existingAccountIds, newPosts) + + // Save to database + log.Printf("Number of existing posts: %d, existing accounts: %d, new posts: %d, new accounts: %d\n", len(existingPostIds), len(existingAccountIds), len(newPosts), len(newAccounts)) + + // Additional logging + if newAccounts != nil { + log.Println("Number of inserted accounts: ", appContext.PostService.InsertNewAccounts(newAccounts)) + } else { + log.Print(" - No new accounts inserted") + } + if newPosts != nil { + log.Print(" - Number of inserted posts: ", appContext.PostService.InsertNewPosts(newPosts)) + } else { + log.Print(" - No new posts inserted") + } } - var existingPostIds = appContext.PostService.GetExistingPostIds() - var existingAccountIds = appContext.PostService.GetExistingAccountIds() - var newPosts = appContext.PostService.GetNewPosts(existingPostIds, posts) - var newAccounts = appContext.PostService.GetNewAccounts(existingAccountIds, newPosts) - - // Save to database - log.Println("Number of existing posts: ", len(existingPostIds)) - log.Println("Number of existing accounts: ", len(existingAccountIds)) - log.Println("Number of new posts: ", len(newPosts)) - log.Println("Number of new accounts: ", len(newAccounts)) - - // Additional logging - if newAccounts != nil { - log.Println("Number of inserted accounts: ", appContext.PostService.InsertNewAccounts(newAccounts)) - } else { - log.Println("No new accounts inserted") - } - if newPosts != nil { - log.Println("Number of inserted posts: ", appContext.PostService.InsertNewPosts(newPosts)) - } else { - log.Println("No new posts inserted") - } + go func() { + for range ticker.C { + runFetchPosts() + } + }() // https://seefnasrul.medium.com/create-your-first-go-rest-api-with-jwt-authentication-in-gin-framework-dbe5bda72817 engine := gin.Default() r := server.SetupRouter(engine) - r.Run(":8080") + err := r.Run(":8080") + if err != nil { + log.Fatal(err) + } } diff --git a/internal/helpers/SetupAppContext.go b/internal/helpers/SetupAppContext.go index 564e88f..8f5af7e 100644 --- a/internal/helpers/SetupAppContext.go +++ b/internal/helpers/SetupAppContext.go @@ -14,14 +14,13 @@ func SetupAppContext() *internal.AppContext { // Setup AppContext instance := os.Getenv("INSTANCE") if instance == "" { - instance = "https://haminoa.net" + instance = "https://mstdn.party" } tag := os.Getenv("TAG") if tag == "" { tag = "catsofmastodon" } - // Setup database db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{Logger: logger.Default.LogMode(logger.Warn)}) if err != nil { @@ -34,11 +33,11 @@ func SetupAppContext() *internal.AppContext { // Inititlize AppContext var appContext = &internal.AppContext{ - Db: db, + Db: db, PostService: postService, - Instance: instance, - Tag: tag, + Instance: instance, + Tag: tag, } return appContext - -} \ No newline at end of file + +}