71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
package store
|
|
|
|
import (
|
|
"context"
|
|
|
|
"backend/common/media_store"
|
|
"backend/modules/medias"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/pkg/errors"
|
|
"github.com/samber/lo"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// @provider
|
|
type StoreMedias struct {
|
|
mediasSvc *medias.Service
|
|
log *log.Entry `inject:"false"`
|
|
}
|
|
|
|
// Prepare
|
|
func (d *StoreMedias) Prepare() error {
|
|
d.log = log.WithField("module", "StoreMedias")
|
|
return nil
|
|
}
|
|
|
|
func (d *StoreMedias) RunE(targetPath string) error {
|
|
d.log.Infof("Store medias from: %s ", targetPath)
|
|
|
|
store, err := media_store.NewStore(targetPath)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "new store: %s", targetPath)
|
|
}
|
|
|
|
// uuids := lo.FilterMap(store.UUIDs(), func(item string, _ int) (uuid.UUID, bool) {
|
|
// u, err := uuid.FromBytes([]byte(item))
|
|
// if err != nil {
|
|
// return uuid.Nil, false
|
|
// }
|
|
// return u, true
|
|
// })
|
|
|
|
if err := d.mediasSvc.UnPublishTenantWithNotInUUIDs(context.Background(), 1, store.UUIDs()); err != nil {
|
|
return errors.Wrapf(err, "UnPublishTenantWithNotInUUIDs: %+v", store.UUIDs())
|
|
}
|
|
|
|
dbUUIDs, err := d.mediasSvc.GetTenantUUIDs(context.Background(), 1)
|
|
if err != nil {
|
|
return errors.Wrap(err, "GetTenantUUIDs")
|
|
}
|
|
|
|
for _, item := range store {
|
|
if lo.Contains(dbUUIDs, item.UUID) {
|
|
continue
|
|
}
|
|
|
|
u, err := uuid.FromBytes([]byte(item.UUID))
|
|
if err != nil {
|
|
return errors.Wrap(err, "uuid from bytes")
|
|
}
|
|
|
|
if err := d.mediasSvc.PublishTenantMedia(context.Background(), 1, u, item.Name, item.Price); err != nil {
|
|
return errors.Wrapf(err, "PublishTenant: %+v", item)
|
|
}
|
|
|
|
d.log.Infof("PublishTenant: %+v", item)
|
|
}
|
|
|
|
return nil
|
|
}
|