Skip to content

Commit 20f7409

Browse files
committed
chore: address arch lint issues
1 parent deea6d3 commit 20f7409

5 files changed

Lines changed: 102 additions & 88 deletions

File tree

sticker-award/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,5 @@ nb-configuration.xml
4343
/.quarkus/cli/plugins/
4444
# TLS Certificates
4545
.certs/
46+
cql-db
47+
+build

sticker-award/src/main/java/com/datadoghq/stickerlandia/stickeraward/award/StickerAwardRepository.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,13 @@
55
import com.datadoghq.stickerlandia.stickeraward.award.dto.GetUserStickersResponse;
66
import com.datadoghq.stickerlandia.stickeraward.award.dto.RemoveStickerFromUserResponse;
77
import com.datadoghq.stickerlandia.stickeraward.award.dto.StickerAssignmentDTO;
8+
import com.datadoghq.stickerlandia.stickeraward.award.dto.UserAssignmentDTO;
89
import com.datadoghq.stickerlandia.stickeraward.award.entity.StickerAssignment;
10+
import com.datadoghq.stickerlandia.stickeraward.common.dto.PagedResponse;
11+
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.GetStickerAssignmentsResponse;
912
import com.datadoghq.stickerlandia.stickeraward.sticker.entity.Sticker;
13+
import io.quarkus.hibernate.orm.panache.PanacheQuery;
14+
import io.quarkus.panache.common.Page;
1015
import jakarta.enterprise.context.ApplicationScoped;
1116
import jakarta.transaction.Transactional;
1217
import java.time.Instant;
@@ -118,4 +123,49 @@ public RemoveStickerFromUserResponse removeStickerFromUser(String userId, String
118123

119124
return response;
120125
}
126+
127+
/**
128+
* Gets assignments for a specific sticker.
129+
*
130+
* @param stickerId the ID of the sticker
131+
* @param page the page number (0-based)
132+
* @param size the page size
133+
* @return response containing paginated assignments
134+
*/
135+
public GetStickerAssignmentsResponse getStickerAssignments(
136+
String stickerId, int page, int size) {
137+
Sticker sticker = Sticker.findById(stickerId);
138+
if (sticker == null) {
139+
return null;
140+
}
141+
142+
PanacheQuery<StickerAssignment> query =
143+
StickerAssignment.find("sticker.stickerId = ?1 AND removedAt IS NULL", stickerId);
144+
List<StickerAssignment> assignments = query.page(Page.of(page, size)).list();
145+
long totalCount = query.count();
146+
147+
final List<UserAssignmentDTO> userAssignments =
148+
assignments.stream()
149+
.map(
150+
assignment -> {
151+
UserAssignmentDTO ua = new UserAssignmentDTO();
152+
ua.setUserId(assignment.getUserId());
153+
ua.setAssignedAt(Date.from(assignment.getAssignedAt()));
154+
ua.setReason(assignment.getReason());
155+
return ua;
156+
})
157+
.collect(Collectors.toList());
158+
159+
PagedResponse pagination = new PagedResponse();
160+
pagination.setPage(page);
161+
pagination.setSize(size);
162+
pagination.setTotal((int) totalCount);
163+
pagination.setTotalPages((int) Math.ceil((double) totalCount / size));
164+
165+
GetStickerAssignmentsResponse response = new GetStickerAssignmentsResponse();
166+
response.setStickerId(stickerId);
167+
response.setAssignments(userAssignments);
168+
response.setPagination(pagination);
169+
return response;
170+
}
121171
}

sticker-award/src/main/java/com/datadoghq/stickerlandia/stickeraward/award/StickerAwardResource.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,19 @@
55
import com.datadoghq.stickerlandia.stickeraward.award.dto.GetUserStickersResponse;
66
import com.datadoghq.stickerlandia.stickeraward.award.dto.RemoveStickerFromUserResponse;
77
import com.datadoghq.stickerlandia.stickeraward.award.messaging.StickerAwardEventPublisher;
8+
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.GetStickerAssignmentsResponse;
89
import io.smallrye.common.constraint.NotNull;
910
import jakarta.inject.Inject;
1011
import jakarta.transaction.Transactional;
1112
import jakarta.ws.rs.Consumes;
1213
import jakarta.ws.rs.DELETE;
14+
import jakarta.ws.rs.DefaultValue;
1315
import jakarta.ws.rs.GET;
1416
import jakarta.ws.rs.POST;
1517
import jakarta.ws.rs.Path;
1618
import jakarta.ws.rs.PathParam;
1719
import jakarta.ws.rs.Produces;
20+
import jakarta.ws.rs.QueryParam;
1821
import jakarta.ws.rs.core.MediaType;
1922
import jakarta.ws.rs.core.Response;
2023
import org.eclipse.microprofile.openapi.annotations.Operation;
@@ -110,4 +113,28 @@ public Response removeStickerFromUser(
110113

111114
return Response.ok(response).build();
112115
}
116+
117+
/**
118+
* Gets users to which this sticker is assigned.
119+
*
120+
* @param stickerId the ID of the sticker
121+
* @param page the page number (0-based)
122+
* @param size the page size
123+
* @return response containing paginated assignments
124+
*/
125+
@Operation(description = "Get users to which this sticker is assigned")
126+
@Path("/award/v1/stickers/{stickerId}/assignments")
127+
@GET
128+
@Produces("application/json")
129+
public Response getStickerAssignments(
130+
@PathParam("stickerId") String stickerId,
131+
@QueryParam("page") @DefaultValue("0") int page,
132+
@QueryParam("size") @DefaultValue("20") int size) {
133+
GetStickerAssignmentsResponse data =
134+
stickerAwardRepository.getStickerAssignments(stickerId, page, size);
135+
if (data == null) {
136+
return Response.status(Response.Status.NOT_FOUND).build();
137+
}
138+
return Response.ok(data).build();
139+
}
113140
}

sticker-award/src/main/java/com/datadoghq/stickerlandia/stickeraward/sticker/StickerRepository.java

Lines changed: 23 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,23 @@
11
package com.datadoghq.stickerlandia.stickeraward.sticker;
22

3-
import com.datadoghq.stickerlandia.stickeraward.award.dto.UserAssignmentDTO;
4-
import com.datadoghq.stickerlandia.stickeraward.award.entity.StickerAssignment;
5-
import com.datadoghq.stickerlandia.stickeraward.common.dto.PagedResponse;
63
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.CreateStickerRequest;
74
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.CreateStickerResponse;
85
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.GetAllStickersResponse;
9-
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.GetStickerAssignmentsResponse;
106
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.StickerDTO;
117
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.StickerImageUploadResponse;
128
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.UpdateStickerRequest;
139
import com.datadoghq.stickerlandia.stickeraward.sticker.entity.Sticker;
1410
import io.quarkus.panache.common.Sort;
1511
import jakarta.enterprise.context.ApplicationScoped;
12+
import jakarta.persistence.PersistenceException;
1613
import jakarta.transaction.Transactional;
1714
import java.io.InputStream;
1815
import java.time.Instant;
1916
import java.util.Date;
2017
import java.util.List;
2118
import java.util.UUID;
2219
import java.util.stream.Collectors;
20+
import org.hibernate.exception.ConstraintViolationException;
2321

2422
/** Repository class for managing sticker operations. */
2523
@ApplicationScoped
@@ -154,35 +152,21 @@ public StickerImageUploadResponse uploadStickerImage(
154152
return null; // Placeholder return, actual implementation needed
155153
}
156154

155+
157156
/**
158-
* Gets assignments for a specific sticker.
157+
* Updates the image key for a sticker.
159158
*
160159
* @param stickerId the ID of the sticker
161-
* @param page the page number (0-based)
162-
* @param size the page size
163-
* @return response containing paginated assignments
160+
* @param imageKey the new image key
164161
*/
165-
public GetStickerAssignmentsResponse getStickerAssignments(
166-
String stickerId, int page, int size) {
167-
final List<UserAssignmentDTO> userAssignments =
168-
StickerAssignment.findActiveByStickerId(stickerId).stream()
169-
.skip((long) page * size)
170-
.limit(size)
171-
.map(this::convertToUserAssignmentDto)
172-
.collect(Collectors.toList());
173-
174-
PagedResponse pagination = new PagedResponse();
175-
pagination.setPage(page);
176-
pagination.setSize(size);
177-
pagination.setTotal((int) StickerAssignment.countActiveByStickerId(stickerId));
178-
final long totalCount = StickerAssignment.countActiveByStickerId(stickerId);
179-
pagination.setTotalPages((int) Math.ceil((double) totalCount / size));
180-
181-
GetStickerAssignmentsResponse response = new GetStickerAssignmentsResponse();
182-
response.setStickerId(stickerId);
183-
response.setAssignments(userAssignments);
184-
response.setPagination(pagination);
185-
return response;
162+
@Transactional
163+
public void updateStickerImageKey(String stickerId, String imageKey) {
164+
Sticker sticker = Sticker.findById(stickerId);
165+
if (sticker != null) {
166+
sticker.setImageKey(imageKey);
167+
sticker.setUpdatedAt(Instant.now());
168+
sticker.persist();
169+
}
186170
}
187171

188172
private StickerDTO toStickerMetadata(Sticker sticker) {
@@ -213,18 +197,6 @@ private StickerDTO convertToDto(Sticker sticker) {
213197
return toStickerMetadata(sticker);
214198
}
215199

216-
/**
217-
* Converts a StickerAssignment entity to a UserAssignmentDTO.
218-
*
219-
* @param assignment the sticker assignment entity to convert
220-
* @return the converted UserAssignmentDTO
221-
*/
222-
private UserAssignmentDTO convertToUserAssignmentDto(StickerAssignment assignment) {
223-
UserAssignmentDTO dto = new UserAssignmentDTO();
224-
dto.setUserId(assignment.getUserId());
225-
dto.setAssignedAt(Date.from(assignment.getAssignedAt()));
226-
return dto;
227-
}
228200

229201
/**
230202
* Updates sticker metadata (alias for updateSticker).
@@ -252,29 +224,16 @@ public boolean deleteSticker(String stickerId) {
252224
return false;
253225
}
254226

255-
// Check if sticker is assigned to any users
256-
long assignmentCount = StickerAssignment.countActiveByStickerId(stickerId);
257-
if (assignmentCount > 0) {
258-
throw new IllegalStateException("Cannot delete sticker that is assigned to users");
259-
}
260-
261-
sticker.delete();
262-
return true;
263-
}
264-
265-
/**
266-
* Updates the image key for a sticker.
267-
*
268-
* @param stickerId the ID of the sticker
269-
* @param imageKey the new image key
270-
*/
271-
@Transactional
272-
public void updateStickerImageKey(String stickerId, String imageKey) {
273-
Sticker sticker = Sticker.findById(stickerId);
274-
if (sticker != null) {
275-
sticker.setImageKey(imageKey);
276-
sticker.setUpdatedAt(Instant.now());
277-
sticker.persist();
227+
try {
228+
sticker.delete();
229+
return true;
230+
} catch (PersistenceException e) {
231+
// If we can't delete because of a constraint violation, the
232+
// sticker must be assigned
233+
if (e.getCause() instanceof ConstraintViolationException) {
234+
throw new IllegalStateException("Cannot delete sticker that is assigned to users");
235+
}
236+
throw e;
278237
}
279238
}
280239
}

sticker-award/src/main/java/com/datadoghq/stickerlandia/stickeraward/sticker/StickerResource.java

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.CreateStickerRequest;
44
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.CreateStickerResponse;
55
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.GetAllStickersResponse;
6-
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.GetStickerAssignmentsResponse;
76
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.StickerDTO;
87
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.StickerImageUploadResponse;
98
import com.datadoghq.stickerlandia.stickeraward.sticker.dto.UpdateStickerRequest;
@@ -202,27 +201,4 @@ public Response uploadStickerImage(
202201
}
203202
}
204203

205-
/**
206-
* Gets all assignments for a specific sticker.
207-
*
208-
* @param stickerId the ID of the sticker
209-
* @param page the page number (0-based)
210-
* @param size the page size
211-
* @return response containing paginated assignments
212-
*/
213-
@GET
214-
@Path("/{stickerId}/assignments")
215-
@Produces("application/json")
216-
@Operation(summary = "Get assignments for a sticker")
217-
public Response getStickerAssignments(
218-
@PathParam("stickerId") String stickerId,
219-
@QueryParam("page") @DefaultValue("0") int page,
220-
@QueryParam("size") @DefaultValue("20") int size) {
221-
GetStickerAssignmentsResponse data =
222-
stickerRepository.getStickerAssignments(stickerId, page, size);
223-
if (data == null) {
224-
return Response.status(Response.Status.NOT_FOUND).build();
225-
}
226-
return Response.ok(data).build();
227-
}
228204
}

0 commit comments

Comments
 (0)