Interface UserMediaListRepository

All Superinterfaces:
org.springframework.data.repository.CrudRepository<UserMediaListModel,UUID>, org.springframework.data.jpa.repository.JpaRepository<UserMediaListModel,UUID>, org.springframework.data.repository.ListCrudRepository<UserMediaListModel,UUID>, org.springframework.data.repository.ListPagingAndSortingRepository<UserMediaListModel,UUID>, org.springframework.data.repository.PagingAndSortingRepository<UserMediaListModel,UUID>, org.springframework.data.repository.query.QueryByExampleExecutor<UserMediaListModel>, org.springframework.data.repository.Repository<UserMediaListModel,UUID>

public interface UserMediaListRepository extends org.springframework.data.jpa.repository.JpaRepository<UserMediaListModel,UUID>
  • Method Summary

    Modifier and Type
    Method
    Description
    long
    Deletes the entry for the given user and media, returning the number of rows deleted.
    boolean
    Returns true if an entry already exists for the given user and media.
    Returns the entry for the given user and media, if present.
    findByUserIdWithFilters(Integer userId, String status, Integer statusId, Integer categoryId, CategoryType categoryName, Integer genreId, String genreName, Integer mediaId, String mediaName, String altTitle)
    Fetches library entries for a given user with optional filters on: status string, status ID (media's production status), media category ID, category name, genre ID, genre name, media ID, media name, and alternative title.

    Methods inherited from interface org.springframework.data.repository.CrudRepository

    count, delete, deleteAll, deleteAll, deleteAllById, deleteById, existsById, findById, save

    Methods inherited from interface org.springframework.data.jpa.repository.JpaRepository

    deleteAllByIdInBatch, deleteAllInBatch, deleteAllInBatch, deleteInBatch, findAll, findAll, flush, getById, getOne, getReferenceById, saveAllAndFlush, saveAndFlush

    Methods inherited from interface org.springframework.data.repository.ListCrudRepository

    findAll, findAllById, saveAll

    Methods inherited from interface org.springframework.data.repository.ListPagingAndSortingRepository

    findAll

    Methods inherited from interface org.springframework.data.repository.PagingAndSortingRepository

    findAll

    Methods inherited from interface org.springframework.data.repository.query.QueryByExampleExecutor

    count, exists, findAll, findBy, findOne
  • Method Details

    • findByUserIdWithFilters

      @Query("SELECT DISTINCT u FROM UserMediaListModel u JOIN u.media m WHERE u.user.id = :userId AND (:status IS NULL OR LOWER(u.status) = LOWER(:status)) AND (:statusId IS NULL OR (m.mediaStatus IS NOT NULL AND m.mediaStatus.id = :statusId)) AND (:categoryId IS NULL OR m.mediaCategory.id = :categoryId) AND (:categoryName IS NULL OR m.mediaCategory.name = :categoryName) AND (:genreId IS NULL OR EXISTS (SELECT 1 FROM GenreModel g WHERE g MEMBER OF m.genre AND g.id = :genreId)) AND (:genreName IS NULL OR EXISTS (SELECT 1 FROM GenreModel g WHERE g MEMBER OF m.genre AND LOWER(g.name) = LOWER(:genreName))) AND (:mediaId IS NULL OR m.id = :mediaId) AND (:mediaName IS NULL OR LOWER(m.name) LIKE LOWER(CONCAT(\'%\', :mediaName, \'%\'))) AND (:altTitle IS NULL OR EXISTS (SELECT 1 FROM AlternativeTitleModel a WHERE a.media = m AND LOWER(a.name) LIKE LOWER(CONCAT(\'%\', :altTitle, \'%\'))))") List<UserMediaListModel> findByUserIdWithFilters(@Param("userId") Integer userId, @Param("status") String status, @Param("statusId") Integer statusId, @Param("categoryId") Integer categoryId, @Param("categoryName") CategoryType categoryName, @Param("genreId") Integer genreId, @Param("genreName") String genreName, @Param("mediaId") Integer mediaId, @Param("mediaName") String mediaName, @Param("altTitle") String altTitle)
      Fetches library entries for a given user with optional filters on: status string, status ID (media's production status), media category ID, category name, genre ID, genre name, media ID, media name, and alternative title.
      Parameters:
      userId - the ID of the authenticated user (required)
      status - optional user tracking status string filter (case-insensitive exact match)
      statusId - optional media production status ID filter (MediaStatusModel.id, Integer)
      categoryId - optional media category ID filter
      categoryName - optional media category name filter (enum exact match)
      genreId - optional genre ID filter
      genreName - optional genre name filter (case-insensitive exact match)
      mediaId - optional media ID filter
      mediaName - optional media name filter (case-insensitive partial match)
      altTitle - optional alternative title filter (case-insensitive partial match)
      Returns:
      a distinct list of matching library entries
    • findByUserIdAndMediaId

      Optional<UserMediaListModel> findByUserIdAndMediaId(Integer userId, Integer mediaId)
      Returns the entry for the given user and media, if present.
    • existsByUserIdAndMediaId

      boolean existsByUserIdAndMediaId(Integer userId, Integer mediaId)
      Returns true if an entry already exists for the given user and media.
    • deleteByUserIdAndMediaId

      @Modifying @Transactional @Query("DELETE FROM UserMediaListModel u WHERE u.user.id = :userId AND u.media.id = :mediaId") long deleteByUserIdAndMediaId(@Param("userId") Integer userId, @Param("mediaId") Integer mediaId)
      Deletes the entry for the given user and media, returning the number of rows deleted.