1
2
3
4
5
6 package org.tailormap.api.repository;
7
8 import jakarta.validation.constraints.NotNull;
9 import java.util.Collection;
10 import java.util.Optional;
11 import org.springframework.data.jpa.repository.EntityGraph;
12 import org.springframework.data.jpa.repository.JpaRepository;
13 import org.springframework.data.jpa.repository.Modifying;
14 import org.springframework.data.jpa.repository.Query;
15 import org.springframework.data.repository.history.RevisionRepository;
16 import org.springframework.data.repository.query.Param;
17 import org.springframework.data.rest.core.annotation.RepositoryRestResource;
18 import org.springframework.lang.NonNull;
19 import org.springframework.security.access.prepost.PreAuthorize;
20 import org.tailormap.api.persistence.User;
21 import org.tailormap.api.security.annotation.PreAuthorizeAdmin;
22
23 @PreAuthorizeAdmin
24 @RepositoryRestResource
25 public interface UserRepository extends JpaRepository<User, String>, RevisionRepository<User, String, Long> {
26 @Override
27 @PreAuthorize("permitAll()")
28 @EntityGraph(attributePaths = {"groups"})
29 @NonNull Optional<User> findById(@NonNull String username);
30
31 boolean existsByGroupsNameIn(Collection<String> groupNames);
32
33 @PreAuthorize("permitAll()")
34 Optional<User> findByEmail(@NonNull String email);
35
36 @PreAuthorize("permitAll()")
37 @Modifying
38 @Query("update User u set u.password= :password where u.username = :username")
39 void updatePassword(@NotNull @Param("username") String username, @NotNull @Param("password") String password);
40 }