-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProjectRepository.java
More file actions
89 lines (77 loc) · 2.83 KB
/
Copy pathProjectRepository.java
File metadata and controls
89 lines (77 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package ch.fhnw.timerecordingbackend.repository;
import ch.fhnw.timerecordingbackend.model.Project;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
/**
* Repository für Projekt Entität
* @author PD
* Code von anderen Teammitgliedern oder Quellen wird durch einzelne Kommentare deklariert
* @version 1.1 - Quellenbezeichnung angepasst
*/
@Repository
public interface ProjectRepository extends JpaRepository<Project, Long> {
/**
* Projekt nach Name finden
* @param name
* @return Optional mit Projekt, wenn gefunden, sonst Optional.empty()
*/
Optional<Project> findByName(String name);
/**
* Prüft ob Projekt mit Name vorhanden ist
* @param name
* @return true, wenn Projekt existiert, sonst false
*/
boolean existsByName(String name);
/**
* Gibt alle aktiven Projekte zurück
* @return Liste mit aktiven Projekten
*/
List<Project> findByActiveTrue();
/**
* Gibt alle Projekte eines Manager zurück
* @param id
* @return Liste mit Projekten eines Managers
*/
List<Project> findByManagerId(Long id);
/**
* Gibt alle aktiven Projekte eines Manager zurück
* @param id
* @return Liste mit aktiven Projekten eines Managers
*/
List<Project> findByManagerIdAndActiveTrue(Long id);
/**
* Sucht Projekte mit Suchbegriff
* @param searchTerm Suchbegriff
* @return Liste mit gefundenen Projekten
* Quelle: ChatGPT.com
*/
@Query("SELECT p FROM Project p WHERE LOWER(p.name) LIKE LOWER(CONCAT('%', :searchTerm, '%')) OR LOWER(p.description) LIKE LOWER(CONCAT('%', :searchTerm, '%'))")
List<Project> searchProjects(@Param("searchTerm") String searchTerm);
/**
* Sucht Projekten mit User ID
* @param userId
* @return Liste mit gefundenen Projekten
* Quelle: ChatGPT.com
*/
@Query("SELECT DISTINCT p FROM Project p JOIN p.timeEntries t WHERE t.user.id = :userId")
List<Project> findProjectsByUserId(@Param("userId") Long userId);
/**
* Sucht aktive Projekten mit User ID
* @param userId
* @return Liste mit gefundenen aktiven Projekten
* Quelle: ChatGPT.com
*/
@Query("SELECT DISTINCT p FROM Project p JOIN p.timeEntries t WHERE t.user.id = :userId AND p.active = true")
List<Project> findActiveProjectsByUserId(@Param("userId") Long userId);
/**
* Zählt Benutzer die an einem Projekt gearbeitet haben
* @param projectId
* @return
*/
@Query("SELECT COUNT(DISTINCT t.user.id) FROM TimeEntry t WHERE t.project.id = :projectId")
long countUsersByProjectId(@Param("projectId") Long projectId);
}