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

112 lines
4.6 KiB
Java

package gr.cite.notification.query;
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 org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import jakarta.persistence.Tuple;
import jakarta.persistence.criteria.Predicate;
import java.time.Instant;
import java.util.*;
@Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class UserNotificationPreferenceQuery extends QueryBase<UserNotificationPreferenceEntity> {
private List<UUID> userId;
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 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.type != null) {
predicates.add(queryContext.Root.get(UserNotificationPreferenceEntity._type).in(this.type));
}
if (this.channel != null) {
predicates.add(queryContext.Root.get(UserNotificationPreferenceEntity._channel).in(this.channel));
}
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 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.setCreatedAt(QueryBase.convertSafe(tuple, columns, UserNotificationPreferenceEntity._createdAt, Instant.class));
item.setOrdinal(QueryBase.convertSafe(tuple, columns, UserNotificationPreferenceEntity._ordinal, Integer.class));
return item;
}
}