View Javadoc
1   /*
2    * Copyright (C) 2021 B3Partners B.V.
3    *
4    * SPDX-License-Identifier: MIT
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  }