-
Notifications
You must be signed in to change notification settings - Fork 3.3k
/
AccountRequestsDb.java
187 lines (157 loc) · 6.7 KB
/
AccountRequestsDb.java
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
package teammates.storage.sqlapi;
import static teammates.common.util.Const.ERROR_UPDATE_NON_EXISTENT;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import teammates.common.datatransfer.AccountRequestStatus;
import teammates.common.exception.EntityDoesNotExistException;
import teammates.common.exception.InvalidParametersException;
import teammates.common.exception.SearchServiceException;
import teammates.common.util.HibernateUtil;
import teammates.storage.sqlentity.AccountRequest;
import teammates.storage.sqlsearch.AccountRequestSearchManager;
import teammates.storage.sqlsearch.SearchManagerFactory;
import jakarta.persistence.TypedQuery;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Root;
/**
* Generates CRUD operations for AccountRequest.
*
* @see AccountRequest
*/
public final class AccountRequestsDb extends EntitiesDb {
private static final AccountRequestsDb instance = new AccountRequestsDb();
private AccountRequestsDb() {
// prevent instantiation
}
public static AccountRequestsDb inst() {
return instance;
}
public AccountRequestSearchManager getSearchManager() {
return SearchManagerFactory.getAccountRequestSearchManager();
}
/**
* Creates an AccountRequest in the database.
*/
public AccountRequest createAccountRequest(AccountRequest accountRequest) throws InvalidParametersException {
assert accountRequest != null;
if (!accountRequest.isValid()) {
throw new InvalidParametersException(accountRequest.getInvalidityInfo());
}
persist(accountRequest);
return accountRequest;
}
/**
* Get AccountRequest by {@code id} from the database.
*/
public AccountRequest getAccountRequest(UUID id) {
assert id != null;
return HibernateUtil.get(AccountRequest.class, id);
}
/**
* Get AccountRequest by {@code email} and {@code institute} from database.
*/
public AccountRequest getAccountRequest(String email, String institute) {
CriteriaBuilder cb = HibernateUtil.getCriteriaBuilder();
CriteriaQuery<AccountRequest> cr = cb.createQuery(AccountRequest.class);
Root<AccountRequest> root = cr.from(AccountRequest.class);
cr.select(root).where(cb.and(cb.equal(
root.get("email"), email), cb.equal(root.get("institute"), institute)));
TypedQuery<AccountRequest> query = HibernateUtil.createQuery(cr);
return query.getResultStream().findFirst().orElse(null);
}
/**
* Get all Account Requests with {@code status} of 'pending'.
*/
public List<AccountRequest> getPendingAccountRequests() {
CriteriaBuilder cb = HibernateUtil.getCriteriaBuilder();
CriteriaQuery<AccountRequest> cr = cb.createQuery(AccountRequest.class);
Root<AccountRequest> root = cr.from(AccountRequest.class);
cr.select(root).where(cb.equal(root.get("status"), AccountRequestStatus.PENDING));
TypedQuery<AccountRequest> query = HibernateUtil.createQuery(cr);
return query.getResultList();
}
/**
* Get all Account Requests.
*/
public List<AccountRequest> getAllAccountRequests() {
CriteriaBuilder cb = HibernateUtil.getCriteriaBuilder();
CriteriaQuery<AccountRequest> cr = cb.createQuery(AccountRequest.class);
Root<AccountRequest> root = cr.from(AccountRequest.class);
cr.select(root);
TypedQuery<AccountRequest> query = HibernateUtil.createQuery(cr);
return query.getResultList();
}
/**
* Get AccountRequest by {@code registrationKey} from database.
*/
public AccountRequest getAccountRequestByRegistrationKey(String registrationKey) {
CriteriaBuilder cb = HibernateUtil.getCriteriaBuilder();
CriteriaQuery<AccountRequest> cr = cb.createQuery(AccountRequest.class);
Root<AccountRequest> root = cr.from(AccountRequest.class);
cr.select(root).where(cb.equal(root.get("registrationKey"), registrationKey));
TypedQuery<AccountRequest> query = HibernateUtil.createQuery(cr);
return query.getResultStream().findFirst().orElse(null);
}
/**
* Get AccountRequest with {@code createdTime} within the times {@code startTime} and {@code endTime}.
*/
public List<AccountRequest> getAccountRequests(Instant startTime, Instant endTime) {
CriteriaBuilder cb = HibernateUtil.getCriteriaBuilder();
CriteriaQuery<AccountRequest> cr = cb.createQuery(AccountRequest.class);
Root<AccountRequest> root = cr.from(AccountRequest.class);
cr.select(root).where(cb.and(cb.greaterThanOrEqualTo(root.get("createdAt"), startTime),
cb.lessThanOrEqualTo(root.get("createdAt"), endTime)));
TypedQuery<AccountRequest> query = HibernateUtil.createQuery(cr);
return query.getResultList();
}
/**
* Updates or creates (if does not exist) the AccountRequest in the database.
*/
public AccountRequest updateAccountRequest(AccountRequest accountRequest)
throws InvalidParametersException, EntityDoesNotExistException {
assert accountRequest != null;
if (!accountRequest.isValid()) {
throw new InvalidParametersException(accountRequest.getInvalidityInfo());
}
if (getAccountRequest(accountRequest.getId()) == null) {
throw new EntityDoesNotExistException(
String.format(ERROR_UPDATE_NON_EXISTENT, accountRequest.toString()));
}
merge(accountRequest);
return accountRequest;
}
/**
* Deletes an AccountRequest.
*/
public void deleteAccountRequest(AccountRequest accountRequest) {
if (accountRequest != null) {
delete(accountRequest);
deleteDocumentByAccountRequestId(accountRequest.getId());
}
}
/**
* Removes search document for the given account request.
*/
public void deleteDocumentByAccountRequestId(UUID accountRequestId) {
if (getSearchManager() != null) {
getSearchManager().deleteDocuments(
Collections.singletonList(accountRequestId.toString()));
}
}
/**
* Searches all account requests in the system.
*
* <p>This is used by admin to search account requests in the whole system.
*/
public List<AccountRequest> searchAccountRequestsInWholeSystem(String queryString)
throws SearchServiceException {
if (queryString.trim().isEmpty()) {
return new ArrayList<>();
}
return getSearchManager().searchAccountRequests(queryString);
}
}