diff --git a/src/main/java/org/patinanetwork/codebloom/common/db/models/achievements/Achievement.java b/src/main/java/org/patinanetwork/codebloom/common/db/models/achievements/Achievement.java
index 950504952..70a09d814 100644
--- a/src/main/java/org/patinanetwork/codebloom/common/db/models/achievements/Achievement.java
+++ b/src/main/java/org/patinanetwork/codebloom/common/db/models/achievements/Achievement.java
@@ -23,6 +23,9 @@ public class Achievement {
@NotNullColumn
private String userId;
+ @NotNullColumn
+ private String leaderboardId;
+
@NotNullColumn
private AchievementPlaceEnum place;
diff --git a/src/main/java/org/patinanetwork/codebloom/common/db/repos/achievements/AchievementRepository.java b/src/main/java/org/patinanetwork/codebloom/common/db/repos/achievements/AchievementRepository.java
index dbf7e7d23..9075c47cb 100644
--- a/src/main/java/org/patinanetwork/codebloom/common/db/repos/achievements/AchievementRepository.java
+++ b/src/main/java/org/patinanetwork/codebloom/common/db/repos/achievements/AchievementRepository.java
@@ -15,6 +15,7 @@ public interface AchievementRepository {
*
title
* description
* isActive
+ * leaderboardId
*
*/
void createAchievement(Achievement achievement);
@@ -29,6 +30,7 @@ public interface AchievementRepository {
* description
* isActive
* deletedAt
+ * leaderboardId
*
*
* @return updated achievement if successful
diff --git a/src/main/java/org/patinanetwork/codebloom/common/db/repos/achievements/AchievementSqlRepository.java b/src/main/java/org/patinanetwork/codebloom/common/db/repos/achievements/AchievementSqlRepository.java
index 09bffe052..1ea215bba 100644
--- a/src/main/java/org/patinanetwork/codebloom/common/db/repos/achievements/AchievementSqlRepository.java
+++ b/src/main/java/org/patinanetwork/codebloom/common/db/repos/achievements/AchievementSqlRepository.java
@@ -26,6 +26,7 @@ public class AchievementSqlRepository implements AchievementRepository {
var title = rs.getString("title");
var description = rs.getString("description");
var isActive = rs.getBoolean("isActive");
+ var leaderboardId = rs.getString("leaderboardId");
var createdAt = StandardizedOffsetDateTime.normalize(rs.getObject("createdAt", OffsetDateTime.class));
OffsetDateTime deletedAt =
StandardizedOffsetDateTime.normalize(rs.getObject("deletedAt", OffsetDateTime.class));
@@ -34,6 +35,7 @@ public class AchievementSqlRepository implements AchievementRepository {
.userId(userId)
.place(place)
.leaderboard(leaderboard)
+ .leaderboardId(leaderboardId)
.title(title)
.description(description)
.isActive(isActive)
@@ -53,9 +55,9 @@ public void createAchievement(final Achievement achievement) {
achievement.setId(UUID.randomUUID().toString());
String sql = """
INSERT INTO "Achievement"
- (id, "userId", place, leaderboard, title, description, "isActive", "deletedAt")
+ (id, "userId", place, leaderboard, title, description, "isActive", "deletedAt", "leaderboardId")
VALUES
- (:id, :userId, :place, :leaderboard, :title, :description, :isActive, :deletedAt)
+ (:id, :userId, :place, :leaderboard, :title, :description, :isActive, :deletedAt, :leaderboardId)
RETURNING
"createdAt"
""";
@@ -71,6 +73,7 @@ public void createAchievement(final Achievement achievement) {
.map(Enum::name)
.orElse(null),
Types.OTHER)
+ .param("leaderboardId", achievement.getLeaderboardId())
.param("title", achievement.getTitle())
.param("description", achievement.getDescription())
.param("isActive", achievement.isActive())
@@ -94,7 +97,8 @@ public Achievement updateAchievement(final Achievement achievement) {
title = :title,
description = :description,
"isActive" = :isActive,
- "deletedAt" = :deletedAt
+ "deletedAt" = :deletedAt,
+ "leaderboardId" = :leaderboardId
WHERE
id = :id
""";
@@ -108,6 +112,7 @@ public Achievement updateAchievement(final Achievement achievement) {
.map(Enum::name)
.orElse(null),
Types.OTHER)
+ .param("leaderboardId", achievement.getLeaderboardId())
.param("title", achievement.getTitle())
.param("description", achievement.getDescription())
.param("isActive", achievement.isActive())
@@ -150,7 +155,8 @@ public Achievement getAchievementById(final String id) {
description,
"isActive",
"createdAt",
- "deletedAt"
+ "deletedAt",
+ "leaderboardId"
FROM
"Achievement"
WHERE
@@ -178,7 +184,8 @@ public List getAchievementsByUserId(final String userId) {
description,
"isActive",
"createdAt",
- "deletedAt"
+ "deletedAt",
+ "leaderboardId"
FROM
"Achievement"
WHERE
diff --git a/src/main/java/org/patinanetwork/codebloom/common/dto/achievement/AchievementDto.java b/src/main/java/org/patinanetwork/codebloom/common/dto/achievement/AchievementDto.java
index 3d12f01fc..73f15a959 100644
--- a/src/main/java/org/patinanetwork/codebloom/common/dto/achievement/AchievementDto.java
+++ b/src/main/java/org/patinanetwork/codebloom/common/dto/achievement/AchievementDto.java
@@ -30,6 +30,9 @@ public class AchievementDto {
@Schema(requiredMode = Schema.RequiredMode.REQUIRED, nullable = true)
private Tag leaderboard;
+ @Schema(requiredMode = Schema.RequiredMode.REQUIRED)
+ private String leaderboardId;
+
@Schema(requiredMode = Schema.RequiredMode.REQUIRED)
private String title;
@@ -52,6 +55,7 @@ public static AchievementDto fromAchievement(final Achievement achievement) {
.leaderboard(achievement.getLeaderboard())
.place(achievement.getPlace())
.title(achievement.getTitle())
+ .leaderboardId(achievement.getLeaderboardId())
.description(achievement.getDescription())
.isActive(achievement.isActive())
.createdAt(achievement.getCreatedAt())