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

50
pkg/service/currency.go Normal file
View File

@@ -0,0 +1,50 @@
package service
import (
"context"
"log"
"wallet-api/pkg/model"
"wallet-api/pkg/repository"
"wallet-api/pkg/utl/common"
)
type CurrencyService struct {
repository *repository.CurrencyRepository
logger *log.Logger
}
func NewCurrencyService(repository *repository.CurrencyRepository, logger *log.Logger) *CurrencyService {
return &CurrencyService{
repository: repository,
logger: logger,
}
}
/*
GetFirst
Gets first row from Currency table.
Args:
context.Context: Application context
Returns:
model.CurrencyModel: Currency object from database.
*/
func (as CurrencyService) Sync(ctx context.Context) {
resp, err := common.Fetch[model.ExchangeBody]("GET", "https://api.exchangerate-api.com/v4/latest/euro")
if err != nil {
as.logger.Println(err)
return
}
m := resp.Rates.(map[string]interface{})
rates := new([]model.Rate)
for k, v := range m {
rate := new(model.Rate)
rate.Code = k
rate.Rate = v.(float64)
*rates = append(*rates, *rate)
}
as.repository.SyncBulk(ctx, rates)
}

View File

@@ -14,7 +14,7 @@ Initializes Dependency Injection modules for services
Args:
*dig.Container: Dig Container
*/
func InitializeServices(c *dig.Container) {
func InitializeServices(c *dig.Scope) {
repository.InitializeRepositories(c)
c.Provide(NewApiService)
@@ -25,4 +25,5 @@ func InitializeServices(c *dig.Container) {
c.Provide(NewTransactionTypeService)
c.Provide(NewUserService)
c.Provide(NewWalletService)
c.Provide(NewCurrencyService)
}