View Javadoc
1   /*
2    * Copyright (C) 2024 B3Partners B.V.
3    *
4    * SPDX-License-Identifier: MIT
5    */
6   
7   package org.tailormap.api.repository;
8   
9   import java.time.OffsetDateTime;
10  import java.util.List;
11  import java.util.Optional;
12  import java.util.UUID;
13  import org.springframework.data.jpa.repository.EntityGraph;
14  import org.springframework.data.jpa.repository.JpaRepository;
15  import org.springframework.data.jpa.repository.Query;
16  import org.springframework.lang.NonNull;
17  import org.springframework.security.access.prepost.PreAuthorize;
18  import org.tailormap.api.persistence.Upload;
19  
20  public interface UploadRepository extends JpaRepository<Upload, UUID> {
21    @PreAuthorize("permitAll()")
22    @NonNull @Query("select lastModified from Upload where id = :id")
23    Optional<OffsetDateTime> findLastModifiedById(@NonNull UUID id);
24  
25    @PreAuthorize("permitAll()")
26    @NonNull Optional<Upload> findByIdAndCategory(@NonNull UUID id, @NonNull String category);
27  
28    @PreAuthorize("permitAll()")
29    @NonNull @EntityGraph(attributePaths = {"content"})
30    Optional<Upload> findWithContentByIdAndCategory(@NonNull UUID id, @NonNull String category);
31  
32    @PreAuthorize(value = "permitAll()")
33    List<Upload> findByCategory(String category);
34  
35    @PreAuthorize("permitAll()")
36    @NonNull @EntityGraph(attributePaths = {"content"})
37    // Find the most recent upload for a specific category with its content
38    Optional<Upload> findFirstWithContentByCategoryOrderByLastModifiedDesc(@NonNull String category);
39  
40    @PreAuthorize("permitAll()")
41    @Query(
42        "select new org.tailormap.api.repository.UploadMatch(u.id, u.hash) from Upload u where u.category = :category and u.hash in :hashes")
43    List<UploadMatch> findByHashIn(@NonNull String category, @NonNull List<String> hashes);
44  
45    @PreAuthorize("permitAll()")
46    List<Upload> findByFilename(String filename);
47  }