сhanged ownership validation for user's merch
All checks were successful
/ Make image (push) Successful in 1m30s
All checks were successful
/ Make image (push) Successful in 1m30s
This commit is contained in:
parent
7fa79d770a
commit
aeb5cb819b
2 changed files with 37 additions and 17 deletions
|
|
@ -3,7 +3,6 @@ package merch
|
|||
import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"time"
|
||||
|
|
@ -23,7 +22,7 @@ type repository interface {
|
|||
addMerch(bundle merchBundle) error
|
||||
|
||||
merchRecordExists(userUuid, merchUuid string) (bool, error)
|
||||
userOwnsMerchUuids(userUuid string, merchUuids []string) (bool, error)
|
||||
userOwnsMerchUuids(userUuid string, merchUuids []string) ([]Merch, error)
|
||||
getSingleMerch(userUuid, merchUuid string) (merchBundle, error)
|
||||
getAllMerch(userUuid string) ([]ListResponse, error)
|
||||
|
||||
|
|
@ -86,20 +85,20 @@ func (r *Repo) merchRecordExists(userUuid, merchUuid string) (bool, error) {
|
|||
return exists, err
|
||||
}
|
||||
|
||||
func (r *Repo) userOwnsMerchUuids(userUuid string, merchUuids []string) (bool, error) {
|
||||
var count int64
|
||||
|
||||
func (r *Repo) userOwnsMerchUuids(userUuid string, merchUuids []string) ([]Merch, error) {
|
||||
var ownsUuids []Merch
|
||||
err := r.db.Model(&Merch{}).
|
||||
Select("merch_uuid").
|
||||
Where("user_uuid = ?", userUuid).
|
||||
Where("merch_uuid IN ?", merchUuids).
|
||||
Where("merch_uuid IN (?)", merchUuids).
|
||||
Where("deleted_at IS NULL").
|
||||
Count(&count).Error
|
||||
fmt.Println("!!!!!!", count)
|
||||
Find(&ownsUuids).Error
|
||||
|
||||
if err != nil {
|
||||
return false, err
|
||||
return nil, err
|
||||
}
|
||||
fmt.Println("!!!!!!", len(merchUuids))
|
||||
return count == int64(len(merchUuids)), nil
|
||||
|
||||
return ownsUuids, nil
|
||||
}
|
||||
|
||||
func (r *Repo) getSingleMerch(userUuid, merchUuid string) (merchBundle, error) {
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import (
|
|||
is "merch-parser-api/proto/imageStorage"
|
||||
"mime/multipart"
|
||||
"path/filepath"
|
||||
"slices"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
|
@ -619,6 +618,7 @@ func (s *service) getZeroPrices(userUuid string) ([]ZeroPrice, error) {
|
|||
}
|
||||
|
||||
func (s *service) deleteZeroPrices(userUuid string, list []DeleteZeroPrices) error {
|
||||
const delMsg = "Merch - service | Delete zero prices"
|
||||
if len(list) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
|
@ -626,18 +626,39 @@ func (s *service) deleteZeroPrices(userUuid string, list []DeleteZeroPrices) err
|
|||
ids := make([]string, 0, len(list))
|
||||
for _, item := range list {
|
||||
ids = append(ids, item.MerchUuid)
|
||||
fmt.Println(item.MerchUuid, ids)
|
||||
}
|
||||
slices.Compact(ids)
|
||||
|
||||
owns, err := s.repo.userOwnsMerchUuids(userUuid, ids)
|
||||
uniqueMap := make(map[string]struct{}, len(list))
|
||||
uniqueIds := make([]string, 0, len(list))
|
||||
for _, id := range ids {
|
||||
if _, ok := uniqueMap[id]; !ok {
|
||||
uniqueMap[id] = struct{}{}
|
||||
uniqueIds = append(uniqueIds, id)
|
||||
}
|
||||
}
|
||||
|
||||
log.WithField("uuid count", len(uniqueIds)).Debug(delMsg)
|
||||
|
||||
owns, err := s.repo.userOwnsMerchUuids(userUuid, uniqueIds)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !owns {
|
||||
if len(owns) < 1 {
|
||||
return errors.New("wrong ids")
|
||||
}
|
||||
|
||||
return s.repo.deleteZeroPrices(list)
|
||||
ownsMap := make(map[string]struct{}, len(owns))
|
||||
for _, own := range owns {
|
||||
ownsMap[own.MerchUuid] = struct{}{}
|
||||
}
|
||||
|
||||
toDelete := make([]DeleteZeroPrices, 0, len(owns))
|
||||
for _, item := range list {
|
||||
if _, ok := ownsMap[item.MerchUuid]; ok {
|
||||
toDelete = append(toDelete, item)
|
||||
}
|
||||
}
|
||||
|
||||
return s.repo.deleteZeroPrices(toDelete)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue