Compare commits
2 Commits
117fe3dd34
...
61a48c1cf4
Author | SHA1 | Date | |
---|---|---|---|
61a48c1cf4 | |||
f9ec882cd9 |
70
cmd/main.go
70
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)
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -22,7 +22,7 @@ func NewPostService(db *gorm.DB) *PostService {
|
||||
return &PostService{db: db}
|
||||
}
|
||||
|
||||
func (ps *PostService) GetPostsFromApi(ctx context.Context, tag string, instance string) (error, []models.Post) {
|
||||
func (*PostService) GetPostsFromApi(ctx context.Context, tag string, instance string) (error, []models.Post) {
|
||||
var requestUrl = instance + "/api/v1/timelines/tag/" + tag + "?limit=40"
|
||||
req, err := http.NewRequestWithContext(ctx, "GET", requestUrl, nil)
|
||||
if err != nil {
|
||||
@@ -93,6 +93,12 @@ func (ps *PostService) InsertNewAccounts(newAccounts []models.Account) int {
|
||||
return int(ps.db.Clauses(clause.OnConflict{UpdateAll: true}).Create(&newAccounts).RowsAffected)
|
||||
}
|
||||
|
||||
func (ps *PostService) GetRandomPost() models.Post {
|
||||
var post models.Post
|
||||
ps.db.Order("RANDOM()").First(&post) // TODO: only approved posts
|
||||
return post
|
||||
}
|
||||
|
||||
func arrayContains(arr []string, str string) bool {
|
||||
for _, a := range arr {
|
||||
if a == str {
|
||||
|
Reference in New Issue
Block a user