package com.lemans.ds.media import com.lemans.services.LemansService import grails.transaction.Transactional @Transactional class MediaEntityService extends LemansService { def productService def mediaService private static final List MEDIA_ENTITY_FIELDS = ['isHidden', 'entityId', 'entityClass', 'dateCreated', 'lastUpdated'] /** * Find Entity for Media. * * @param criteria containing mediaId * * @return MediaEntity */ Map findMediaEntity(Map criteria) { criteria.sorting = criteria.sorting ?: 'entityClass' List clauses = ['mediaId = :mediaId'] Map data = dqx(criteria).executeFrom('dbo.vwMediaEntity', clauses) data } /** * Find Media for product * * @param criteria containing productId and catalogInstanceId * * @return Media */ Map findMediaForProduct(Map criteria) { if (!productService.findProductById(criteria)) { return [errors: ['Invalid catalog or product relation']] } Map media = mediaService.findMedia(criteria) if (media) { clubMediaEntity(media, criteria.productId) } media } Map findMediaForPart(Map criteria) { Map media = mediaService.findMedia(criteria) if (media) { clubMediaEntity(media, criteria.partNumber) } } Map findMediaForBrand(Map criteria) { Map media = mediaService.findMedia(criteria) if (media) { clubMediaEntity(media, criteria.brandId) } } /** * Find MediaEntity by id(MediaEntityId) * * @param mediaEntityId * * @return MediaEntity */ Map findMediaEntityById(Integer mediaEntityId) { dqx([mediaEntityId: mediaEntityId]).executeOneFrom('vwMediaEntity', ['mediaEntityId = :mediaEntityId'])?.results[0] } Map clubMediaEntity(Map media, String entityId) { media.results.each { Map eachMedia -> Integer mediaId = eachMedia.mediaId MediaEntity mediaEntity = MediaEntity.findByMediaIdAndEntityIdAndDateDeletedIsNull(mediaId, entityId) if (mediaEntity) { MEDIA_ENTITY_FIELDS.each { String field -> eachMedia."$field" = mediaEntity."$field" } } } media } }