Skip to content

Commit bddc2a8

Browse files
committed
chore: address arch lint issues
1 parent 2643b5b commit bddc2a8

5 files changed

Lines changed: 100 additions & 90 deletions

File tree

sticker-award/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,4 @@ nb-configuration.xml
4444
# TLS Certificates
4545
.certs/
4646
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: 22 additions & 65 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
@@ -155,34 +153,19 @@ public StickerImageUploadResponse uploadStickerImage(
155153
}
156154

157155
/**
158-
* Gets assignments for a specific sticker.
156+
* Updates the image key for a sticker.
159157
*
160158
* @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
159+
* @param imageKey the new image key
164160
*/
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;
161+
@Transactional
162+
public void updateStickerImageKey(String stickerId, String imageKey) {
163+
Sticker sticker = Sticker.findById(stickerId);
164+
if (sticker != null) {
165+
sticker.setImageKey(imageKey);
166+
sticker.setUpdatedAt(Instant.now());
167+
sticker.persist();
168+
}
186169
}
187170

188171
private StickerDTO toStickerMetadata(Sticker sticker) {
@@ -213,19 +196,6 @@ private StickerDTO convertToDto(Sticker sticker) {
213196
return toStickerMetadata(sticker);
214197
}
215198

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-
}
228-
229199
/**
230200
* Updates sticker metadata (alias for updateSticker).
231201
*
@@ -252,29 +222,16 @@ public boolean deleteSticker(String stickerId) {
252222
return false;
253223
}
254224

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();
225+
try {
226+
sticker.delete();
227+
return true;
228+
} catch (PersistenceException e) {
229+
// If we can't delete because of a constraint violation, the
230+
// sticker must be assigned
231+
if (e.getCause() instanceof ConstraintViolationException) {
232+
throw new IllegalStateException("Cannot delete sticker that is assigned to users");
233+
}
234+
throw e;
278235
}
279236
}
280237
}

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

Lines changed: 0 additions & 25 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;
@@ -201,28 +200,4 @@ public Response uploadStickerImage(
201200
.build();
202201
}
203202
}
204-
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-
}
228203
}

0 commit comments

Comments
 (0)