93 lines
3.4 KiB
Bash
93 lines
3.4 KiB
Bash
|
|
#!/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
|