1

slight repository refactor

This commit is contained in:
Christoph
2020-04-06 14:55:34 +02:00
parent 9e158ad6d0
commit 5da796d66d

View File

@ -11,30 +11,68 @@ import java.util.List;
@Repository
public interface EventRepository extends CrudRepository<EventDTO, Long> {
@Query("SELECT distinct group_id FROM event WHERE user_id =:id AND event_type = :type")
List<String> findGroupIdsWhereUserId(@Param("id") String userId, @Param("type") String type);
// ####################################### GROUP IDs #########################################
@Query("SELECT * from event WHERE group_id =:id")
List<EventDTO> findEventDTOByGroupId(@Param("id") String groupId);
@Query("SELECT DISTINCT group_id FROM event"
+ "WHERE user_id = :userId AND event_type = :type")
List<String> findGroupIdsByUserAndType(@Param("userId") String userId,
@Param("type") String type);
@Query("SELECT DISTINCT group_id FROM event WHERE event_id > :status")
List<String> findNewEventSinceStatus(@Param("status") Long status);
@Query("SELECT DISTINCT group_id FROM event"
+ "WHERE event_id > :status")
List<String> findGroupIdsWhereEventIdGreaterThanStatus(@Param("status") Long status);
@Query("SELECT * FROM event WHERE group_id IN (:groupIds) ")
List<EventDTO> findAllEventsOfGroups(@Param("groupIds") List<String> groupIds);
// ####################################### EVENT DTOs ########################################
@Query("SELECT * from event"
+ "WHERE group_id = :groupId")
List<EventDTO> findEventDTOsByGroup(@Param("groupId") String groupId);
@Query("SELECT * FROM event"
+ "WHERE group_id IN (:groupIds) ")
List<EventDTO> findEventDTOsByGroups(@Param("groupIds") List<String> groupIds);
@Query("SELECT * FROM event"
+ "WHERE event_type = :type")
List<EventDTO> findEventDTOsByType(@Param("type") String type);
@Query("SELECT * FROM event"
+ "WHERE event_type IN (:types)")
List<EventDTO> findEventDTOsByTypes(@Param("types") List<String> types);
@Query("SELECT * FROM event"
+ "WHERE event_type = :type AND user_id = :userId")
List<EventDTO> findEventDTOsByUserAndType(@Param("type") String type,
@Param("userId") String userId);
@Query("SELECT * FROM event"
+ "WHERE event_type IN (:types) AND user_id = :userId")
List<EventDTO> findEventDTOsByUserAndTypes(@Param("types") List<String> types,
@Param("userId") String userId);
@Query("WITH ranked_events AS ("
+ "SELECT *, ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY id DESC) AS rn"
+ "FROM messages"
+ "WHERE user_id = :userId AND event_type IN (AddUserEvent, DeleteUserEvent)"
+ ")"
+ "SELECT * FROM ranked_events WHERE rn = 1;")
List<EventDTO> findLatestEventDTOsPartitionedByGroupByUser(@Param("userId") String userId);
// ######################################### COUNT ###########################################
@Query("SELECT MAX(event_id) FROM event")
Long getHighesEventID();
Long findMaxEventId();
@Query("SELECT * FROM event WHERE event_type = :type")
List<EventDTO> findAllEventsByType(@Param("type") String type);
@Query("SELECT COUNT(*) FROM event"
+ "WHERE event_type = :type AND group_id = :groupId")
Long countEventDTOsByGroupAndType(@Param("type") String type,
@Param("groupId") String groupId);
@Query("SELECT * FROM event WHERE event_type = :type AND user_id = :userId")
List<EventDTO> findEventsByTypeAndUserId(@Param("type") String type, @Param("userId") String userId);
@Query("SELECT COUNT(*) FROM event WHERE event_type = :type AND group_id = :groupId")
Long countEventsByTypeAndGroupId(@Param("type") String type, @Param("groupId") String groupId);
@Query("SELECT COUNT(*) FROM event WHERE group_id = :groupId AND user_id = :userId AND event_type = :type")
Long countEventsByGroupIdAndUserIdAndEventType(@Param("groupId") String groupId, @Param("userId") String userId, @Param("type") String type);
@Query("SELECT COUNT(*) FROM event"
+ "WHERE group_id = :groupId AND user_id = :userId AND event_type = :type")
Long countEventDTOsByGroupIdAndUserAndType(@Param("groupId") String groupId,
@Param("userId") String userId,
@Param("type") String type);
}