Index: grails-app/conf/application.groovy =================================================================== diff -u -r3fb6c0e8e7068726c84a18eeb122d345e576b67f -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/conf/application.groovy (.../application.groovy) (revision 3fb6c0e8e7068726c84a18eeb122d345e576b67f) +++ grails-app/conf/application.groovy (.../application.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -1,94 +1,130 @@ -import javax.naming.Context -import javax.naming.InitialContext - -grails.databinding.dateFormats = ["yyyy-MM-dd'T'hh:mm:ss", 'yyyy-MM-dd'] - -environments { - production { - rabbitmq { - connections = [ - [ - name : "main", - virtualHost: ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("rabbitMQVirtualHost").toString(), - host : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("rabbitMQHost").toString(), - username : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("rabbitMQUserName").toString(), - password : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("rabbitMQPassword").toString() - ] - ] - queues = [ - [ - name : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("usToEuSyncQueue").toString(), - durable : true, - exchange: ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("usToEuSyncExchange").toString(), - binding : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("usToEuSyncBinding").toString(), - arguments: ['x-message-ttl': 18000000, 'x-dead-letter-exchange': 'lemans-us-eu-dead-letter-exchange', 'x-dead-letter-routing-key': 'lemans-us-eu-dead-letter-routing-key'] - ] - ] - exchanges = [ - [ - name : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("usToEuSyncExchange").toString(), - type : "direct", - durable: true - ] - ] - } - } - development { - rabbitmq { - connections = [ - [ - name : "main", - host : "dev-rabbitmq01vm.lemanscorp.com", - username: "lemans", - password: "o7GgEz2pA9mA", - virtualHost: "/" - ] - ] - queues = [ - [ - name : "lemans-us-eu-queue", - durable : true, - exchange: "lemans-us-eu-exchange", - binding : "lemans-us-eu-routing-key", - arguments: ['x-message-ttl': 18000000, 'x-dead-letter-exchange': 'lemans-us-eu-dead-letter-exchange', 'x-dead-letter-routing-key': 'lemans-us-eu-dead-letter-routing-key'] - ] - ] - exchanges = [ - [ - name : "lemans-us-eu-exchange", - type : "direct", - durable: true - ] - ] - } - } - test { - rabbitmq { - connections = [ - [ - name : "main", - host : "dev-rabbitmq01vm.lemanscorp.com", - username: "lemans", - password: "o7GgEz2pA9mA", - virtualHost: "/" - ] - ] - queues = [ - [ - name : "lemans-us-eu-queue", - durable : true, - exchange: "lemans-us-eu-exchange", - binding : "lemans-us-eu-routing-key", - arguments: ['x-message-ttl': 18000000, 'x-dead-letter-exchange': 'lemans-us-eu-dead-letter-exchange', 'x-dead-letter-routing-key': 'lemans-us-eu-dead-letter-routing-key'] - ] - ] - exchanges = [ - [ - name : "lemans-us-eu-exchange", - type : "direct", - durable: true - ] - ] - } - } -} +import javax.naming.Context +import javax.naming.InitialContext + +grails.databinding.dateFormats = ["yyyy-MM-dd'T'hh:mm:ss", 'yyyy-MM-dd'] + +environments { + production { + rabbitmq { + connections = [ + [ + name : "main", + virtualHost: ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("rabbitMQVirtualHost").toString(), + host : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("rabbitMQHost").toString(), + username : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("rabbitMQUserName").toString(), + password : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("rabbitMQPassword").toString() + ] + ] + queues = [ + [ + name : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("usToEuSyncQueue").toString(), + durable : true, + exchange: ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("usToEuSyncExchange").toString(), + binding : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("usToEuSyncBinding").toString(), + arguments: ['x-message-ttl': 18000000, 'x-dead-letter-exchange': 'lemans-us-eu-dead-letter-exchange', 'x-dead-letter-routing-key': 'lemans-us-eu-dead-letter-routing-key'] + ], + [ + name : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("realTimeSolrIndexQueue").toString(), + durable : true, + exchange: ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("realTimeSolrIndexExchange").toString(), + binding : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("realTimeSolrIndexBinding").toString(), + arguments: ['x-message-ttl': 18000000, 'x-dead-letter-exchange': 'real-time-solr-index-dead-letter-exchange', 'x-dead-letter-routing-key': 'real-time-solr-index-dead-letter-routing-key'] + ] + ] + exchanges = [ + [ + name : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("usToEuSyncExchange").toString(), + type : "direct", + durable: true + ], + [ + name : ((Context) (new InitialContext().lookup("java:comp/env"))).lookup("realTimeSolrIndexExchange").toString(), + type : "direct", + durable: true + ] + ] + } + } + development { + rabbitmq { + connections = [ + [ + name : "main", + host : "dev-rabbitmq01vm.lemanscorp.com", + username: "lemans", + password: "o7GgEz2pA9mA", + virtualHost: "/" + ] + ] + queues = [ + [ + name : "lemans-us-eu-queue", + durable : true, + exchange: "lemans-us-eu-exchange", + binding : "lemans-us-eu-routing-key", + arguments: ['x-message-ttl': 18000000, 'x-dead-letter-exchange': 'lemans-us-eu-dead-letter-exchange', 'x-dead-letter-routing-key': 'lemans-us-eu-dead-letter-routing-key'] + ], + [ + name : "real-time-solr-index-queue", + durable : true, + exchange: "real-time-solr-index-exchange", + binding : "real-time-solr-index-routing-key", + arguments: ['x-message-ttl': 18000000, 'x-dead-letter-exchange': 'real-time-solr-index-dead-letter-exchange', 'x-dead-letter-routing-key': 'real-time-solr-index-dead-letter-routing-key'] + ] + ] + exchanges = [ + [ + name : "lemans-us-eu-exchange", + type : "direct", + durable: true + ], + [ + name : "real-time-solr-index-exchange", + type : "direct", + durable: true + ] + ] + } + } + test { + rabbitmq { + connections = [ + [ + name : "main", + host : "dev-rabbitmq01vm.lemanscorp.com", + username: "lemans", + password: "o7GgEz2pA9mA", + virtualHost: "/" + ] + ] + queues = [ + [ + name : "lemans-us-eu-queue", + durable : true, + exchange: "lemans-us-eu-exchange", + binding : "lemans-us-eu-routing-key", + arguments: ['x-message-ttl': 18000000, 'x-dead-letter-exchange': 'lemans-us-eu-dead-letter-exchange', 'x-dead-letter-routing-key': 'lemans-us-eu-dead-letter-routing-key'] + ], + [ + name : "real-time-solr-index-queue", + durable : true, + exchange: "real-time-solr-index-exchange", + binding : "real-time-solr-index-routing-key", + arguments: ['x-message-ttl': 18000000, 'x-dead-letter-exchange': 'real-time-solr-index-dead-letter-exchange', 'x-dead-letter-routing-key': 'real-time-solr-index-dead-letter-routing-key'] + ] + ] + exchanges = [ + [ + name : "lemans-us-eu-exchange", + type : "direct", + durable: true + ], + [ + name : "real-time-solr-index-exchange", + type : "direct", + durable: true + ] + ] + } + } +} Index: grails-app/conf/spring/resources.groovy =================================================================== diff -u -ref12d128a6c0c129adc2ce5da72f0602bad21da5 -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/conf/spring/resources.groovy (.../resources.groovy) (revision ef12d128a6c0c129adc2ce5da72f0602bad21da5) +++ grails-app/conf/spring/resources.groovy (.../resources.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -1,71 +1,92 @@ -import com.lemans.reporting.SsrReporter -import grails.util.Environment -import org.apache.solr.client.solrj.impl.HttpSolrClient - -// Place your Spring DSL code here -beans = { - - Environment current = Environment.current - if (current != Environment.PRODUCTION) { - authServiceContext(String, 'http://services2.dev.lemanscorp.com/auth-service/verifyRequest') - temporaryMediaPath(String, 'temporaryMediaPath') - sqlServerReportHost(String, 'http://dev-dbprod03vm') - reportServerExportFolder(String, '/DigitalServicesExport') - mediaPath(String, 'mediaPath/') - mediaPrefix(String, 'media') - dsLocaleImport(String, 'dsLocaleImport/') - sqlServerReportApiAuth(String, 'bGVtYW5zY29ycFxzc3JzaTo0MiFHSDJIWC1mN1Q=') - usToEuSyncQueue(String, "lemans-us-eu-queue") - usToEuSyncExchange(String, "lemans-us-eu-exchange") - usToEuSyncBinding(String, "lemans-us-eu-routing-key") - usToEuSyncToggle(Boolean, false) - solrPrefix (String, "http://dev-solr01vm:8080/solr") - } else { - authServiceContext(org.springframework.jndi.JndiObjectFactoryBean) { - jndiName = 'java:comp/env/authServiceContext' - } - temporaryMediaPath(org.springframework.jndi.JndiObjectFactoryBean) { - jndiName = 'java:comp/env/temporaryMediaPath' - } - sqlServerReportHost(org.springframework.jndi.JndiObjectFactoryBean) { - jndiName = 'java:comp/env/sqlServerReportHost' - } - reportServerExportFolder(org.springframework.jndi.JndiObjectFactoryBean) { - jndiName = 'java:comp/env/reportServerExportFolder' - } - mediaPath(org.springframework.jndi.JndiObjectFactoryBean) { - jndiName = 'java:comp/env/mediaPath' - } - mediaPrefix(org.springframework.jndi.JndiObjectFactoryBean) { - jndiName = 'java:comp/env/mediaPrefix' - } - dsLocaleImport(org.springframework.jndi.JndiObjectFactoryBean) { - jndiName = 'java:comp/env/dsLocaleImport' - } - sqlServerReportApiAuth(org.springframework.jndi.JndiObjectFactoryBean) { - jndiName = 'java:comp/env/sqlServerReportApiAuth' - } - usToEuSyncQueue(org.springframework.jndi.JndiObjectFactoryBean) { - jndiName = 'java:comp/env/usToEuSyncQueue' - } - usToEuSyncExchange(org.springframework.jndi.JndiObjectFactoryBean) { - jndiName = 'java:comp/env/usToEuSyncExchange' - } - usToEuSyncBinding(org.springframework.jndi.JndiObjectFactoryBean) { - jndiName = 'java:comp/env/usToEuSyncBinding' - } - usToEuSyncToggle(org.springframework.jndi.JndiObjectFactoryBean) { - jndiName = 'java:comp/env/usToEuSyncToggle' - } - solrPrefix(org.springframework.jndi.JndiObjectFactoryBean){ - jndiName = 'java:comp/env/solrPrefix' - } - } - - ssrReporter(SsrReporter) { - httpClient = ref('httpClient') - sqlServerReportApiAuth = ref('sqlServerReportApiAuth') - sqlServerReportHost = ref('sqlServerReportHost') - } - -} +import com.lemans.reporting.SsrReporter +import grails.util.Environment +import org.apache.solr.client.solrj.impl.HttpSolrClient + +// Place your Spring DSL code here +beans = { + + Environment current = Environment.current + if (current != Environment.PRODUCTION) { + authServiceContext(String, 'http://services2.dev.lemanscorp.com/auth-service/verifyRequest') + temporaryMediaPath(String, 'temporaryMediaPath') + sqlServerReportHost(String, 'http://dev-dbprod03vm') + reportServerExportFolder(String, '/DigitalServicesExport') + mediaPath(String, 'mediaPath/') + mediaPrefix(String, 'media') + dsLocaleImport(String, 'dsLocaleImport/') + sqlServerReportApiAuth(String, 'bGVtYW5zY29ycFxzc3JzaTo0MiFHSDJIWC1mN1Q=') + + usToEuSyncQueue(String, "lemans-us-eu-queue") + usToEuSyncExchange(String, "lemans-us-eu-exchange") + usToEuSyncBinding(String, "lemans-us-eu-routing-key") + usToEuSyncToggle(Boolean, false) + + realTimeSolrIndexQueue(String, "real-time-solr-index-queue") + realTimeSolrIndexExchange(String, "real-time-solr-index-exchange") + realTimeSolrIndexBinding(String, "real-time-solr-index-routing-key") + realTimeSolrIndexToggle(Boolean, true) + + solrPrefix (String, "http://dev-solr01vm:8080/solr") + } else { + authServiceContext(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/authServiceContext' + } + temporaryMediaPath(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/temporaryMediaPath' + } + sqlServerReportHost(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/sqlServerReportHost' + } + reportServerExportFolder(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/reportServerExportFolder' + } + mediaPath(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/mediaPath' + } + mediaPrefix(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/mediaPrefix' + } + dsLocaleImport(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/dsLocaleImport' + } + sqlServerReportApiAuth(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/sqlServerReportApiAuth' + } + usToEuSyncQueue(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/usToEuSyncQueue' + } + usToEuSyncExchange(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/usToEuSyncExchange' + } + usToEuSyncBinding(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/usToEuSyncBinding' + } + usToEuSyncToggle(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/usToEuSyncToggle' + } + + realTimeSolrIndexQueue(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/realTimeSolrIndexQueue' + } + realTimeSolrIndexExchange(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/realTimeSolrIndexExchange' + } + realTimeSolrIndexBinding(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/realTimeSolrIndexBinding' + } + realTimeSolrIndexToggle(org.springframework.jndi.JndiObjectFactoryBean) { + jndiName = 'java:comp/env/realTimeSolrIndexToggle' + } + + solrPrefix(org.springframework.jndi.JndiObjectFactoryBean){ + jndiName = 'java:comp/env/solrPrefix' + } + } + + ssrReporter(SsrReporter) { + httpClient = ref('httpClient') + sqlServerReportApiAuth = ref('sqlServerReportApiAuth') + sqlServerReportHost = ref('sqlServerReportHost') + } + +} Index: grails-app/controllers/com/lemans/ds/category/CategoryController.groovy =================================================================== diff -u -r3fb6c0e8e7068726c84a18eeb122d345e576b67f -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/controllers/com/lemans/ds/category/CategoryController.groovy (.../CategoryController.groovy) (revision 3fb6c0e8e7068726c84a18eeb122d345e576b67f) +++ grails-app/controllers/com/lemans/ds/category/CategoryController.groovy (.../CategoryController.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -62,6 +62,7 @@ Category category = categoryManagerService.moveCategory(values + [catalogInstanceId: catalogInstanceId, id: id], auditUserName) sequence(category) renderMQObject(category, CATEGORY_MOVE) + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'CATEGORY_MOVE', id: id, body: category]) } else { renderObject cmd } } Index: grails-app/controllers/com/lemans/ds/category/CategoryPartController.groovy =================================================================== diff -u -r3fb6c0e8e7068726c84a18eeb122d345e576b67f -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/controllers/com/lemans/ds/category/CategoryPartController.groovy (.../CategoryPartController.groovy) (revision 3fb6c0e8e7068726c84a18eeb122d345e576b67f) +++ grails-app/controllers/com/lemans/ds/category/CategoryPartController.groovy (.../CategoryPartController.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -11,8 +11,13 @@ if (values.action == 'add' || values.action == 'remove') { if (values.partNumbers && !values.partNumbers?.isEmpty()) { Map data = partManagerService.addOrRemoveParts(values, auditUserName) - data.errors ? renderErrors(data.errors) : render(toJson([results: []])) + data.errors ? renderErrors(data.errors) : renderEmptyPayload(categoryId, values) } else { renderErrors(['No part selected']) } } else { renderErrors(['action must either be add or remove']) } } + + private void renderEmptyPayload(Integer categoryId, Map values) { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'CATEGORY_PART_ADD_REMOVE', id: categoryId, body: values]) + render(toJson([results: []])) + } } Index: grails-app/controllers/com/lemans/ds/category/CategorySpecialistController.groovy =================================================================== diff -u -rce1437deff23cf7431176f7cbe122e0f128cbcb5 -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/controllers/com/lemans/ds/category/CategorySpecialistController.groovy (.../CategorySpecialistController.groovy) (revision ce1437deff23cf7431176f7cbe122e0f128cbcb5) +++ grails-app/controllers/com/lemans/ds/category/CategorySpecialistController.groovy (.../CategorySpecialistController.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -7,6 +7,8 @@ def categorySpecialistService def categorySpecialistManagerService + def rabbitMessageService + def getAllCategoriesAssignedToUser(String userName) { renderPaginated categorySpecialistService.findCategoriesAssignedToUser([userName: userName]) } @@ -16,10 +18,33 @@ } def add(String userName) { - renderObject categorySpecialistManagerService.addCategoryToUser(request.JSON + [userName: userName], auditUserName) + Map payload = request.JSON + [userName: userName] + renderObject(categorySpecialistManagerService.addCategoryToUser(payload, auditUserName)) { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'ADD_CATEGORY_USER_RELATION', id: payload.categoryId, body: payload]) + } } def delete(String userName, Integer categoryId) { - renderDelete categorySpecialistManagerService.deleteCategoryAssignedToUser(userName, categoryId, auditUserName) + renderDelete(categorySpecialistManagerService.deleteCategoryAssignedToUser(userName, categoryId, auditUserName)) { + rabbitMessageService.publishToRealTimeSolrIndexQueue([ requestType: 'DELETE_CATEGORY_USER_RELATION', id: categoryId, body: [] ]) + } } + + void renderObject(data, id = null, Closure closure) { + if (data == null) { notFound() } + else if (data.hasErrors()) { renderErrors(data) } + else { + closure() + show(id ?: data.id) + } + } + + void renderDelete(data, Iterable messages = null, Closure closure) { + if (data == null) { notFound(messages) } + else if (data.hasErrors()) { renderErrors(data) } + else { + closure() + renderEmpty() + } + } } Index: grails-app/controllers/com/lemans/ds/category/CategorySubComCodeController.groovy =================================================================== diff -u -r3fb6c0e8e7068726c84a18eeb122d345e576b67f -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/controllers/com/lemans/ds/category/CategorySubComCodeController.groovy (.../CategorySubComCodeController.groovy) (revision 3fb6c0e8e7068726c84a18eeb122d345e576b67f) +++ grails-app/controllers/com/lemans/ds/category/CategorySubComCodeController.groovy (.../CategorySubComCodeController.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -4,6 +4,7 @@ import static com.lemans.ds.rabbit.QueueRequestType.CATEGORY_SUB_COM_CODE_DELETE import com.lemans.ds.ReportAndLocaleCommonsController +import com.lemans.ds.rabbit.RequestPayload class CategorySubComCodeController extends ReportAndLocaleCommonsController { @@ -21,12 +22,22 @@ def add() { Map values = request.JSON + category() CategorySubComCode categorySubComCode = categorySubComCodeManagerService.addSubComCode(values, auditUserName) - renderMQObject(categorySubComCode, CATEGORY_SUB_COM_CODE_CREATE, categorySubComCode?.subComCodeId) + renderObject(categorySubComCode, categorySubComCode?.subComCodeId) { + if (usToEuSyncToggle == true) { + rabbitMessageService.publishToUsTOEuQueue(new RequestPayload(requestType: CATEGORY_SUB_COM_CODE_CREATE, id: categorySubComCode.id)) + } + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'CATEGORY_SUB_COM_CODE_CREATE', id: values.categoryId, body: categorySubComCode.properties]) + } } def remove(Integer subComCodeId) { CategorySubComCode subComCode = categorySubComCodeManagerService.removeSubComCode(category(), subComCodeId, auditUserName) - renderMQDelete(subComCode, CATEGORY_SUB_COM_CODE_DELETE) + renderDelete(subComCode) { + if (usToEuSyncToggle == true) { + rabbitMessageService.publishToUsTOEuQueue(new RequestPayload(requestType: CATEGORY_SUB_COM_CODE_DELETE, id: subComCode.id)) + } + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'CATEGORY_SUB_COM_CODE_DELETE', id: subComCode.categoryId, body: subComCode.properties]) + } } private Map category() { Index: grails-app/controllers/com/lemans/ds/fitment/PartFitmentController.groovy =================================================================== diff -u -rdb938865e5541580c5452f5959aaa516387b29ed -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/controllers/com/lemans/ds/fitment/PartFitmentController.groovy (.../PartFitmentController.groovy) (revision db938865e5541580c5452f5959aaa516387b29ed) +++ grails-app/controllers/com/lemans/ds/fitment/PartFitmentController.groovy (.../PartFitmentController.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -1,6 +1,7 @@ package com.lemans.ds.fitment import com.lemans.LemansApiController +import com.lemans.api.Packager import org.json.JSONObject import org.json.XML @@ -13,6 +14,8 @@ def partFitmentService + def rabbitMessageService + def fitmentsByPart(String partNumber) { Map data = partFitmentService.findFitmentsByPart([partNumber: partNumber] + common() + pagination()) if (data.results) { @@ -37,13 +40,24 @@ } def delete(String partNumber, Integer fitmentId) { - renderDeleteYear(partFitmentManagerService.deleteFitment(partNumber, fitmentId, auditUserName)) + Map data = partFitmentManagerService.deleteFitment(partNumber, fitmentId, auditUserName) + if (data.errors) { + renderErrors(data.errors) + } else { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PART_FITMENT_DELETE', id: partNumber, body: [fitmentId: fitmentId]]) + render(toJson([:])) + } } private deleteMultipleFitments(Map values) { if (values.partFitmentIds) { Map data = partFitmentManagerService.deleteMultipleFitments(values, auditUserName) - data.errors ? renderErrors(data.errors) : render(toJson([results: [:]])) + if (data.errors) { + renderErrors(data.errors) + } else { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PART_FITMENT_BULK_DELETE', id: values.partNumber, body: values]) + render(toJson([results: [:]])) + } } else { renderErrors(['partFitmentIds are required']) } } @@ -62,6 +76,7 @@ if (values.positions && fitments) { partFitmentManagerService.assignFitmentPositions(values.positions, fitments*.partFitmentId, auditUserName) } + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PART_FITMENT_BULK_CREATE', id: values.partNumber, body: fitments]) values.modelYearId ? renderOne(fitments[0]) : renderList(fitments) } } @@ -73,11 +88,16 @@ if (operation && !(['INSERT'].contains(operation))) { errors << 'operation must be INSERT or DELETE' } } - private renderDeleteYear(Map data) { - data.errors ? renderErrors(data.errors) : render(toJson([:])) - } - private void renderEmptyResults() { render(toJson([results: [], meta: [totalRecords: 0]])) } + + void renderOne(data, Closure closure) { + if (data) { + closure() + render(toJson(new Packager().results(data))) + } else { + notFound() + } + } } Index: grails-app/controllers/com/lemans/ds/flag/FlagValueController.groovy =================================================================== diff -u -r3fb6c0e8e7068726c84a18eeb122d345e576b67f -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/controllers/com/lemans/ds/flag/FlagValueController.groovy (.../FlagValueController.groovy) (revision 3fb6c0e8e7068726c84a18eeb122d345e576b67f) +++ grails-app/controllers/com/lemans/ds/flag/FlagValueController.groovy (.../FlagValueController.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -1,29 +1,36 @@ -package com.lemans.ds.flag - -import com.lemans.LemansApiController - -class FlagValueController extends LemansApiController { - - def flagValueService - - def flagValueManagerService - - def show() { - renderOne flagValueService.findById(filters(['entityClass', 'entityId', 'flagId'])) - } - - def index() { - Map criteria = common() + pagination() + filters(['entityClass', 'entityId']) - renderPaginated flagValueService.findFlags(criteria) - } - - def addOrDeleteFlagValues() { - Map criteria = request.JSON + filters(['entityClass', 'entityId']) - if (criteria.operation && !(criteria.operation in ['INSERT', 'DELETE'])) { - renderErrors(['operation must either be INSERT or DELETE']) - } else { - Map data = flagValueManagerService.addOrDeleteFlagValues(criteria, auditUserName) - data.errors ? renderErrors(data.errors) : render(toJson([results: []])) - } - } -} +package com.lemans.ds.flag + +import com.lemans.LemansApiController + +class FlagValueController extends LemansApiController { + + def flagValueService + + def flagValueManagerService + + def rabbitMessageService + + def show() { + renderOne flagValueService.findById(filters(['entityClass', 'entityId', 'flagId'])) + } + + def index() { + Map criteria = common() + pagination() + filters(['entityClass', 'entityId']) + renderPaginated flagValueService.findFlags(criteria) + } + + def addOrDeleteFlagValues() { + Map criteria = request.JSON + filters(['entityClass', 'entityId']) + if (criteria.operation && !(criteria.operation in ['INSERT', 'DELETE'])) { + renderErrors(['operation must either be INSERT or DELETE']) + } else { + Map data = flagValueManagerService.addOrDeleteFlagValues(criteria, auditUserName) + if (data.errors) { + renderErrors(data.errors) + } else { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'FLAG_VALUE_BULK_INSERT_DELETE', id: null, body: criteria]) + render(toJson([results: []])) + } + } + } +} Index: grails-app/controllers/com/lemans/ds/media/MediaEntityController.groovy =================================================================== diff -u -r19e990915523a1a8b927ee98bce764145c7a4d7b -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/controllers/com/lemans/ds/media/MediaEntityController.groovy (.../MediaEntityController.groovy) (revision 19e990915523a1a8b927ee98bce764145c7a4d7b) +++ grails-app/controllers/com/lemans/ds/media/MediaEntityController.groovy (.../MediaEntityController.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -2,13 +2,21 @@ import com.lemans.LemansApiController +//TODO: Cleanup this code written by Martins class MediaEntityController extends LemansApiController { def mediaEntityService def mediaEntityManagerService + def rabbitMessageService + private static final List ASSOCIATION_FILTERS = ['mediaTypeCode', 'mediaClassificationId', 'flagId', 'languageId', 'originalFileName'] + + def show(Integer mediaEntityId) { + renderOne mediaEntityService.findMediaEntityById(mediaEntityId) + } + def index() { Map criteria = common() + pagination() + [mediaId: params.mediaId] Map data = mediaEntityService.findMediaEntity(criteria) @@ -33,15 +41,25 @@ Map input = request.JSON input.partNumber = partNumber Map data = mediaEntityManagerService.addSinglePartMediaRelation(input, auditUserName) - renderPersistResults(data) + if (data.errors) { + renderErrors(data.errors) + } else { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PART_MEDIA_ADD', id: partNumber, body: input]) + render(toJson([results: []])) + } } def addMediaToProduct(String productId, String catalogInstanceId) { Map input = request.JSON input.productId = productId input.catalogInstanceId = catalogInstanceId Map data = mediaEntityManagerService.addSingleProductMediaRelation(input, auditUserName) - renderPersistResults(data) + if (data.errors) { + renderErrors(data.errors) + } else { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PRODUCT_MEDIA_ADD', id: productId, body: input]) + render(toJson([results: []])) + } } def removeMediaOnPart() { @@ -50,7 +68,12 @@ mediaId: params.mediaId, ] Map data = mediaEntityManagerService.removeSingleMediaRelation(criteria, auditUserName) - renderPersistResults(data) + if (data.errors) { + renderErrors(data.errors) + } else { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PART_MEDIA_REMOVE', id: criteria.partNumber, body: criteria]) + render(toJson([results: []])) + } } def removeMediaOnProduct() { @@ -59,28 +82,40 @@ mediaId: params.mediaId, ] Map data = mediaEntityManagerService.removeSingleMediaRelation(criteria, auditUserName) - renderPersistResults(data) + if (data.errors) { + renderErrors(data.errors) + } else { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PRODUCT_MEDIA_REMOVE', id: criteria.productId, body: criteria]) + render(toJson([results: []])) + } } def bulkAddOrRemoveMediaEntity() { Map values = request.JSON if (values.operation == 'INSERT' || values.operation == 'DELETE') { Map data = mediaEntityManagerService.bulkAddOrRemove(values, auditUserName) - renderPersistResults(data) + if (data.errors) { + renderErrors(data.errors) + } else { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'BULK_MEDIA_ENTITY_ADD_REMOVE', id: null, body: values]) + render(toJson([results: []])) + } } else { renderErrors(['action must either be add or remove']) } } - def renderPersistResults(data) { - data.errors ? renderErrors(data.errors) : render(toJson([results: []])) - } - def updateMediaEntity(Integer mediaId, String entityId) { - renderObject mediaEntityManagerService.updateMediaEntity(request.JSON, mediaId, entityId, auditUserName) + Map payload = request.JSON + renderObject(mediaEntityManagerService.updateMediaEntity(payload, mediaId, entityId, auditUserName)) } - def show(Integer mediaEntityId) { - renderOne mediaEntityService.findMediaEntityById(mediaEntityId) + void renderObject(data, id = null, Closure closure) { + if (data == null) { notFound() } + else if (data.hasErrors()) { renderErrors(data) } + else { + closure() + show(id ?: data.id) + } } } Index: grails-app/controllers/com/lemans/ds/part/PartAttributeController.groovy =================================================================== diff -u -r3fb6c0e8e7068726c84a18eeb122d345e576b67f -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/controllers/com/lemans/ds/part/PartAttributeController.groovy (.../PartAttributeController.groovy) (revision 3fb6c0e8e7068726c84a18eeb122d345e576b67f) +++ grails-app/controllers/com/lemans/ds/part/PartAttributeController.groovy (.../PartAttributeController.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -9,38 +9,48 @@ def partAttributeService def partAttributeManagerService + def categoryPartDetails(Integer catalogInstanceId, Integer categoryId) { + List partNumbers = request.JSON?.partNumber + Map criteria = [catalogInstanceId: catalogInstanceId, id: categoryId, locale: locale] + String detailsXML = isDefaultLocale() ? partAttributeService.partAttributeDetails(criteria, partNumbers) + : partAttributeService.partAttributeLocaleDetails(criteria, partNumbers) + detailsXML ? render(toJson([results: new JsonSlurper().parseText(XML.toJSONObject(detailsXML)?.category?.toString())])) : notFound() + } + def add(String partNumber, Integer attributeNameId) { Map criteria = request.JSON + [partNumber: partNumber, attributeNameId: attributeNameId] - renderResults partAttributeManagerService.addSinglePartAttributeRelation(criteria, auditUserName) + renderResults(partAttributeManagerService.addSinglePartAttributeRelation(criteria, auditUserName)) { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PART_ATTRIBUTE_ADD', id: partNumber, body: criteria]) + } } def remove() { Map criteria = filters(['partNumber', 'attributeNameId', 'attributeValueId']) - renderResults partAttributeManagerService.removeSinglePartAttributeRelation(criteria, auditUserName) + renderResults(partAttributeManagerService.removeSinglePartAttributeRelation(criteria, auditUserName)) { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PART_ATTRIBUTE_REMOVE', id: criteria.partNumber, body: criteria]) + } } def bulkAddOrRemoveOperation() { - renderResults partAttributeManagerService.bulkAddOrRemove(request.JSON, auditUserName) + Map payload = request.JSON + renderResults(partAttributeManagerService.bulkAddOrRemove(payload, auditUserName)) { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PART_ATTRIBUTE_ADD_REMOVE_BULK', id: null, body: payload]) + } } def bulkReplaceOperation(String partNumber, Integer attributeNameId) { Map values = request.JSON + [partNumber: partNumber, attributeNameId: attributeNameId] - renderResults partAttributeManagerService.bulkReplaceAttributeValueRelation(values, auditUserName) + renderResults(partAttributeManagerService.bulkReplaceAttributeValueRelation(values, auditUserName)) { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PART_ATTRIBUTE_REPLACE_BULK', id: partNumber, body: values]) + } } - def categoryPartDetails(Integer catalogInstanceId, Integer categoryId) { - List partNumbers = request.JSON?.partNumber - Map criteria = [catalogInstanceId: catalogInstanceId, id: categoryId, locale: locale] - String detailsXML = isDefaultLocale() ? partAttributeService.partAttributeDetails(criteria, partNumbers) - : partAttributeService.partAttributeLocaleDetails(criteria, partNumbers) - detailsXML ? render(toJson([results: new JsonSlurper().parseText(XML.toJSONObject(detailsXML)?.category?.toString())])) : notFound() - } - - private void renderResults(Map data) { + private void renderResults(Map data, Closure closure) { if (data.messages.find { it.type == 'error' }) { response.status = 400 render toJson(data) } else { + closure() render toJson([results: [:]]) } } Index: grails-app/controllers/com/lemans/ds/part/PartController.groovy =================================================================== diff -u -r3fb6c0e8e7068726c84a18eeb122d345e576b67f -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/controllers/com/lemans/ds/part/PartController.groovy (.../PartController.groovy) (revision 3fb6c0e8e7068726c84a18eeb122d345e576b67f) +++ grails-app/controllers/com/lemans/ds/part/PartController.groovy (.../PartController.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -28,7 +28,9 @@ def update(String partNumber) { Map input = request.JSON + [locale: locale] if (input.primaryMediaId || isDefaultLocale()) { - renderObject partManagerService.updatePart(input, partNumber.toUpperCase(), auditUserName) + renderObject(partManagerService.updatePart(input, partNumber.toUpperCase(), auditUserName)) { + rabbitMessageService.publishToRealTimeSolrIndexQueue([ requestType: 'PART_UPDATE', id: partNumber, body: [] ]) + } } else { PartLocale partLocale = partManagerService.updatePartLocale(input, partNumber.toUpperCase(), auditUserName) renderObject(partLocale, partLocale?.partNumber) Index: grails-app/controllers/com/lemans/ds/product/CategoryProductController.groovy =================================================================== diff -u -r3fb6c0e8e7068726c84a18eeb122d345e576b67f -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/controllers/com/lemans/ds/product/CategoryProductController.groovy (.../CategoryProductController.groovy) (revision 3fb6c0e8e7068726c84a18eeb122d345e576b67f) +++ grails-app/controllers/com/lemans/ds/product/CategoryProductController.groovy (.../CategoryProductController.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -6,11 +6,18 @@ def categoryProductManagerService + def rabbitMessageService + def addOrRemoveAssociation(Integer catalogInstanceId, Integer categoryId) { Map values = request.JSON + [catalogInstanceId: catalogInstanceId, categoryId: categoryId] if (values.operation == 'INSERT' || values.operation == 'DELETE') { Map data = categoryProductManagerService.addOrRemoveCategoryProduct(values, auditUserName) - data.errors ? renderErrors(data.errors) : render(toJson([results: [:]])) + if (data.errors) { + renderErrors(data.errors) + } else { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'CATEGORY_PRODUCT_RELATION', id: categoryId, body: values]) + render(toJson([results: [:]])) + } } else { renderErrors(['action must either be add or remove']) } Index: grails-app/controllers/com/lemans/ds/product/ProductController.groovy =================================================================== diff -u -re7faefd8d1101a14e2454d8607a3e47f84087970 -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/controllers/com/lemans/ds/product/ProductController.groovy (.../ProductController.groovy) (revision e7faefd8d1101a14e2454d8607a3e47f84087970) +++ grails-app/controllers/com/lemans/ds/product/ProductController.groovy (.../ProductController.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -30,19 +30,24 @@ def update(Integer catalogInstanceId, Integer productId) { Map values = request.JSON + common() + [productId: productId] if (isDefaultLocale()) { - renderObject productManagerService.updateProduct(values, catalogInstanceId, auditUserName) + renderObject(productManagerService.updateProduct(values, catalogInstanceId, auditUserName)) { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PRODUCT_UPDATE', id: productId, body: values]) + } } else { ProductLocale productLocale = productManagerService.updateProductWithLocale(values, catalogInstanceId, auditUserName) renderObject(productLocale, productLocale?.productId) } } def remove(Integer catalogInstanceId, Integer productId) { - renderDelete productManagerService.deleteProduct(catalogInstanceId, productId, auditUserName) + renderDelete(productManagerService.deleteProduct(catalogInstanceId, productId, auditUserName)) { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PRODUCT_DELETE', id: productId, body: []]) + } } def splitValidation(Integer productId) { Map data = productService.splitValidationForProduct(productId, filters(['skipFitmentValidation'])) + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'SPLIT_PRODUCT_BY_PRODUCT', id: productId, body: []]) render toJson([results: data.results]) } Index: grails-app/controllers/com/lemans/ds/product/ProductFeatureController.groovy =================================================================== diff -u -r3fb6c0e8e7068726c84a18eeb122d345e576b67f -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/controllers/com/lemans/ds/product/ProductFeatureController.groovy (.../ProductFeatureController.groovy) (revision 3fb6c0e8e7068726c84a18eeb122d345e576b67f) +++ grails-app/controllers/com/lemans/ds/product/ProductFeatureController.groovy (.../ProductFeatureController.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -29,6 +29,7 @@ response.status = 400 renderMessages(data.messages) } else { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PRODUCT_FEATURE_ADD', id: values.productId, body: values]) messages = [infoMessage("Created ${features.size()} Product Feature(s)")] } render toJson(messages: messages, results: data.results) @@ -37,15 +38,17 @@ def update(Integer productFeatureId) { Map values = request.JSON + common() + product() + [productFeatureId: productFeatureId] if (isDefaultLocale()) { - renderObject productFeatureManagerService.updateProductFeature(values, auditUserName) + renderObject(productFeatureManagerService.updateProductFeature(values, auditUserName)) } else { ProductFeatureLocale featureLocale = productFeatureManagerService.updateProductFeatureWithLocale(values, auditUserName) renderObject(featureLocale, featureLocale?.productFeatureId) } } def remove(Integer productId, Integer productFeatureId) { - renderDelete productFeatureManagerService.deleteProductFeature(productId, productFeatureId, auditUserName) + renderDelete(productFeatureManagerService.deleteProductFeature(productId, productFeatureId, auditUserName)) { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PRODUCT_FEATURE_DELETE', id: productId, body: [productFeatureId: productFeatureId]]) + } } def move(Integer productFeatureId) { Index: grails-app/controllers/com/lemans/ds/product/ProductPartController.groovy =================================================================== diff -u -r3fb6c0e8e7068726c84a18eeb122d345e576b67f -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/controllers/com/lemans/ds/product/ProductPartController.groovy (.../ProductPartController.groovy) (revision 3fb6c0e8e7068726c84a18eeb122d345e576b67f) +++ grails-app/controllers/com/lemans/ds/product/ProductPartController.groovy (.../ProductPartController.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -41,27 +41,33 @@ values.productId = productId values << catalog() Map data = productPartManagerService.bulkAddOrRemove(values, auditUserName) - renderPersistResults(data) + if (data.errors) { + renderErrors(data.errors) + } else { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PRODUCT_PART_BULK_ADD_REMOVE', id: productId, body: values]) + render(toJson([results: [:]])) + } } - private void renderDetails(String categoryDetails) { - Map details = new JsonSlurper().parseText(categoryDetails) - Map data = [results: details] - render toJson(data) - } - def remove() { Map criteria = [ catalogInstanceId: params.catalogInstanceId, partNumber: params.partNumber, productId: params.productId ] Map data = productPartManagerService.removeSingleProductPartRelation(criteria, auditUserName) - renderPersistResults(data) + if (data.errors) { + renderErrors(data.errors) + } else { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PRODUCT_PART_REMOVE', id: criteria.partNumber, body: criteria]) + render(toJson([results: [:]])) + } } - private void renderPersistResults(Map data) { - data.errors ? renderErrors(data.errors) : render(toJson([results: [:]])) + private void renderDetails(String categoryDetails) { + Map details = new JsonSlurper().parseText(categoryDetails) + Map data = [results: details] + render toJson(data) } private Map catalog() { [catalogInstanceId: params.int('catalogInstanceId')] } Index: grails-app/controllers/com/lemans/ds/publicationcategory/ProductPublicationCategoryController.groovy =================================================================== diff -u -r43341f42dab886dcbc28909615436ed9713b79a0 -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/controllers/com/lemans/ds/publicationcategory/ProductPublicationCategoryController.groovy (.../ProductPublicationCategoryController.groovy) (revision 43341f42dab886dcbc28909615436ed9713b79a0) +++ grails-app/controllers/com/lemans/ds/publicationcategory/ProductPublicationCategoryController.groovy (.../ProductPublicationCategoryController.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -9,6 +9,8 @@ def productPublicationCategoryManagerService + def rabbitMessageService + def byCategoryId(Integer categoryId) { Map criteria = common() + pagination() + [categoryId: categoryId, isDigiActive: 1] renderPaginated productPublicationCategoryService.getProductPublicationCategory(criteria) @@ -24,13 +26,18 @@ } def add(Integer categoryId) { - ProductPublicationCategory productPublicationCategory = productPublicationCategoryManagerService.add(request.JSON, categoryId, auditUserName) + Map payload = request.JSON + ProductPublicationCategory productPublicationCategory = productPublicationCategoryManagerService.add(payload, categoryId, auditUserName) productPublicationCategoryManagerService.flushAndSequence(productPublicationCategory, auditUserName) - renderObject productPublicationCategory + renderObject(productPublicationCategory) { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PRODUCT_PUBLICATION_CATEGORY_CREATE', id: payload.productId, body: productPublicationCategory.properties]) + } } def delete(Integer categoryId, Integer productId) { - renderDelete productPublicationCategoryManagerService.deleteProductPublicationCategory(categoryId, productId, auditUserName) + renderDelete(productPublicationCategoryManagerService.deleteProductPublicationCategory(categoryId, productId, auditUserName)) { + rabbitMessageService.publishToRealTimeSolrIndexQueue([requestType: 'PRODUCT_PUBLICATION_CATEGORY_DELETE', id: productId, body: [categoryId: categoryId]]) + } } def move(Integer categoryId, Integer productId) { @@ -42,4 +49,22 @@ renderObject cmd } } + + void renderObject(data, id = null, Closure closure) { + if (data == null) { notFound() } + else if (data.hasErrors()) { renderErrors(data) } + else { + closure() + show(id ?: data.id) + } + } + + void renderDelete(data, Iterable messages = null, Closure closure) { + if (data == null) { notFound(messages) } + else if (data.hasErrors()) { renderErrors(data) } + else { + closure() + renderEmpty() + } + } } Index: grails-app/services/com/lemans/ds/rabbit/RabbitMessageService.groovy =================================================================== diff -u -r3fb6c0e8e7068726c84a18eeb122d345e576b67f -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- grails-app/services/com/lemans/ds/rabbit/RabbitMessageService.groovy (.../RabbitMessageService.groovy) (revision 3fb6c0e8e7068726c84a18eeb122d345e576b67f) +++ grails-app/services/com/lemans/ds/rabbit/RabbitMessageService.groovy (.../RabbitMessageService.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -1,18 +1,34 @@ -package com.lemans.ds.rabbit - -class RabbitMessageService { - - def rabbitMessagePublisher - - def usToEuSyncExchange - - def usToEuSyncBinding - - void publishToUsTOEuQueue(RequestPayload payload) { - rabbitMessagePublisher.send { - exchange = usToEuSyncExchange - routingKey = usToEuSyncBinding - body = [requestType: payload.requestType, id: payload.id, body: payload.body] - } - } -} +package com.lemans.ds.rabbit + +class RabbitMessageService { + + def rabbitMessagePublisher + + def usToEuSyncExchange + + def usToEuSyncBinding + + def realTimeSolrIndexExchange + + def realTimeSolrIndexBinding + + def realTimeSolrIndexToggle + + void publishToUsTOEuQueue(RequestPayload payload) { + rabbitMessagePublisher.send { + exchange = usToEuSyncExchange + routingKey = usToEuSyncBinding + body = [requestType: payload.requestType, id: payload.id, body: payload.body] + } + } + + void publishToRealTimeSolrIndexQueue(Map payload) { + if (realTimeSolrIndexToggle == true) { + rabbitMessagePublisher.send { + exchange = realTimeSolrIndexExchange + routingKey = realTimeSolrIndexBinding + body = [requestType: payload.requestType, id: payload.id, body: payload.body] + } + } + } +} Index: src/integration-test/groovy/com/lemans/ds/exporting/BulkUploadExportReportFuncSpec.groovy =================================================================== diff -u -r3fb6c0e8e7068726c84a18eeb122d345e576b67f -rf9d51371949fd73ef0770ba9d8c45d8fe538ea1c --- src/integration-test/groovy/com/lemans/ds/exporting/BulkUploadExportReportFuncSpec.groovy (.../BulkUploadExportReportFuncSpec.groovy) (revision 3fb6c0e8e7068726c84a18eeb122d345e576b67f) +++ src/integration-test/groovy/com/lemans/ds/exporting/BulkUploadExportReportFuncSpec.groovy (.../BulkUploadExportReportFuncSpec.groovy) (revision f9d51371949fd73ef0770ba9d8c45d8fe538ea1c) @@ -1,6 +1,7 @@ package com.lemans.ds.exporting import com.lemans.ds.testing.DsFuncSpec +import spock.lang.Ignore class BulkUploadExportReportFuncSpec extends DsFuncSpec { @@ -26,6 +27,7 @@ payload.response.headers.'content-disposition'.contains 'ProductExport.xls' } + @Ignore//Ignore temp until Murali fixes the server -08-05-2019 def 'can download a category attribute value report for locale bulk upload'() { given: String reportName = 'categoryAttributeLocaleExport'