Skip to content

Commit 3261365

Browse files
committed
Merge branch 'release/0.7.0'
2 parents 8b88e40 + e03ec69 commit 3261365

File tree

86 files changed

+216056
-78
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+216056
-78
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: Gradle Publish to GitHub Packages
2+
on:
3+
release:
4+
types: [created]
5+
jobs:
6+
build:
7+
runs-on: ubuntu-latest
8+
permissions:
9+
contents: read
10+
packages: write
11+
steps:
12+
- uses: actions/checkout@v4
13+
- name: Set up Node 14
14+
uses: actions/setup-node@v2-beta
15+
with:
16+
node-version: '14'
17+
- name: Set up JDK 11
18+
uses: actions/setup-java@v1
19+
with:
20+
java-version: 11
21+
- name: Cache Gradle packages
22+
uses: actions/cache@v1
23+
with:
24+
path: ~/.gradle/caches
25+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
26+
restore-keys: ${{ runner.os }}-gradle
27+
- name: Validate Gradle wrapper
28+
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
29+
- name: Build with Gradle
30+
uses: gradle/gradle-build-action@4137be6a8bf7d7133955359dbd952c0ca73b1021
31+
with:
32+
arguments: publish
33+
env:
34+
REACT_APP_API_URL: https://checkins.objectcomputing.com
35+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ project.tasks["sonarqube"].dependsOn ":web-ui:yarn_run_coverage", ":server:jacoc
7777
publishing {
7878
publications {
7979
checkInsProject(MavenPublication) {
80-
version "0.6.0"
80+
version "0.7.0"
8181
group "com.objectcomputing.checkins"
8282
from components.java
8383

server/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ rewrite {
1010
activeRecipe("org.openrewrite.java.micronaut.Micronaut2to3Migration")
1111
}
1212

13-
version "0.6.0"
13+
version "0.7.0"
1414
group "com.objectcomputing.checkins"
1515

1616
repositories {

server/src/main/java/com/objectcomputing/checkins/exceptions/handlers/AlreadyExistsHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
@Produces
1616
@Singleton
1717
@Requires(classes = {AlreadyExistsException.class, ExceptionHandler.class})
18-
public class AlreadyExistsHandler implements ExceptionHandler<AlreadyExistsException, HttpResponse> {
18+
public class AlreadyExistsHandler implements ExceptionHandler<AlreadyExistsException, HttpResponse<?>> {
1919

2020
@Override
2121
public HttpResponse<?> handle(HttpRequest request, AlreadyExistsException e) {

server/src/main/java/com/objectcomputing/checkins/exceptions/handlers/ArgumentsHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
@Produces
1515
@Singleton
1616
@Requires(classes = {BadArgException.class, ExceptionHandler.class})
17-
public class ArgumentsHandler implements ExceptionHandler<BadArgException, HttpResponse> {
17+
public class ArgumentsHandler implements ExceptionHandler<BadArgException, HttpResponse<?>> {
1818

1919
@Override
2020
public HttpResponse<?> handle(HttpRequest request, BadArgException e) {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.objectcomputing.checkins.exceptions.handlers;
2+
3+
import io.micronaut.context.annotation.Requires;
4+
import io.micronaut.data.exceptions.DataAccessException;
5+
import io.micronaut.http.HttpRequest;
6+
import io.micronaut.http.HttpResponse;
7+
import io.micronaut.http.HttpStatus;
8+
import io.micronaut.http.annotation.Produces;
9+
import io.micronaut.http.hateoas.JsonError;
10+
import io.micronaut.http.hateoas.Link;
11+
import io.micronaut.http.server.exceptions.ExceptionHandler;
12+
import jakarta.inject.Singleton;
13+
import org.slf4j.Logger;
14+
import org.slf4j.LoggerFactory;
15+
16+
@Produces
17+
@Singleton
18+
@Requires(classes = {DataAccessException.class, ExceptionHandler.class})
19+
public class DataAccessExceptionHandler implements ExceptionHandler<DataAccessException, HttpResponse<?>> {
20+
21+
private static final Logger LOG = LoggerFactory.getLogger(DataAccessExceptionHandler.class);
22+
@Override
23+
public HttpResponse<?> handle(HttpRequest request, DataAccessException e) {
24+
JsonError error = new JsonError(e.getMessage())
25+
.link(Link.SELF, Link.of(request.getUri()));
26+
LOG.error(e.getMessage());
27+
return HttpResponse.<JsonError>status(HttpStatus.BAD_REQUEST).body(error);
28+
}
29+
30+
}

server/src/main/java/com/objectcomputing/checkins/exceptions/handlers/NotFoundHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
@Produces
1515
@Singleton
1616
@Requires(classes = {NotFoundException.class, ExceptionHandler.class})
17-
public class NotFoundHandler implements ExceptionHandler<NotFoundException, HttpResponse> {
17+
public class NotFoundHandler implements ExceptionHandler<NotFoundException, HttpResponse<?>> {
1818

1919
@Override
2020
public HttpResponse<?> handle(HttpRequest request, NotFoundException e) {

server/src/main/java/com/objectcomputing/checkins/exceptions/handlers/PermissionsHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
@Produces
1616
@Singleton
1717
@Requires(classes = {PermissionException.class, ExceptionHandler.class})
18-
public class PermissionsHandler implements ExceptionHandler<PermissionException, HttpResponse> {
18+
public class PermissionsHandler implements ExceptionHandler<PermissionException, HttpResponse<?>> {
1919

2020
@Override
2121
public HttpResponse<?> handle(HttpRequest request, PermissionException e) {
Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,39 @@
11
package com.objectcomputing.checkins.security.permissions;
22

33
public enum Permissions {
4-
CAN_VIEW_FEEDBACK_REQUEST,
5-
CAN_CREATE_FEEDBACK_REQUEST,
6-
CAN_DELETE_FEEDBACK_REQUEST,
7-
CAN_VIEW_FEEDBACK_ANSWER,
8-
CAN_DELETE_ORGANIZATION_MEMBERS,
9-
CAN_CREATE_ORGANIZATION_MEMBERS,
10-
CAN_VIEW_ROLE_PERMISSIONS,
11-
CAN_ASSIGN_ROLE_PERMISSIONS,
12-
CAN_VIEW_PERMISSIONS,
13-
CAN_VIEW_SKILLS_REPORT,
14-
CAN_VIEW_RETENTION_REPORT,
15-
CAN_VIEW_ANNIVERSARY_REPORT,
16-
CAN_VIEW_BIRTHDAY_REPORT,
17-
CAN_VIEW_PROFILE_REPORT,
18-
CAN_CREATE_CHECKINS,
19-
CAN_VIEW_CHECKINS,
20-
CAN_UPDATE_CHECKINS,
21-
}
4+
CAN_VIEW_FEEDBACK_REQUEST("View feedback requests", "Feedback"),
5+
CAN_CREATE_FEEDBACK_REQUEST("Create feedback requests", "Feedback"),
6+
CAN_DELETE_FEEDBACK_REQUEST("Delete feedback requests", "Feedback"),
7+
CAN_VIEW_FEEDBACK_ANSWER("View feedback answers", "Feedback"),
8+
CAN_DELETE_ORGANIZATION_MEMBERS("Delete organization members", "User Management"),
9+
CAN_CREATE_ORGANIZATION_MEMBERS("Create organization members", "User Management"),
10+
CAN_VIEW_ROLE_PERMISSIONS("View role permissions", "Security"),
11+
CAN_ASSIGN_ROLE_PERMISSIONS("Assign role permissions", "Security"),
12+
CAN_VIEW_PERMISSIONS("View all permissions", "Security"),
13+
CAN_VIEW_SKILLS_REPORT("View skills report", "Reporting"),
14+
CAN_VIEW_RETENTION_REPORT("View retention report", "Reporting"),
15+
CAN_VIEW_ANNIVERSARY_REPORT("View anniversary report", "Reporting"),
16+
CAN_VIEW_BIRTHDAY_REPORT("View birthday report", "Reporting"),
17+
CAN_VIEW_PROFILE_REPORT("View profile report", "Reporting"),
18+
CAN_CREATE_CHECKINS("Create check-ins", "Check-ins"),
19+
CAN_VIEW_CHECKINS("View check-ins", "Check-ins"),
20+
CAN_UPDATE_CHECKINS("Update check-ins", "Check-ins"),
21+
CAN_EDIT_SKILL_CATEGORIES("Edit skill categories", "Skills"),
22+
CAN_VIEW_SKILL_CATEGORIES("View skill categories", "Skills");
23+
24+
private final String description;
25+
private final String category;
26+
27+
Permissions(String description, String category) {
28+
this.description = description;
29+
this.category = category;
30+
}
31+
32+
public String getDescription() {
33+
return description;
34+
}
35+
36+
public String getCategory() {
37+
return category;
38+
}
39+
}

server/src/main/java/com/objectcomputing/checkins/services/feedback/suggestions/FeedbackSuggestionServiceImpl.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import io.micronaut.context.annotation.Property;
1010
import com.objectcomputing.checkins.exceptions.PermissionException;
1111
import jakarta.inject.Singleton;
12+
13+
import java.time.LocalDate;
1214
import java.util.LinkedList;
1315
import java.util.List;
1416
import java.util.Set;
@@ -47,11 +49,11 @@ public List<FeedbackSuggestionDTO> getSuggestionsByProfileId(UUID id) {
4749
}
4850

4951
List<FeedbackSuggestionDTO> suggestions = new LinkedList<>();
50-
if(suggestFor.getSupervisorid() != null && !suggestFor.getSupervisorid().equals(currentUser.getId())) {
52+
if(suggestFor.getSupervisorid() != null && !suggestFor.getSupervisorid().equals(currentUser.getId()) && isMemberActive(suggestFor.getSupervisorid())) {
5153
suggestions.add(new FeedbackSuggestionDTO("Supervisor of requestee", suggestFor.getSupervisorid()));
5254
}
5355

54-
if(suggestFor.getPdlId() != null && !suggestFor.getPdlId().equals(currentUser.getId())) {
56+
if(suggestFor.getPdlId() != null && !suggestFor.getPdlId().equals(currentUser.getId()) && isMemberActive(suggestFor.getPdlId())) {
5557
suggestions.add(new FeedbackSuggestionDTO("PDL of requestee", suggestFor.getPdlId()));
5658
}
5759

@@ -60,6 +62,7 @@ public List<FeedbackSuggestionDTO> getSuggestionsByProfileId(UUID id) {
6062
for(TeamMember currentMembership: teamMemberships){
6163
Set<TeamMember> teamMembers = teamMemberServices.findByFields(currentMembership.getTeamId(), null, null);
6264
Set<TeamMember> leads = teamMembers.stream().filter((member)-> member.isLead()).collect(Collectors.toSet());
65+
leads = filterTerminated(leads);
6366
for(TeamMember lead: leads) {
6467
if(suggestions.size() < maxSuggestions && !lead.getMemberId().equals(id) && !lead.getMemberId().equals(currentUserId)) {
6568
suggestions.add(new FeedbackSuggestionDTO("Team lead for requestee", lead.getMemberId()));
@@ -72,6 +75,7 @@ public List<FeedbackSuggestionDTO> getSuggestionsByProfileId(UUID id) {
7275
for(TeamMember currentMembership: teamMemberships){
7376
Set<TeamMember> teamMembers = teamMemberServices.findByFields(currentMembership.getTeamId(), null, null);
7477
teamMembers = teamMembers.stream().filter((member)-> !member.isLead()).collect(Collectors.toSet());
78+
teamMembers = filterTerminated(teamMembers);
7579
for(TeamMember teamMember: teamMembers) {
7680
if(suggestions.size() < maxSuggestions && !teamMember.getMemberId().equals(id) && !teamMember.getMemberId().equals(currentUserId)) {
7781
suggestions.add(new FeedbackSuggestionDTO("Team member for requestee", teamMember.getMemberId()));
@@ -80,6 +84,20 @@ public List<FeedbackSuggestionDTO> getSuggestionsByProfileId(UUID id) {
8084

8185
if(suggestions.size() >= maxSuggestions) break;
8286
}
87+
88+
return suggestions;
89+
}
90+
91+
private Set<TeamMember> filterTerminated(Set<TeamMember> suggestions) {
92+
suggestions = suggestions.stream().filter((TeamMember suggestion) -> {
93+
return isMemberActive(suggestion.getMemberId());
94+
}).collect(Collectors.toSet());
8395
return suggestions;
8496
}
97+
98+
private boolean isMemberActive(UUID memberId) {
99+
MemberProfile suggested = memberProfileServices.getById(memberId);
100+
LocalDate terminationDate = suggested.getTerminationDate();
101+
return !(terminationDate != null && terminationDate.isBefore(LocalDate.now().atStartOfDay().toLocalDate()));
102+
}
85103
}

0 commit comments

Comments
 (0)