package gr.cite.notification.query; import gr.cite.notification.common.enums.IsActive; import gr.cite.notification.common.enums.NotificationContactType; import gr.cite.notification.data.UserNotificationPreferenceEntity; import gr.cite.notification.model.UserNotificationPreference; import gr.cite.tools.data.query.FieldResolver; import gr.cite.tools.data.query.QueryBase; import gr.cite.tools.data.query.QueryContext; import jakarta.persistence.Tuple; import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.Predicate; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import java.time.Instant; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.UUID; @Component @Scope(BeanDefinition.SCOPE_PROTOTYPE) public class UserNotificationPreferenceQuery extends QueryBase { private List userId; private List isActives; private List type; private List channel; public UserNotificationPreferenceQuery userId(UUID... userId) { this.userId = List.of(userId); return this; } public UserNotificationPreferenceQuery userId(List userId) { this.userId = userId; return this; } public UserNotificationPreferenceQuery isActives(IsActive... isActives) { this.isActives = List.of(isActives); return this; } public UserNotificationPreferenceQuery isActives(List isActives) { this.isActives = isActives; return this; } public UserNotificationPreferenceQuery type(UUID... type) { this.type = List.of(type); return this; } public UserNotificationPreferenceQuery type(List type) { this.type = type; return this; } public UserNotificationPreferenceQuery channel(NotificationContactType... channel) { this.channel = List.of(channel); return this; } public UserNotificationPreferenceQuery channel(List channel) { this.channel = channel; return this; } @Override protected Boolean isFalseQuery() { return this.isNullOrEmpty(this.userId) && this.isNullOrEmpty(this.type) && this.isNullOrEmpty(this.channel); } @Override protected Class entityClass() { return UserNotificationPreferenceEntity.class; } @Override protected Predicate applyFilters(QueryContext queryContext) { List predicates = new ArrayList<>(); if (this.userId != null) { predicates.add(queryContext.Root.get(UserNotificationPreferenceEntity._userId).in(this.userId)); } if (this.isActives != null) { CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserNotificationPreferenceEntity._isActive)); for (IsActive item : this.isActives) inClause.value(item); predicates.add(inClause); } if (this.type != null) { predicates.add(queryContext.Root.get(UserNotificationPreferenceEntity._type).in(this.type)); } if (this.channel != null) { CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(UserNotificationPreferenceEntity._channel)); for (NotificationContactType item : this.channel) inClause.value(item); predicates.add(inClause); } if (!predicates.isEmpty()) { Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); return queryContext.CriteriaBuilder.and(predicatesArray); } else { return null; } } @Override protected String fieldNameOf(FieldResolver item) { if (item.match(UserNotificationPreference._userId)) return UserNotificationPreferenceEntity._userId; else if (item.match(UserNotificationPreference._tenantId)) return UserNotificationPreferenceEntity._tenantId; else if (item.match(UserNotificationPreference._type)) return UserNotificationPreferenceEntity._type; else if (item.match(UserNotificationPreference._channel)) return UserNotificationPreferenceEntity._channel; else if (item.match(UserNotificationPreference._ordinal)) return UserNotificationPreferenceEntity._ordinal; else if (item.match(UserNotificationPreference._createdAt)) return UserNotificationPreferenceEntity._createdAt; else if (item.match(UserNotificationPreference._updatedAt)) return UserNotificationPreferenceEntity._updatedAt; else if (item.match(UserNotificationPreference._isActive)) return UserNotificationPreferenceEntity._isActive; else return null; } @Override protected UserNotificationPreferenceEntity convert(Tuple tuple, Set columns) { UserNotificationPreferenceEntity item = new UserNotificationPreferenceEntity(); item.setUserId(QueryBase.convertSafe(tuple, columns, UserNotificationPreferenceEntity._userId, UUID.class)); item.setChannel(QueryBase.convertSafe(tuple, columns, UserNotificationPreferenceEntity._channel, NotificationContactType.class)); item.setType(QueryBase.convertSafe(tuple, columns, UserNotificationPreferenceEntity._type, UUID.class)); item.setTenantId(QueryBase.convertSafe(tuple, columns, UserNotificationPreferenceEntity._tenantId, UUID.class)); item.setOrdinal(QueryBase.convertSafe(tuple, columns, UserNotificationPreferenceEntity._ordinal, Integer.class)); item.setCreatedAt(QueryBase.convertSafe(tuple, columns, UserNotificationPreferenceEntity._createdAt, Instant.class)); item.setUpdatedAt(QueryBase.convertSafe(tuple, columns, UserNotificationPreferenceEntity._updatedAt, Instant.class)); item.setIsActive(QueryBase.convertSafe(tuple, columns, UserNotificationPreferenceEntity._isActive, IsActive.class)); return item; } }