сhanged ownership validation for user's merch
All checks were successful
/ Make image (push) Successful in 1m30s

This commit is contained in:
nquidox 2025-11-04 16:49:04 +03:00
parent 7fa79d770a
commit aeb5cb819b
2 changed files with 37 additions and 17 deletions

View file

@ -3,7 +3,6 @@ package merch
import ( import (
"database/sql" "database/sql"
"errors" "errors"
"fmt"
"gorm.io/gorm" "gorm.io/gorm"
"gorm.io/gorm/clause" "gorm.io/gorm/clause"
"time" "time"
@ -23,7 +22,7 @@ type repository interface {
addMerch(bundle merchBundle) error addMerch(bundle merchBundle) error
merchRecordExists(userUuid, merchUuid string) (bool, 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) getSingleMerch(userUuid, merchUuid string) (merchBundle, error)
getAllMerch(userUuid string) ([]ListResponse, error) getAllMerch(userUuid string) ([]ListResponse, error)
@ -86,20 +85,20 @@ func (r *Repo) merchRecordExists(userUuid, merchUuid string) (bool, error) {
return exists, err return exists, err
} }
func (r *Repo) userOwnsMerchUuids(userUuid string, merchUuids []string) (bool, error) { func (r *Repo) userOwnsMerchUuids(userUuid string, merchUuids []string) ([]Merch, error) {
var count int64 var ownsUuids []Merch
err := r.db.Model(&Merch{}). err := r.db.Model(&Merch{}).
Select("merch_uuid").
Where("user_uuid = ?", userUuid). Where("user_uuid = ?", userUuid).
Where("merch_uuid IN ?", merchUuids). Where("merch_uuid IN (?)", merchUuids).
Where("deleted_at IS NULL"). Where("deleted_at IS NULL").
Count(&count).Error Find(&ownsUuids).Error
fmt.Println("!!!!!!", count)
if err != nil { 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) { func (r *Repo) getSingleMerch(userUuid, merchUuid string) (merchBundle, error) {

View file

@ -16,7 +16,6 @@ import (
is "merch-parser-api/proto/imageStorage" is "merch-parser-api/proto/imageStorage"
"mime/multipart" "mime/multipart"
"path/filepath" "path/filepath"
"slices"
"strings" "strings"
"time" "time"
) )
@ -619,6 +618,7 @@ func (s *service) getZeroPrices(userUuid string) ([]ZeroPrice, error) {
} }
func (s *service) deleteZeroPrices(userUuid string, list []DeleteZeroPrices) error { func (s *service) deleteZeroPrices(userUuid string, list []DeleteZeroPrices) error {
const delMsg = "Merch - service | Delete zero prices"
if len(list) == 0 { if len(list) == 0 {
return nil return nil
} }
@ -626,18 +626,39 @@ func (s *service) deleteZeroPrices(userUuid string, list []DeleteZeroPrices) err
ids := make([]string, 0, len(list)) ids := make([]string, 0, len(list))
for _, item := range list { for _, item := range list {
ids = append(ids, item.MerchUuid) 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 { if err != nil {
return err return err
} }
if !owns { if len(owns) < 1 {
return errors.New("wrong ids") 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)
} }