Skip to content

Commit 243c433

Browse files
committed
Added public kudos API
1 parent 3aea497 commit 243c433

File tree

6 files changed

+89
-0
lines changed

6 files changed

+89
-0
lines changed

server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosController.java

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.objectcomputing.checkins.services.kudos;
22

33
import io.micronaut.core.annotation.Nullable;
4+
import io.micronaut.core.convert.format.Format;
45
import io.micronaut.http.HttpStatus;
56
import io.micronaut.http.annotation.Body;
67
import io.micronaut.http.annotation.Controller;
@@ -17,6 +18,7 @@
1718
import jakarta.validation.Valid;
1819
import jakarta.validation.constraints.NotNull;
1920

21+
import java.time.LocalDate;
2022
import java.util.List;
2123
import java.util.UUID;
2224

@@ -53,6 +55,9 @@ public List<KudosResponseDTO> getRecent() {
5355
return kudosServices.getRecent();
5456
}
5557

58+
@Get("/public")
59+
public List<KudosResponseDTO> getPublic(@Nullable @Format("yyyy-MM-dd") LocalDate since) { return kudosServices.getPublic(since); }
60+
5661
@Get("/{id}")
5762
public KudosResponseDTO getById(@NotNull UUID id) {
5863
return kudosServices.getById(id);

server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosRepository.java

+12
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import io.micronaut.data.model.query.builder.sql.Dialect;
77
import io.micronaut.data.repository.CrudRepository;
88

9+
import java.time.LocalDate;
10+
import java.util.Arrays;
911
import java.util.List;
1012
import java.util.UUID;
1113

@@ -54,4 +56,14 @@ public interface KudosRepository extends CrudRepository<Kudos, UUID> {
5456
AND (:includePending OR dateapproved IS NOT NULL)""", nativeQuery = true)
5557
List<Kudos> search(@Nullable String senderId, boolean includePending);
5658

59+
@Query(value = """
60+
SELECT
61+
id,
62+
PGP_SYM_DECRYPT(cast(message as bytea), '${aes.key}') as message,
63+
senderid, teamid, datecreated, dateapproved, publiclyVisible
64+
FROM kudos
65+
WHERE publiclyVisible IS TRUE
66+
AND (CAST(:since as date) IS NULL OR dateapproved >= :since)
67+
ORDER BY datecreated DESC""", nativeQuery = true)
68+
List<Kudos> getPublic(@Nullable LocalDate since);
5769
}

server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosServices.java

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.micronaut.core.annotation.Nullable;
44

5+
import java.time.LocalDate;
56
import java.util.List;
67
import java.util.UUID;
78

@@ -22,4 +23,6 @@ public interface KudosServices {
2223
void delete(UUID id);
2324

2425
List<KudosResponseDTO> findByValues(@Nullable UUID recipientId, @Nullable UUID senderId, @Nullable Boolean isPending);
26+
27+
List<KudosResponseDTO> getPublic(@Nullable LocalDate since);
2528
}

server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosServicesImpl.java

+8
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.objectcomputing.checkins.configuration.CheckInsConfiguration;
2929

3030
import io.micronaut.core.annotation.Nullable;
31+
import io.micronaut.core.convert.format.Format;
3132
import io.micronaut.transaction.annotation.Transactional;
3233

3334
import jakarta.inject.Named;
@@ -296,6 +297,13 @@ public List<KudosResponseDTO> getRecent() {
296297
.toList();
297298
}
298299

300+
public List<KudosResponseDTO> getPublic(@Nullable LocalDate since) {
301+
return kudosRepository.getPublic(since)
302+
.stream()
303+
.map(this::constructKudosResponseDTO)
304+
.toList();
305+
}
306+
299307
private List<KudosResponseDTO> findByPending(boolean isPending) {
300308
if (!hasAdministerKudosPermission()) {
301309
throw new PermissionException(NOT_AUTHORIZED_MSG);

server/src/test/java/com/objectcomputing/checkins/services/fixture/KudosFixture.java

+11
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,17 @@ default Kudos createApprovedKudos(UUID senderId) {
4040
return getKudosRepository().save(kudos);
4141
}
4242

43+
default Kudos createApprovedKudos(UUID senderId, LocalDate approved) {
44+
Kudos kudos = new Kudos();
45+
kudos.setMessage("Default Kudos");
46+
kudos.setSenderId(senderId);
47+
kudos.setPubliclyVisible(true);
48+
kudos.setDateCreated(approved.minusDays(1));
49+
kudos.setDateApproved(approved);
50+
51+
return getKudosRepository().save(kudos);
52+
}
53+
4354
default KudosRecipient createKudosRecipient(UUID kudosId, UUID memberId) {
4455
KudosRecipient kudosRecipient = new KudosRecipient(kudosId, memberId);
4556

server/src/test/java/com/objectcomputing/checkins/services/kudos/KudosControllerTest.java

+50
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.micronaut.http.client.exceptions.HttpClientResponseException;
2727
import jakarta.inject.Inject;
2828
import jakarta.inject.Named;
29+
import jnr.constants.platform.Local;
2930
import org.junit.jupiter.api.BeforeEach;
3031
import org.junit.jupiter.api.Test;
3132
import org.junit.jupiter.params.ParameterizedTest;
@@ -678,4 +679,53 @@ void testUpdateKudosNoMembers() {
678679

679680
assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus());
680681
}
682+
683+
@Test
684+
void testGetAllPublicKudos() {
685+
UUID recipientId = recipientMembers.getFirst().getId();
686+
MemberProfile bob = memberWithoutBoss("bob");
687+
UUID someOtherRecipientId = bob.getId();
688+
689+
Kudos kudos = createApprovedKudos(senderId);
690+
Kudos kudos2 = createApprovedKudos(senderId);
691+
Kudos kudos3 = createApprovedKudos(senderId);
692+
createKudosRecipient(kudos.getId(), recipientId);
693+
createKudosRecipient(kudos2.getId(), recipientId);
694+
createKudosRecipient(kudos3.getId(), someOtherRecipientId);
695+
696+
MutableHttpRequest<Object> request = HttpRequest.GET("/public").basicAuth(bob.getWorkEmail(), MEMBER_ROLE);
697+
final HttpResponse<List<KudosResponseDTO>> response = client.exchange(request, Argument.listOf(KudosResponseDTO.class));
698+
699+
assertEquals(OK, response.getStatus());
700+
List<KudosResponseDTO> body = response.body();
701+
assertEquals(3, body.size());
702+
assertEquals(List.of(kudos.getId(), kudos2.getId(), kudos3.getId()), List.of(body.get(0).getId(), body.get(1).getId(), body.get(2).getId()));
703+
}
704+
705+
@Test
706+
void testGetPublicKudosSince() {
707+
UUID recipientId = recipientMembers.getFirst().getId();
708+
MemberProfile bob = memberWithoutBoss("bob");
709+
UUID someOtherRecipientId = bob.getId();
710+
711+
LocalDate now = LocalDate.now();
712+
LocalDate since = now.minusMonths(3);
713+
LocalDate before = since.minusDays(1);
714+
LocalDate inRange = since.plusDays(Math.round(Math.ceil(Math.random()*30))); // up to 30 days
715+
716+
Kudos kudos = createApprovedKudos(senderId, since);
717+
Kudos kudos2 = createApprovedKudos(senderId, before);
718+
Kudos kudos3 = createApprovedKudos(senderId, inRange);
719+
createKudosRecipient(kudos.getId(), recipientId);
720+
createKudosRecipient(kudos2.getId(), recipientId);
721+
createKudosRecipient(kudos3.getId(), someOtherRecipientId);
722+
723+
MutableHttpRequest<Object> request = HttpRequest.GET(String.format("/public?since=%s", since)).basicAuth(bob.getWorkEmail(), MEMBER_ROLE);
724+
final HttpResponse<List<KudosResponseDTO>> response = client.exchange(request, Argument.listOf(KudosResponseDTO.class));
725+
726+
assertEquals(OK, response.getStatus());
727+
List<KudosResponseDTO> body = response.body();
728+
assertEquals(2, body.size());
729+
assertEquals(List.of(kudos.getId(), kudos3.getId()), List.of(body.get(0).getId(), body.get(1).getId()));
730+
}
681731
}

0 commit comments

Comments
 (0)