/** * ─────────────────────────────────────────────────────────────────────────────────────────────────┐ * This web service class is use for handle Shopify's Custom / Smart Collection and Collects webhook response. * Trigger on Order delete. * Shopify API Documentation: https://shopify.dev/docs/admin-api/rest/reference * Create Shopify Store: https://www.shopify.com/signup?itcat=identity&itterm=create-new-store * Shopify API Release 2020: https://www.shopify.in/partners/blog/shopify-api-release-january-2020 * What is Person Account in Salesforce ? https://help.salesforce.com/articleView?id=account_person.htm&type=5 * ────────────────────────────────────────────────────────────────────────────────────────────────── * @author Sumit * ────────────────────────────────────────────────────────────────────────────────────────────────── */ @RestResource(URLMApping ='/UpdateCollectionAndCollectsFromShopify/*') global with sharing class UpdateCollectionAndCollectsFromShopify{ @HTTPPost global static void updateCollectionAndCollects(){ RestRequest request = RestContext.request; String store = 'Default'; Map params = request.params; if(!params.isEmpty() && params.containsKey('store') && params.get('store') != null) store = params.get('store'); list configurationList = new list(); String queryConfiguration = 'Select '+CheckAccessibility.isAccessible('name, HIC_ShopifySync__Shopify_URL__c,HIC_ShopifySync__Default_Field_Mapping__c,HIC_ShopifySync__Specify_Close_Date__c,HIC_ShopifySync__Batch_Is_Processing__c, HIC_ShopifySync__API_Key__c, HIC_ShopifySync__Private_Key_Password__c, HIC_ShopifySync__Opportunity__c, HIC_ShopifySync__Order__c, HIC_ShopifySync__Opportunity_Line_Item__c, HIC_ShopifySync__Order_Line_Item__c, HIC_ShopifySync__Order_Fulfillment__c, HIC_ShopifySync__Person_Account__c ','HIC_ShopifySync__HIC_Configuration__c')+' from HIC_ShopifySync__HIC_Configuration__c where '+CheckAccessibility.isAccessible('HIC_ShopifySync__Store__c', 'HIC_ShopifySync__HIC_Configuration__c')+' = \''+store+'\' LIMIT 49999'; configurationList = database.query(queryConfiguration); RestResponse response = RestContext.response; String smartResponse = request.requestBody.toString().trim(); System.debug('smartResponse-->'+smartResponse); String listType = 'List<' + 'HIC_ShopifySync__Collection__c' + '>'; String query = 'Select '+CheckAccessibility.isAccessible('HIC_ShopifySync__SF_Field__c, HIC_ShopifySync__Shopify_Fields__c, HIC_ShopifySync__Nested__c , HIC_ShopifySync__IsSFID__c, HIC_ShopifySync__Default_Value__c, HIC_ShopifySync__Is_Override__c','HIC_ShopifySync__HIC_Field_Mapping__c')+' from HIC_ShopifySync__HIC_Field_Mapping__c Where '+CheckAccessibility.isAccessible('HIC_ShopifySync__Object_Name__c','HIC_ShopifySync__HIC_Field_Mapping__c') +' = \'HIC_ShopifySync__Collection__c\' AND '+CheckAccessibility.isAccessible('HIC_ShopifySync__Store__c','HIC_ShopifySync__HIC_Field_Mapping__c')+' = \''+store+'\' LIMIT 49999'; list collectionFieldsList = new list(); collectionFieldsList = database.query(query); Map meta = (Map) JSON.deserializeUntyped(smartResponse); if(meta.containsKey('rules')){ meta.put('rules',string.valueOf(JSON.serialize(meta.get('rules')))); } list collectionListToupsert = (List)Type.forName(listType).newInstance(); if(!collectionFieldsList.isEmpty() && !meta.isEmpty()){ String companyTimeZone = [SELECT Id, TimeZoneSidKey FROM Organization Limit 1][0].TimeZoneSidKey; collectionListToupsert.add(HIC_ShopifyUtility.processFieldTypeAndMapping(collectionFieldsList,'HIC_ShopifySync__Collection__c',meta,configurationList,companyTimeZone)); } set setofcollection = new set(); if(meta.containskey('id') && String.valueof(meta.get('id')) != '' && String.valueof(meta.get('id')) != null){ setofcollection.add(String.valueof(meta.get('id'))); } list listtodeletecollects = new list(); HIC_ShopifySync__Collection__c collectionoBje = new HIC_ShopifySync__Collection__c(); collectionoBje.HIC_ShopifySync__Shopify_Id__c = String.valueof(meta.get('id')); list listofcollection = new list(); if(!setofcollection.isEmpty()){ String collectsquery = 'Select '+CheckAccessibility.isAccessible('id,HIC_ShopifySync__Shopify_Id__c','HIC_ShopifySync__Collection__c') +' from HIC_ShopifySync__Collection__c Where '+CheckAccessibility.isAccessible('HIC_ShopifySync__Shopify_Id__c','HIC_ShopifySync__Collect__c')+' in : setofcollection limit 1' ; system.debug('collectsquery--> '+collectsquery); listofcollection = database.query(collectsquery); } set setofsfcollectionid = new set(); if(!listofcollection.isEmpty()){ setofsfcollectionid.add(String.valueof(listofcollection[0].id)); } if(!listofcollection.isEmpty()){ String collectsquery = 'Select '+CheckAccessibility.isAccessible('id,HIC_ShopifySync__Collection__c', 'HIC_ShopifySync__Collect__c') +' from HIC_ShopifySync__Collect__c Where '+CheckAccessibility.isAccessible('HIC_ShopifySync__Collection__c','HIC_ShopifySync__Collect__c')+' in : setofsfcollectionid limit 49999' ; listtodeletecollects = database.query(collectsquery); } try{ if(!listtodeletecollects.isEmpty()){ if(CheckAccessibility.isDeletable('HIC_ShopifySync__Collect__c')) database.delete (listtodeletecollects,false); } }catch(Exception e){ system.debug('Error: '+e.getMessage()); } fetchCollectsForWebhooks callBatchAgain = new fetchCollectsForWebhooks(new list {String.valueof(meta.get('id'))},store,true); if(!Test.isRunningTest()) Database.executeBatch(callBatchAgain,1); if(!collectionListToupsert.Isempty()){ //return null; Schema.SObjectType objectType = Schema.getGlobalDescribe().get('HIC_ShopifySync__Collection__c'); Map fieldMap = objectType.getDescribe().fields.getMap(); Schema.SobjectField theField = fieldMap.get('HIC_ShopifySync__Shopify_Id__c'); try{ if(!Test.isRunningTest()){ EmailErrorCSV.makeCsvAndSendInEmail(smartResponse,'HIC_ShopifySync__Collection__c',collectionListToupsert,theField,true,store); if(meta.containsKey('rules') && meta.get('rules') != null){ HIC_ShopifyUtility.deleteSmartCollectionRules(new set {String.valueof(meta.get('id'))}); HIC_ShopifyUtility.insertSmartCollectionRules(new Map {String.valueof(meta.get('id')) => string.valueOf(meta.get('rules'))}); } } }catch(Exception e){ System.debug('Exception '+e.getMessage() + ' at '+ e.getLineNumber()); } } } }