get tasks + insert result
This commit is contained in:
parent
47700dfd14
commit
718101ee67
6 changed files with 268 additions and 8 deletions
|
|
@ -3,18 +3,93 @@ package merch
|
|||
import (
|
||||
"context"
|
||||
"merch-api/internal/common"
|
||||
"merch-api/pkg/utils"
|
||||
)
|
||||
|
||||
type provider struct{}
|
||||
const providerLogHeader string = "[provider]"
|
||||
|
||||
func newProvider() *provider {
|
||||
return &provider{}
|
||||
type provider struct {
|
||||
service *service
|
||||
utils utils.Utils
|
||||
}
|
||||
|
||||
func newProvider(s *service, u utils.Utils) *provider {
|
||||
return &provider{
|
||||
service: s,
|
||||
utils: u,
|
||||
}
|
||||
}
|
||||
|
||||
func (p *provider) GetTasks(ctx context.Context) ([]common.Task, error) {
|
||||
return nil, nil
|
||||
rawTasks, err := p.service.repo.getTaskData(ctx)
|
||||
if err != nil {
|
||||
logErr(providerLogHeader, err)
|
||||
return nil, err
|
||||
}
|
||||
return p.convertTasks(rawTasks), nil
|
||||
}
|
||||
|
||||
func (p *provider) InsertRecords(ctx context.Context) error {
|
||||
func (p *provider) InsertPrices(ctx context.Context, rawPrices []common.Result) error {
|
||||
if rawPrices == nil || len(rawPrices) == 0 {
|
||||
logDebug(providerLogHeader, "no prices given")
|
||||
return nil
|
||||
}
|
||||
|
||||
var uuids []string
|
||||
for _, rawPrice := range rawPrices {
|
||||
uuids = append(uuids, rawPrice.MerchUuid)
|
||||
}
|
||||
|
||||
uuidMap, err := p.service.getMerchUuidMap(ctx, uuids)
|
||||
if err != nil {
|
||||
logErr(serviceLogHeader, err)
|
||||
return err
|
||||
}
|
||||
|
||||
originIds, _, err := p.service.getOriginsMaps(ctx)
|
||||
if err != nil {
|
||||
logErr(serviceLogHeader, err)
|
||||
return err
|
||||
}
|
||||
|
||||
now := p.utils.TimeNowUTC()
|
||||
var insertPrices []Price
|
||||
for _, rawPrice := range rawPrices {
|
||||
insertPrices = append(insertPrices, Price{
|
||||
CreatedAt: now,
|
||||
UpdatedAt: p.utils.NullTimeFromNow(now),
|
||||
MerchId: uuidMap[rawPrice.MerchUuid],
|
||||
OriginId: originIds[rawPrice.OriginName],
|
||||
Price: int(rawPrice.Price),
|
||||
})
|
||||
}
|
||||
|
||||
if err = p.service.repo.insertPrices(ctx, insertPrices); err != nil {
|
||||
logErr(serviceLogHeader, err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *provider) convertTasks(rawTasks []taskData) []common.Task {
|
||||
convert := make(map[string]*common.Task, len(rawTasks))
|
||||
for _, item := range rawTasks {
|
||||
task, ok := convert[item.MerchUuid]
|
||||
if !ok {
|
||||
task = &common.Task{
|
||||
MerchUuid: item.MerchUuid,
|
||||
Origins: make(map[string]string),
|
||||
}
|
||||
convert[item.MerchUuid] = task
|
||||
}
|
||||
task.Origins[item.OriginName] = item.Url
|
||||
}
|
||||
|
||||
result := make([]common.Task, 0, len(convert))
|
||||
for _, task := range convert {
|
||||
result = append(result, *task)
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue