SyncMadeEasy/force-app/main/default/classes/ShopifyConfigurationResourc...

113 lines
4.7 KiB
OpenEdge ABL

@RestResource(urlMapping='/shopifyconfiguration/*')
global class ShopifyConfigurationResource {
@HttpPost
global static ResponseWrapper createConfiguration() {
ResponseWrapper response = new ResponseWrapper();
try {
// Get request body
RestRequest req = RestContext.request;
Map<String, Object> requestBody = (Map<String, Object>) JSON.deserializeUntyped(req.requestBody.toString());
// Extract input parameters from UI
String storeName = (String) requestBody.get('storeName');
String accessToken = (String) requestBody.get('accessToken');
String siteUrl = (String) requestBody.get('siteUrl'); // From UI dropdown
// Validate inputs
if (String.isBlank(storeName) || String.isBlank(accessToken)) {
response.success = false;
response.message = 'storeName and accessToken are required';
response.statusCode = 400;
RestContext.response.statusCode = 400;
return response;
}
// Clean store name (remove .myshopify.com if included)
storeName = storeName.replace('.myshopify.com', '').trim();
// Get Default configuration record with all fields
String query = 'SELECT ';
Map<String, Schema.SObjectField> fieldMap = Schema.SObjectType.HIC_ShopifySync__HIC_Configuration__c.fields.getMap();
for (String fieldName : fieldMap.keySet()) {
// Skip system fields that can't be cloned
if (!fieldName.equalsIgnoreCase('id') &&
!fieldName.equalsIgnoreCase('createddate') &&
!fieldName.equalsIgnoreCase('createdbyid') &&
!fieldName.equalsIgnoreCase('lastmodifieddate') &&
!fieldName.equalsIgnoreCase('lastmodifiedbyid') &&
!fieldName.equalsIgnoreCase('systemmodstamp') &&
!fieldName.equalsIgnoreCase('isdeleted')) {
query += fieldName + ', ';
}
}
query = query.removeEnd(', ');
query += ' FROM HIC_ShopifySync__HIC_Configuration__c WHERE HIC_ShopifySync__Store__c = \'Default\' LIMIT 1';
List<HIC_ShopifySync__HIC_Configuration__c> defaultConfigs = Database.query(query);
if (defaultConfigs.isEmpty()) {
response.success = false;
response.message = 'Default configuration not found';
response.statusCode = 404;
RestContext.response.statusCode = 404;
return response;
}
HIC_ShopifySync__HIC_Configuration__c defaultConfig = defaultConfigs[0];
// Clone the record
HIC_ShopifySync__HIC_Configuration__c newConfig = defaultConfig.clone(false, true, false, false);
// Update the 3 specific fields
newConfig.Name = storeName;
newConfig.HIC_ShopifySync__Store__c = storeName;
newConfig.HIC_ShopifySync__Private_Key_Password__c = accessToken;
// Optionally update Site URL if provided
if (String.isNotBlank(siteUrl)) {
newConfig.HIC_ShopifySync__Salesforce_Site_URL__c = siteUrl; // Adjust field name as per your object
}
// Insert the new record
insert newConfig;
// Return success response
response.success = true;
response.message = 'Configuration created successfully';
response.recordId = newConfig.Id;
response.storeName = storeName;
response.statusCode = 201;
RestContext.response.statusCode = 201;
} catch (DmlException e) {
response.success = false;
response.message = 'Database error: ' + e.getDmlMessage(0);
response.statusCode = 400;
RestContext.response.statusCode = 400;
} catch (Exception e) {
response.success = false;
response.message = 'Error: ' + e.getMessage();
response.statusCode = 500;
RestContext.response.statusCode = 500;
}
return response;
}
// Wrapper class for response
global class ResponseWrapper {
global Boolean success;
global String message;
global String recordId;
global String storeName;
global Integer statusCode;
public ResponseWrapper() {
this.success = false;
this.statusCode = 200;
}
}
}