add cron job to sync currencies once in 24 hours

This commit is contained in:
Fran Jurmanović
2023-04-13 18:10:21 +02:00
parent cf1d4f8b1a
commit 84b00a9ddf
22 changed files with 407 additions and 25 deletions

52
pkg/job/currency.go Normal file
View File

@@ -0,0 +1,52 @@
package job
import (
"context"
"log"
"wallet-api/pkg/service"
"wallet-api/pkg/utl/common"
"github.com/go-co-op/gocron"
)
type CurrencyController struct {
service *service.CurrencyService
logger *log.Logger
scheduler *gocron.Scheduler
}
/*
NewCurrencyJob
Initializes CurrencyJob.
Args:
*services.CurrencyService: Currency service
*gin.RouterGroup: Gin Router Group
Returns:
*CurrencyJob: Job for "Currency" route interactions
*/
func NewCurrencyJob(as *service.CurrencyService, scheduler *gocron.Scheduler, logger *log.Logger) *CurrencyController {
currencyScheduler := scheduler.Tag("currency")
wc := &CurrencyController{
service: as,
logger: logger,
scheduler: currencyScheduler,
}
_, err := currencyScheduler.Every(1).Days().Do(wc.Sync)
common.CheckError(err)
currencyScheduler.StartAsync()
log.Println("CurrencyJob started")
return wc
}
func (wc *CurrencyController) Sync() {
wc.logger.Println("CurrencyJob: Syncing currencies")
ctx := context.Background()
wc.service.Sync(ctx)
wc.logger.Println("CurrencyJob: Syncing currencies done")
}

33
pkg/job/job.go Normal file
View File

@@ -0,0 +1,33 @@
package job
import (
"log"
"os"
"wallet-api/pkg/service"
"wallet-api/pkg/utl/common"
"go.uber.org/dig"
)
/*
InitializeJobs
Initializes Dependency Injection modules and registers Jobs
Args:
*dig.Container: Dig Container
*/
func InitializeJobs(c *dig.Container) {
file, err := os.OpenFile("job.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
common.CheckError(err)
logger := log.New(file, "Job: ", log.Ldate|log.Ltime|log.Lshortfile)
jobContainer := c.Scope("job")
jobContainer.Provide(func() *log.Logger {
return logger
})
service.InitializeServices(jobContainer)
jobContainer.Invoke(NewCurrencyJob)
}