added scheduler code

This commit is contained in:
overflowerror 2021-08-14 14:18:53 +02:00
parent 36c83e6471
commit 7e853da63d
5 changed files with 51 additions and 4 deletions

View file

@ -5,6 +5,7 @@ import "threadule/backend/internal/data/models"
type Data interface {
UpdateTweet(tweet *models.Tweet) error
GetScheduledThreads() ([]models.Thread, error)
GetTweetsForThread(thread *models.Thread) ([]models.Tweet, error)
UpdateThread(thread *models.Thread) error
}

View file

@ -1,6 +1,9 @@
package data
import "threadule/backend/internal/data/models"
import (
"threadule/backend/internal/data/models"
"time"
)
func (d *Data) UpdateThread(thread *models.Thread) error {
return d.db.Save(thread).Error
@ -14,3 +17,14 @@ func (d *Data) GetTweetsForThread(thread *models.Thread) ([]models.Tweet, error)
Find(&tweets).Error
return tweets, err
}
func (d *Data) GetScheduledThreads() ([]models.Thread, error) {
var threads []models.Thread
err := d.db.
Where("scheduled_for <= ?", time.Now()).
Where("status = ?", models.ThreadScheduled).
Find(&threads).
Error
return threads, err
}

View file

@ -9,7 +9,11 @@ type Logic struct {
var _ app.Logic = &Logic{}
func Setup(ctx *app.Context) (app.Logic, error) {
return &Logic{
logic := &Logic{
ctx: ctx,
}, nil
}
logic.startScheduler()
return logic, nil
}

View file

@ -0,0 +1,14 @@
package logic
import "time"
func (l *Logic) startScheduler() {
ticker := time.NewTicker(time.Minute)
go func() {
for {
_ = <-ticker.C
l.scheduleTrigger()
}
}()
}

View file

@ -1,6 +1,8 @@
package logic
import "threadule/backend/internal/data/models"
import (
"threadule/backend/internal/data/models"
)
import "github.com/dghubble/oauth1"
import "github.com/dghubble/go-twitter/twitter"
@ -100,3 +102,15 @@ func (l *Logic) sendThread(thread *models.Thread) {
_ = l.ctx.Data.UpdateThread(thread)
// TODO log data error
}
func (l *Logic) scheduleTrigger() {
threads, err := l.ctx.Data.GetScheduledThreads()
if err != nil {
// TODO log error
return
}
for _, thread := range threads {
l.sendThread(&thread)
}
}