Skip to content

Commit 486c6d2

Browse files
Added on record congratulations #minor
1 parent d8a2e69 commit 486c6d2

File tree

10 files changed

+56
-69
lines changed

10 files changed

+56
-69
lines changed

backend/src/main/java/dev/jb/befit/backend/data/models/ExerciseLog.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ public class ExerciseLog {
6363
@Column(columnDefinition="BOOLEAN DEFAULT FALSE")
6464
private boolean prImproved = false;
6565

66+
@Setter
67+
@Column(columnDefinition="BOOLEAN DEFAULT FALSE")
68+
private boolean onPr = false;
69+
6670
@Setter
6771
@Column(columnDefinition="BOOLEAN DEFAULT FALSE")
6872
private boolean levelCompleted = false;

backend/src/main/java/dev/jb/befit/backend/discord/commands/CommandConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,6 @@ public final class CommandConstants {
5252
public static final Integer PageSize = 5;
5353
public static final Integer PageSizeSmallItems = 10;
5454
public static final Integer SearchResultsSize = 25;
55+
56+
public static final String DiscordLineSpacing = "\u200B ";
5557
}

backend/src/main/java/dev/jb/befit/backend/discord/commands/CommandHandlerHelper.java

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.jb.befit.backend.discord.commands;
22

33
import dev.jb.befit.backend.data.models.DiscordUser;
4+
import dev.jb.befit.backend.data.models.ExerciseLog;
45
import dev.jb.befit.backend.data.models.User;
56
import dev.jb.befit.backend.data.models.WebUser;
67
import dev.jb.befit.backend.discord.commands.exceptions.OptionNotFoundException;
@@ -165,11 +166,7 @@ public static String getLeaderboardValue(Integer position) {
165166
}
166167

167168
public static String getRatingString(Integer rating) {
168-
var string = new StringBuilder();
169-
for (int i = 0; i < rating; i++) {
170-
string.append(":star2:");
171-
}
172-
return string.toString();
169+
return ":star2:".repeat(rating+1);
173170
}
174171

175172
public static String getUserStringValue(User user) {
@@ -240,4 +237,38 @@ public static <T> PageImpl<T> getPageForList(int pageNum, int pageSize, List<T>
240237
var pageContent = list.subList(start, end);
241238
return new PageImpl<>(pageContent, pageRequest, list.size());
242239
}
240+
241+
public static String addCongratulationsString(ExerciseLog log, Integer spacing, Boolean includeTitle) {
242+
var itemSpacing = CommandConstants.DiscordLineSpacing.repeat(spacing);
243+
var congratulations = new StringBuilder();
244+
// Add new exercise started congratulations
245+
if (log.isFirstLogOfExercise()) {
246+
congratulations.append(itemSpacing).append(":sparkles: New exercise started!\n");
247+
}
248+
// Add new pr reached congratulations
249+
if (log.isPrImproved()) {
250+
congratulations.append(itemSpacing).append(":rocket: New PR reached!\n");
251+
}
252+
// Add on pr congratulations
253+
if (log.isOnPr()) {
254+
congratulations.append(itemSpacing).append(":fire: You are on your Pr!\n");
255+
}
256+
// Add goal reached congratulations
257+
if (log.isGoalReached()) {
258+
congratulations.append(itemSpacing).append(":chart_with_upwards_trend: Goal completed!\n");
259+
}
260+
// Add new level reached congratulations
261+
if (log.isLevelCompleted()) {
262+
congratulations.append(itemSpacing).append(":star2: Level completed!\n");
263+
}
264+
if (!congratulations.isEmpty()) {
265+
var returnStringBuilder = new StringBuilder();
266+
if (includeTitle) {
267+
returnStringBuilder.append("Congratulations:\n");
268+
}
269+
returnStringBuilder.append(congratulations);
270+
return returnStringBuilder.toString();
271+
}
272+
return "";
273+
}
243274
}

backend/src/main/java/dev/jb/befit/backend/discord/commands/handlers/history/HistoryCommandHandler.java

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public InteractionReplyEditSpec getReplyEditSpec(Snowflake userId, int page, Str
6767
var description = new StringBuilder();
6868
addGeneralLogString(description, log);
6969
addAchievementsString(description, log.getAchievements().stream().map(UserAchievement::getAchievement).toList());
70-
addCongratulationsString(description, log);
70+
description.append(CommandHandlerHelper.addCongratulationsString(log, 2, true));
7171
description.append("\n");
7272
return EmbedCreateFields.Field.of(
7373
String.format("#%d %s", exercise.getId(), exercise.getName()),
@@ -97,25 +97,4 @@ private static void addAchievementsString(StringBuilder stringBuilder, List<Achi
9797
stringBuilder.append(itemSpacing).append(String.format("<:%s:%s> %s \n", achievement.getDisplayName(), EmojiRegistrarService.getEmojiId(achievement, false).asString(), achievement.getTitle()));
9898
}
9999
}
100-
101-
private static void addCongratulationsString(StringBuilder stringBuilder, ExerciseLog log) {
102-
var congratulations = new StringBuilder();
103-
// Add new exercise started congratulations
104-
if (log.isFirstLogOfExercise()) {
105-
congratulations.append(itemSpacing).append(":sparkles: New exercise started!\n");
106-
}
107-
// Add new pr reached congratulations
108-
if (log.isPrImproved()) {
109-
congratulations.append(itemSpacing).append(":rocket: New PR reached!\n");
110-
}
111-
// Add goal reached congratulations
112-
if (log.isGoalReached()) {
113-
congratulations.append(itemSpacing).append(":chart_with_upwards_trend: Goal completed!\n");
114-
}
115-
// Add new level reached congratulations
116-
if (log.isLevelCompleted()) {
117-
congratulations.append(itemSpacing).append(":star2: Level completed!\n");
118-
}
119-
if (!congratulations.isEmpty()) stringBuilder.append("Congratulations:\n").append(congratulations);
120-
}
121100
}

backend/src/main/java/dev/jb/befit/backend/discord/commands/handlers/log/LogCommandHandler.java

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -100,26 +100,8 @@ public Mono<Void> execute(ChatInputInteractionEvent event) {
100100
}
101101

102102
// Add user congratulations
103-
{
104-
var descriptionBuilder = new StringBuilder();
105-
// Add new exercise started congratulations
106-
if (exerciseLog.isFirstLogOfExercise()) {
107-
descriptionBuilder.append(":sparkles: New exercise started!\n");
108-
}
109-
// Add new pr reached congratulations
110-
if (exerciseLog.isPrImproved()) {
111-
descriptionBuilder.append(":rocket: New PR reached!\n");
112-
}
113-
// Add goal reached congratulations
114-
if (exerciseLog.isGoalReached()) {
115-
descriptionBuilder.append(":chart_with_upwards_trend: Goal completed!\n");
116-
}
117-
// Add new level reached congratulations
118-
if (exerciseLog.isLevelCompleted()) {
119-
descriptionBuilder.append(":star2: Level completed!\n");
120-
}
121-
if (!descriptionBuilder.isEmpty()) embed.addField("Congratulations", descriptionBuilder.toString(), false);
122-
}
103+
var congratulations = CommandHandlerHelper.addCongratulationsString(exerciseLog, 0, false);
104+
if (!congratulations.isEmpty()) embed.addField("Congratulations", congratulations, false);
123105

124106
// Add user achievements
125107
if (!exerciseLog.getAchievements().isEmpty()) {

backend/src/main/java/dev/jb/befit/backend/discord/commands/handlers/sessions/SessionViewOneCommandHandler.java

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public static InteractionReplyEditSpec getReplyEditSpec(ExerciseSession session,
5858
logsPage.stream().sorted(Comparator.comparing(ExerciseLog::getCreated)).forEach(log -> {
5959
addGeneralLogString(logsDescriptionBuilder, log);
6060
addAchievementsString(logsDescriptionBuilder, log.getAchievements().stream().map(UserAchievement::getAchievement).toList());
61-
addCongratulationsString(logsDescriptionBuilder, log);
61+
logsDescriptionBuilder.append(CommandHandlerHelper.addCongratulationsString(log, 2, false));
6262
logsDescriptionBuilder.append("\n");
6363
});
6464
}
@@ -107,25 +107,4 @@ private static void addAchievementsString(StringBuilder stringBuilder, List<Achi
107107
stringBuilder.append(itemSpacing).append(String.format("<:%s:%s> %s \n", achievement.getDisplayName(), EmojiRegistrarService.getEmojiId(achievement, false).asString(), achievement.getTitle()));
108108
}
109109
}
110-
111-
private static void addCongratulationsString(StringBuilder stringBuilder, ExerciseLog log) {
112-
var congratulations = new StringBuilder();
113-
// Add exercise started congratulations
114-
if (log.isFirstLogOfExercise()) {
115-
congratulations.append(itemSpacing).append(":sparkles: New exercise started!\n");
116-
}
117-
// Add new pr reached congratulations
118-
if (log.isPrImproved()) {
119-
congratulations.append(itemSpacing).append(":rocket: New PR reached!\n");
120-
}
121-
// Add goal reached congratulations
122-
if (log.isGoalReached()) {
123-
congratulations.append(itemSpacing).append(":chart_with_upwards_trend: Goal completed!\n");
124-
}
125-
// Add new level reached congratulations
126-
if (log.isLevelCompleted()) {
127-
congratulations.append(itemSpacing).append(":star2: Level completed!\n");
128-
}
129-
if (!congratulations.isEmpty()) stringBuilder.append("Congratulations:\n").append(congratulations);
130-
}
131110
}

backend/src/main/java/dev/jb/befit/backend/service/ExerciseLogService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@ public LogCreationStatus create(User user, String exerciseName, Double amount) {
131131
} else if (ExerciseRecordService.isRecordImproved(exerciseRecord, exerciseLog)) {
132132
exerciseLog.setPrImproved(true);
133133
earnedXp += ServiceConstants.EarnedXpRecordImproved;
134+
} else if (ServiceHelper.compareDoublesWithTolerance(exerciseLog.getAmount(), exerciseRecord.getAmount())) {
135+
exerciseLog.setOnPr(true);
136+
earnedXp += ServiceConstants.EarnedXpRecordReached;
134137
}
135138

136139
// Finish goal if it exists and is reached

backend/src/main/java/dev/jb/befit/backend/service/ExerciseRecordService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ public static Double getCurrentPr(List<ExerciseLog> allExerciseLogs) {
8484

8585
public static boolean isRecordImproved(ExerciseRecord exerciseRecord, ExerciseLog exerciseLog) {
8686
if (!exerciseRecord.getExerciseType().equals(exerciseLog.getExerciseType())) throw new ExerciseMismatchException();
87+
if (ServiceHelper.compareDoublesWithTolerance(exerciseLog.getAmount(), exerciseRecord.getAmount())) return false;
8788

8889
if (exerciseRecord.getExerciseType().getGoalDirection().equals(GoalDirection.INCREASING)) {
8990
return exerciseLog.getAmount() > exerciseRecord.getAmount();

backend/src/main/java/dev/jb/befit/backend/service/ServiceConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public final class ServiceConstants {
1414
public static final long EarnedXpLogAddedToSession = 5;
1515
public static final long EarnedXpNewExerciseStarted = 20;
1616
public static final long EarnedXpRecordImproved = 50;
17+
public static final long EarnedXpRecordReached = 10;
1718
public static final long EarnedXpGoalCreated = 10;
1819
public static final long EarnedXpGoalCompleted = 50;
1920
public static final long EarnedXpAchievementCompletedEasy = 50;

backend/src/main/java/dev/jb/befit/backend/service/ServiceHelper.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,9 @@ public static Long getIdFromExerciseString(String exerciseString) {
3737
}
3838
return 0L;
3939
}
40+
41+
public static Boolean compareDoublesWithTolerance(Double a, Double b) {
42+
if (a == null || b == null) return false;
43+
return Math.abs(a - b) < 0.001;
44+
}
4045
}

0 commit comments

Comments
 (0)