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 }