v1.
This commit is contained in:
92
run/vk/delete-products.sh
Executable file
92
run/vk/delete-products.sh
Executable file
@@ -0,0 +1,92 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||
source $SCRIPT_DIR/constants.sh
|
||||
source $ROOT_DIR/run/evo/constants.sh
|
||||
source $SCRIPT_DIR/functions.sh
|
||||
|
||||
# Setup logging
|
||||
setup_logging
|
||||
|
||||
# Trap signals to ensure proper cleanup
|
||||
trap 'cleanup 1' HUP INT QUIT TERM
|
||||
|
||||
# Delete products from vk which were deleted from evo.
|
||||
# loop across vk products.
|
||||
|
||||
vkPath=$VK_PRODUCTS_PATH/$VK_API_GROUP_ID
|
||||
vkFileName=`ls $vkPath -Art | tail -1`
|
||||
vkFilePath=$vkPath/$vkFileName
|
||||
|
||||
evoPath=$EVO_PRODUCTS_PATH/$EVO_API_STORE_ID
|
||||
evoFileName=`ls $evoPath -Art | tail -1`
|
||||
evoFilePath=$evoPath/$evoFileName
|
||||
|
||||
hasEvoItems=`yq '. | has("items")' $evoFilePath`
|
||||
if ! $hasEvoItems; then
|
||||
cleanup 1
|
||||
fi
|
||||
|
||||
# Build associative array of EVO product names (transformed)
|
||||
declare -A evoNames
|
||||
while IFS= read -r line; do
|
||||
if [[ -n "$line" ]]; then
|
||||
item_name=$(echo "$line" | yq -r '.name')
|
||||
if [[ -n "$item_name" && "$item_name" != "null" ]]; then
|
||||
transformed_name=$(echo "$item_name" | xargs)
|
||||
transformed_name="${transformed_name//;/,}"
|
||||
evoNames["$transformed_name"]=1
|
||||
fi
|
||||
fi
|
||||
done < <(yq -o=j -I=0 '.items[]' $evoFilePath)
|
||||
|
||||
# Build associative array of VK items by name (transformed)
|
||||
declare -A vkItemsByName
|
||||
readarray vkItems < <(yq -o=j -I=0 '.response.items[]' $vkFilePath )
|
||||
for vkItem in "${vkItems[@]}"; do
|
||||
vkItemName=$(echo $vkItem | yq .title | xargs)
|
||||
vkItemName="${vkItemName//;/,}"
|
||||
vkItemId=$(echo $vkItem | yq .id)
|
||||
# Store VK item IDs by name (append to comma-separated list)
|
||||
if [[ -n "${vkItemsByName[$vkItemName]}" ]]; then
|
||||
vkItemsByName[$vkItemName]="${vkItemsByName[$vkItemName]},$vkItemId"
|
||||
else
|
||||
vkItemsByName[$vkItemName]="$vkItemId"
|
||||
fi
|
||||
done
|
||||
|
||||
# For each VK name, check if it exists in EVO
|
||||
for vkName in "${!vkItemsByName[@]}"; do
|
||||
IFS=',' read -ra ids <<< "${vkItemsByName[$vkName]}"
|
||||
if [[ -n "${evoNames[$vkName]}" ]]; then
|
||||
# If multiple VK items for this name, keep the oldest (first), delete the rest
|
||||
if (( ${#ids[@]} > 1 )); then
|
||||
for ((i=1; i<${#ids[@]}; i++)); do
|
||||
vkItemId="${ids[$i]}"
|
||||
echo "$(timestamp) [REQUEST] Deleting duplicate product: $vkName (id=$vkItemId)" >> "$LOG_FILE"
|
||||
response=$(curl -s -w "%{http_code}" -H "Authorization: Bearer $VK_API_USER_TOKEN" \
|
||||
-F owner_id=$VK_API_PARAM_OWNER_ID \
|
||||
-F item_id=$vkItemId \
|
||||
$VK_API_DELETE_PRODUCT)
|
||||
http_code=${response: -3}
|
||||
response_body=${response:0:-3}
|
||||
echo "$(timestamp) [RESPONSE] code=$http_code body=$response_body" >> "$LOG_FILE"
|
||||
done
|
||||
fi
|
||||
else
|
||||
# If VK name not in EVO, delete all VK items for this name
|
||||
for vkItemId in "${ids[@]}"; do
|
||||
echo "$(timestamp) [REQUEST] Deleting product not in EVO: $vkName (id=$vkItemId)" >> "$LOG_FILE"
|
||||
response=$(curl -s -w "%{http_code}" -H "Authorization: Bearer $VK_API_USER_TOKEN" \
|
||||
-F owner_id=$VK_API_PARAM_OWNER_ID \
|
||||
-F item_id=$vkItemId \
|
||||
$VK_API_DELETE_PRODUCT)
|
||||
http_code=${response: -3}
|
||||
response_body=${response:0:-3}
|
||||
echo "$(timestamp) [RESPONSE] code=$http_code body=$response_body" >> "$LOG_FILE"
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
# Use the cleanup function instead of directly exiting
|
||||
cleanup 0
|
||||
Reference in New Issue
Block a user