argos/notification-service/notification/src/main/java/gr/cite/notification/query/UserNotificationPreferenceQ...

154 lines
6.2 KiB
Java

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<UserNotificationPreferenceEntity> {
private List<UUID> userId;
private List<IsActive> isActives;
private List<UUID> type;
private List<NotificationContactType> channel;
public UserNotificationPreferenceQuery userId(UUID... userId) {
this.userId = List.of(userId);
return this;
}
public UserNotificationPreferenceQuery userId(List<UUID> userId) {
this.userId = userId;
return this;
}
public UserNotificationPreferenceQuery isActives(IsActive... isActives) {
this.isActives = List.of(isActives);
return this;
}
public UserNotificationPreferenceQuery isActives(List<IsActive> isActives) {
this.isActives = isActives;
return this;
}
public UserNotificationPreferenceQuery type(UUID... type) {
this.type = List.of(type);
return this;
}
public UserNotificationPreferenceQuery type(List<UUID> type) {
this.type = type;
return this;
}
public UserNotificationPreferenceQuery channel(NotificationContactType... channel) {
this.channel = List.of(channel);
return this;
}
public UserNotificationPreferenceQuery channel(List<NotificationContactType> 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<UserNotificationPreferenceEntity> entityClass() {
return UserNotificationPreferenceEntity.class;
}
@Override
protected <X, Y> Predicate applyFilters(QueryContext<X, Y> queryContext) {
List<Predicate> predicates = new ArrayList<>();
if (this.userId != null) {
predicates.add(queryContext.Root.get(UserNotificationPreferenceEntity._userId).in(this.userId));
}
if (this.isActives != null) {
CriteriaBuilder.In<IsActive> 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<NotificationContactType> 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<String> 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;
}
}