Skip to content

Commit a9e0487

Browse files
committed
added tests and refactored code
1 parent 5741434 commit a9e0487

File tree

16 files changed

+1750
-1142
lines changed

16 files changed

+1750
-1142
lines changed

src/main/java/de/OneManProjects/Database.java

Lines changed: 0 additions & 1033 deletions
This file was deleted.

src/main/java/de/OneManProjects/Main.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
import de.OneManProjects.api.Responses;
3535
import de.OneManProjects.api.Users;
3636
import de.OneManProjects.data.dto.*;
37+
import de.OneManProjects.database.Database;
38+
import de.OneManProjects.database.Tokens;
3739
import de.OneManProjects.mail.Mail;
3840
import de.OneManProjects.security.Auth;
3941
import de.OneManProjects.security.UserToken;
@@ -226,7 +228,7 @@ private static void refresh(final Context ctx) throws SQLException {
226228
final String refreshToken = ctx.cookie("refresh");
227229
final Optional<Integer> userID = Auth.validateRefreshToken(refreshToken);
228230
if (userID.isPresent()) {
229-
Database.deleteToken(refreshToken, userID.get());
231+
Tokens.deleteToken(refreshToken, userID.get());
230232
Auth.setCookies(ctx, userID.get());
231233
final Response response = new Response(true);
232234
ctx.json(response);
@@ -249,7 +251,7 @@ private static void logout(final Context ctx) throws SQLException {
249251
final int userId = Auth.getUserFromContext(ctx);
250252
ctx.removeCookie("jwt", "/api");
251253
ctx.removeCookie("refresh", "/api");
252-
Database.deleteAllRefreshTokensForUser(userId);
254+
Tokens.deleteAllRefreshTokensForUser(userId);
253255
ctx.status(200).result("Logged out");
254256
}
255257

@@ -272,7 +274,7 @@ private static void logout(final Context ctx) throws SQLException {
272274
private static void login(final Context ctx) throws SQLException {
273275
final Login login = ctx.bodyAsClass(Login.class);
274276
if (Auth.login(login)) {
275-
final Optional<Integer> userID = Database.getUserID(login.mail());
277+
final Optional<Integer> userID = de.OneManProjects.database.Users.getUserID(login.mail());
276278
if (userID.isPresent()) {
277279
Auth.setCookies(ctx, userID.get());
278280
final Response response = new Response(true);
@@ -303,10 +305,10 @@ private static void login(final Context ctx) throws SQLException {
303305
)
304306
private static void sendResetPasswordLink(final Context ctx) throws SQLException, MessagingException, IOException {
305307
final String mail = ctx.bodyAsClass(String.class);
306-
final Optional<Integer> userId = Database.getUserID(mail);
308+
final Optional<Integer> userId = de.OneManProjects.database.Users.getUserID(mail);
307309
if (userId.isPresent()) {
308310
final String token = UUID.randomUUID().toString();
309-
final boolean result = Database.resetPasswordToken(token, userId.get());
311+
final boolean result = Tokens.resetPasswordToken(token, userId.get());
310312
Mail.sendPasswordReset(mail, token);
311313
Responses.setResponseOrError(ctx, result);
312314
}
@@ -330,7 +332,7 @@ private static void sendResetPasswordLink(final Context ctx) throws SQLException
330332
)
331333
private static void validToken(final Context ctx) throws SQLException {
332334
final String token = ctx.bodyAsClass(String.class);
333-
final Optional<UserToken> userToken = Database.getToken(token);
335+
final Optional<UserToken> userToken = Tokens.getToken(token);
334336
if (userToken.isPresent()) {
335337
Responses.setResponseOrError(ctx, true);
336338
} else {
@@ -356,11 +358,11 @@ private static void validToken(final Context ctx) throws SQLException {
356358
)
357359
private static void resetPasswordByToken(final Context ctx) throws SQLException {
358360
final PasswordReset reset = ctx.bodyAsClass(PasswordReset.class);
359-
final Optional<UserToken> userToken = Database.getToken(reset.token());
361+
final Optional<UserToken> userToken = Tokens.getToken(reset.token());
360362
if (userToken.isPresent() && userToken.get().expiration().isPresent() && userToken.get().expiration().get().after(Timestamp.from(Instant.now()))) {
361-
final Optional<String> userMail = Database.getUserMail(userToken.get().user());
363+
final Optional<String> userMail = de.OneManProjects.database.Users.getUserMail(userToken.get().user());
362364
if (userMail.isPresent()) {
363-
final boolean res = Database.updatePassword(userToken.get().user(), Auth.hashPassword(reset.newPassword()));
365+
final boolean res = de.OneManProjects.database.Users.updatePassword(userToken.get().user(), Auth.hashPassword(reset.newPassword()));
364366
Responses.setResponseOrError(ctx, res);
365367
} else {
366368
ctx.status(HttpStatus.NOT_FOUND);

src/main/java/de/OneManProjects/api/Admins.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@
2626
* #L%
2727
*/
2828

29-
import de.OneManProjects.Database;
3029
import de.OneManProjects.data.User;
3130
import de.OneManProjects.data.dto.AdminData;
3231
import de.OneManProjects.data.dto.PrivacyInfo;
32+
import de.OneManProjects.database.Groups;
33+
import de.OneManProjects.database.Projects;
34+
import de.OneManProjects.database.Users;
3335
import de.OneManProjects.mail.Mail;
3436
import de.OneManProjects.security.Auth;
3537
import io.javalin.http.Context;
@@ -67,7 +69,7 @@ public class Admins {
6769
public static void adminUpdateRoles(final Context ctx) throws SQLException {
6870
if (Auth.isUserAdmin(ctx)) {
6971
final User user = ctx.bodyAsClass(User.class);
70-
final boolean res = Database.updateUserRole(user.id(), user.roles());
72+
final boolean res = Users.updateUserRole(user.id(), user.roles());
7173
Responses.setResponseOrError(ctx, res);
7274
} else {
7375
ctx.status(HttpStatus.FORBIDDEN);
@@ -93,7 +95,7 @@ public static void adminAddNewUser(final Context ctx) throws SQLException, Messa
9395
if (Auth.isUserAdmin(ctx)) {
9496
final User newUser = ctx.bodyAsClass(User.class);
9597
final String p = Auth.createRandomPassword();
96-
final boolean res = Database.addNewUser(newUser, p);
98+
final boolean res = Users.addNewUser(newUser, p);
9799
if (res) {
98100
Mail.sendInvite(newUser.mail(), p);
99101
}
@@ -121,8 +123,8 @@ public static void adminAddNewUser(final Context ctx) throws SQLException, Messa
121123
public static void adminDeleteUser(final Context ctx) throws SQLException {
122124
if (Auth.isUserAdmin(ctx)) {
123125
final int userToDel = ctx.bodyAsClass(Integer.class);
124-
final boolean res1 = Database.deleteUser(userToDel);
125-
final boolean res2 = Database.deleteAllUserProjects(userToDel);
126+
final boolean res1 = Users.deleteUser(userToDel);
127+
final boolean res2 = Projects.deleteAllUserProjects(userToDel);
126128
Responses.setResponseOrError(ctx, res1 && res2);
127129
}
128130
else {
@@ -142,7 +144,7 @@ public static void adminDeleteUser(final Context ctx) throws SQLException {
142144
)
143145
public static void getAdminData(final Context ctx) throws SQLException {
144146
if (Auth.isUserAdmin(ctx)) {
145-
Responses.setResponseOrError(ctx, Optional.of(new AdminData(Database.getAllUsers(), Database.getAllGroups(), new ArrayList<>())), false);
147+
Responses.setResponseOrError(ctx, Optional.of(new AdminData(Users.getAllUsers(), Groups.getAllGroups(), new ArrayList<>())), false);
146148
} else {
147149
ctx.status(HttpStatus.FORBIDDEN);
148150
}

src/main/java/de/OneManProjects/api/Groups.java

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,13 @@
2626
* #L%
2727
*/
2828

29-
import de.OneManProjects.Database;
3029
import de.OneManProjects.data.Group;
3130
import de.OneManProjects.data.Project;
3231
import de.OneManProjects.data.Tracked;
3332
import de.OneManProjects.data.User;
3433
import de.OneManProjects.data.dto.*;
34+
import de.OneManProjects.database.Projects;
35+
import de.OneManProjects.database.Users;
3536
import de.OneManProjects.export.Exporter;
3637
import de.OneManProjects.mail.Mail;
3738
import de.OneManProjects.security.Auth;
@@ -71,10 +72,10 @@ public static void getGroupDetails(final Context ctx) throws SQLException {
7172
if (Auth.isUserGroup(ctx)) {
7273
final int userId = Auth.getUserFromContext(ctx);
7374
final int groupId = ctx.bodyAsClass(Integer.class);
74-
final Optional<de.OneManProjects.data.Group> group = Database.getGroup(groupId, userId);
75+
final Optional<de.OneManProjects.data.Group> group = de.OneManProjects.database.Groups.getGroup(groupId, userId);
7576
if (group.isPresent()) {
76-
final List<User> users = Database.getUsersInGroup(groupId);
77-
final List<Project> projects = Database.getProjectsFromGroup(groupId, true);
77+
final List<User> users = de.OneManProjects.database.Groups.getUsersInGroup(groupId);
78+
final List<Project> projects = Projects.getProjectsFromGroup(groupId, true);
7879
Responses.setResponseOrError(ctx, new GroupDetails(group.get(), users, projects));
7980
} else {
8081
ctx.status(HttpStatus.FORBIDDEN);
@@ -113,7 +114,7 @@ public static void exportData(final Context ctx) throws SQLException {
113114
final ExportFilter filter = ctx.bodyAsClass(ExportFilter.class);
114115
if (filter.groupId().isPresent()) {
115116
final int userId = Auth.getUserFromContext(ctx);
116-
final Optional<Group> group = Database.getGroup(filter.groupId().get(), userId);
117+
final Optional<Group> group = de.OneManProjects.database.Groups.getGroup(filter.groupId().get(), userId);
117118
if (group.isPresent()) {
118119
final byte[] data = Exporter.exportGroupData(filter, group.get().getId());
119120
final String fileName = getExportFilename(filter.filter(), group.get().getTitle());
@@ -148,11 +149,11 @@ public static void getGroupDataToAnalyse(final Context ctx) throws SQLException
148149
final int userId = Auth.getUserFromContext(ctx);
149150
final DataFilter filter = ctx.bodyAsClass(DataFilter.class);
150151
if (filter.groupId().isPresent()) {
151-
final Optional<de.OneManProjects.data.Group> group = Database.getGroup(filter.groupId().get(), userId);
152+
final Optional<de.OneManProjects.data.Group> group = de.OneManProjects.database.Groups.getGroup(filter.groupId().get(), userId);
152153
if (group.isPresent() && group.get().getOwner() == userId) {
153-
final List<Project> groupProjects = Database.getGroupProjects(filter.groupId().get(), true);
154+
final List<Project> groupProjects = Projects.getGroupProjects(filter.groupId().get(), true);
154155
final List<Integer> groupProjectIds = groupProjects.stream().map(Project::getId).toList();
155-
final List<Tracked> tracked = Database.getGroupTrackedForRange(groupProjectIds, Instant.parse(filter.start()), Instant.parse(filter.end()));
156+
final List<Tracked> tracked = Projects.getGroupTrackedForRange(groupProjectIds, Instant.parse(filter.start()), Instant.parse(filter.end()));
156157
Responses.setResponseOrError(ctx, new AnalysisData(new ArrayList<>(), groupProjects, tracked));
157158
}
158159

@@ -181,7 +182,7 @@ public static void groupUserCreateGroup(final Context ctx) throws SQLException {
181182
if (Auth.isUserGroup(ctx)) {
182183
final int userID = Auth.getUserFromContext(ctx);
183184
final de.OneManProjects.data.Group newGroup = ctx.bodyAsClass(de.OneManProjects.data.Group.class);
184-
final boolean res = Database.addNewGroup(newGroup, userID);
185+
final boolean res = de.OneManProjects.database.Groups.addNewGroup(newGroup, userID);
185186
Responses.setResponseOrError(ctx, res);
186187
} else {
187188
ctx.status(HttpStatus.FORBIDDEN);
@@ -207,15 +208,15 @@ public static void groupDelete(final Context ctx) throws SQLException {
207208
if (Auth.isUserGroup(ctx)) {
208209
final int userID = Auth.getUserFromContext(ctx);
209210
final int groupId = ctx.bodyAsClass(Integer.class);
210-
final boolean res = Database.deleteGroup(groupId, userID);
211+
final boolean res = de.OneManProjects.database.Groups.deleteGroup(groupId, userID);
211212
Responses.setResponseOrError(ctx, res);
212213
} else {
213214
ctx.status(HttpStatus.FORBIDDEN);
214215
}
215216
}
216217

217218
private static boolean canUserManageGroup(final int userID, final int groupId) throws SQLException {
218-
final Optional<de.OneManProjects.data.Group> group = Database.getGroup(groupId, userID);
219+
final Optional<de.OneManProjects.data.Group> group = de.OneManProjects.database.Groups.getGroup(groupId, userID);
219220
return group.isPresent();
220221
}
221222

@@ -238,12 +239,12 @@ public static void groupUserInvite(final Context ctx) throws SQLException, Messa
238239
if (Auth.isUserGroup(ctx)) {
239240
final int userID = Auth.getUserFromContext(ctx);
240241
final GroupToUser groupToUser = ctx.bodyAsClass(GroupToUser.class);
241-
final Optional<de.OneManProjects.data.Group> group = Database.getGroup(groupToUser.groupId(), userID);
242+
final Optional<de.OneManProjects.data.Group> group = de.OneManProjects.database.Groups.getGroup(groupToUser.groupId(), userID);
242243
if (group.isPresent()) {
243-
final Optional<Integer> id = Database.getUserID(groupToUser.mail());
244+
final Optional<Integer> id = Users.getUserID(groupToUser.mail());
244245
if (id.isPresent()) {
245-
final boolean res = Database.addUserToGroup(groupToUser.groupId(), id.get());
246-
final Optional<String> userMail = Database.getUserMail(id.get());
246+
final boolean res = de.OneManProjects.database.Groups.addUserToGroup(groupToUser.groupId(), id.get());
247+
final Optional<String> userMail = Users.getUserMail(id.get());
247248
if (res && userMail.isPresent()) {
248249
Mail.sendGroupInvite(userMail.get(), group.get().getTitle());
249250
Responses.setResponseOrError(ctx, "Invite sent");
@@ -281,9 +282,9 @@ public static void groupUserRemove(final Context ctx) throws SQLException {
281282
final GroupToUser groupToUser = ctx.bodyAsClass(GroupToUser.class);
282283
boolean res = false;
283284
if (canUserManageGroup(userID, groupToUser.groupId())) {
284-
final Optional<Integer> id = Database.getUserID(groupToUser.mail());
285+
final Optional<Integer> id = Users.getUserID(groupToUser.mail());
285286
if (id.isPresent()) {
286-
res = Database.removeUserFromGroup(groupToUser.groupId(), id.get());
287+
res = de.OneManProjects.database.Groups.removeUserFromGroup(groupToUser.groupId(), id.get());
287288
}
288289
}
289290
Responses.setResponseOrError(ctx, res);
@@ -313,7 +314,7 @@ public static void groupAddProject(final Context ctx) throws SQLException {
313314
final Project project = ctx.bodyAsClass(Project.class);
314315
boolean res = false;
315316
if (canUserManageGroup(userID, project.getRef())) {
316-
res = Database.addGroupProject(project);
317+
res = Projects.addGroupProject(project);
317318
}
318319
Responses.setResponseOrError(ctx, res);
319320
} else {
@@ -342,7 +343,7 @@ public static void groupUpdate(final Context ctx) throws SQLException {
342343
final de.OneManProjects.data.Group group = ctx.bodyAsClass(de.OneManProjects.data.Group.class);
343344
boolean res = false;
344345
if (canUserManageGroup(userID, group.getId())) {
345-
res = Database.updateGroup(group, userID);
346+
res = de.OneManProjects.database.Groups.updateGroup(group, userID);
346347
}
347348
Responses.setResponseOrError(ctx, res);
348349
} else {
@@ -371,7 +372,7 @@ public static void groupDeleteProject(final Context ctx) throws SQLException {
371372
final IdTupel tuple = ctx.bodyAsClass(IdTupel.class);
372373
boolean res = false;
373374
if (canUserManageGroup(userID, tuple.id1())) {
374-
res = Database.deleteProject(tuple.id2(), tuple.id1());
375+
res = Projects.deleteProject(tuple.id2(), tuple.id1());
375376
}
376377
Responses.setResponseOrError(ctx, res);
377378
} else {
@@ -392,7 +393,7 @@ public static void groupDeleteProject(final Context ctx) throws SQLException {
392393
public static void getManagedGroups(final Context ctx) throws SQLException {
393394
if (Auth.isUserGroup(ctx)) {
394395
final int userId = Auth.getUserFromContext(ctx);
395-
final List<de.OneManProjects.data.Group> groups = Database.getManagedGroups(userId);
396+
final List<de.OneManProjects.data.Group> groups = de.OneManProjects.database.Groups.getManagedGroups(userId);
396397
Responses.setResponseOrError(ctx, groups);
397398
} else {
398399
ctx.status(HttpStatus.FORBIDDEN);
@@ -416,7 +417,7 @@ public static void getManagedGroups(final Context ctx) throws SQLException {
416417
public static void userLeaveGroup(final Context ctx) throws SQLException {
417418
final int groupId = ctx.bodyAsClass(Integer.class);
418419
final int userId = Auth.getUserFromContext(ctx);
419-
final boolean res = Database.leaveGroup(userId, groupId);
420+
final boolean res = de.OneManProjects.database.Groups.leaveGroup(userId, groupId);
420421
Responses.setResponseOrError(ctx, res);
421422
}
422423
}

0 commit comments

Comments
 (0)