#!/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