113 lines
4.7 KiB
OpenEdge ABL
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;
|
|
}
|
|
}
|
|
} |