Skip to content

Commit ce03f93

Browse files
authored
feat: [PL-32494]: Resource layer tests and Custom Repo layer. (#48373)
* feat: [PL-32494]: Resource layer tests and Custom Repo layer. * feat: [PL-32494]: Resource layer tests and Custom Repo layer. * feat: [PL-32494]: Resource layer tests and Custom Repo layer. * feat: [PL-32494]: Resource layer tests and Custom Repo layer. * feat: [PL-32494]: Resource layer tests and Custom Repo layer. * feat: [PL-32494]: Resource layer tests and Custom Repo layer. * feat: [PL-32494]: Resource layer tests and Custom Repo layer. * feat: [PL-32494]: Resource layer tests and Custom Repo layer. * Rebase develop. * feat: [PL-32494]: Resource layer tests and Custom Repo layer. * fix: [CDS-70560]: Decreasing the log fetching frequency, adding exponential retry. * feat: [PL-32494]: Resource layer tests and Custom Repo layer.
1 parent fc85320 commit ce03f93

18 files changed

+780
-81
lines changed

120-ng-manager/contracts/openapi/v1/openapi.yaml

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1377,13 +1377,9 @@ components:
13771377
minLength: 1
13781378
maxLength: 128
13791379
module:
1380-
type: string
1381-
description: Harness module
1382-
pattern: '^[a-zA-Z_][0-9a-zA-Z_$]{0,127}$'
1383-
minLength: 1
1384-
maxLength: 128
1380+
$ref: '#/components/schemas/ModuleType'
13851381
resource_type:
1386-
type: string
1382+
$ref: '#/components/schemas/FavoritesResourceType'
13871383
description: Type of resource
13881384
pattern: '^[a-zA-Z_][0-9a-zA-Z_$]{0,127}$'
13891385
minLength: 1
@@ -1545,6 +1541,14 @@ components:
15451541
- GOVERNANCE
15461542
- CHAOS
15471543
- CET
1544+
FavoritesResourceType:
1545+
type: string
1546+
enum:
1547+
- CONNECTOR
1548+
- DELEGATE
1549+
- PIPELINE
1550+
- SECRET
1551+
- PROJECT
15481552
CreateProjectRequest:
15491553
description: Create project request
15501554
type: object
@@ -3478,11 +3482,5 @@ components:
34783482
in: query
34793483
required: false
34803484
schema:
3481-
type: string
3482-
enum:
3483-
- CONNECTOR
3484-
- DELEGATE
3485-
- PIPELINE
3486-
- SECRET
3487-
- PROJECT
3485+
$ref: '#/components/schemas/FavoritesResourceType'
34883486
description: Determines the type of favorite entity requested.

120-ng-manager/modules/favorites/src/main/java/io/harness/favorites/remote/AccountFavoritesApiImpl.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,24 @@
77

88
package io.harness.favorites.remote;
99

10-
import static io.harness.data.structure.EmptyPredicate.isNotEmpty;
11-
12-
import io.harness.favorites.ResourceType;
10+
import io.harness.eraro.ErrorCode;
11+
import io.harness.eraro.Level;
12+
import io.harness.eraro.ResponseMessage;
13+
import io.harness.exception.InvalidRequestException;
1314
import io.harness.favorites.services.FavoritesService;
1415
import io.harness.favorites.utils.FavoritesResourceUtils;
1516
import io.harness.spec.server.ng.v1.AccountFavoritesApi;
1617
import io.harness.spec.server.ng.v1.model.FavoriteDTO;
1718
import io.harness.spec.server.ng.v1.model.FavoriteResponse;
19+
import io.harness.spec.server.ng.v1.model.FavoritesResourceType;
1820

1921
import com.google.inject.Inject;
2022
import java.util.List;
2123
import javax.validation.Valid;
24+
import javax.ws.rs.core.MediaType;
2225
import javax.ws.rs.core.Response;
2326
import lombok.AllArgsConstructor;
2427
import lombok.extern.slf4j.Slf4j;
25-
import org.apache.commons.lang3.EnumUtils;
2628

2729
@AllArgsConstructor(onConstructor = @__({ @Inject }))
2830
@Slf4j
@@ -38,17 +40,28 @@ public Response createAccountFavorite(@Valid FavoriteDTO body, String accountIde
3840
}
3941

4042
@Override
41-
public Response deleteAccountFavorite(String userId, String harnessAccount, String resourceType, String resourceId) {
42-
favoritesService.deleteFavorite(harnessAccount, null, null, userId, resourceType, resourceId);
43+
public Response deleteAccountFavorite(
44+
String userId, String harnessAccount, FavoritesResourceType resourceType, String resourceId) {
45+
try {
46+
favoritesService.deleteFavorite(harnessAccount, null, null, userId, resourceType, resourceId);
47+
} catch (InvalidRequestException exception) {
48+
return Response.status(Response.Status.BAD_REQUEST)
49+
.entity(ResponseMessage.builder()
50+
.code(ErrorCode.INVALID_REQUEST)
51+
.level(Level.ERROR)
52+
.message(exception.getMessage())
53+
.build())
54+
.type(MediaType.APPLICATION_JSON)
55+
.build();
56+
}
4357
return Response.status(Response.Status.NO_CONTENT).build();
4458
}
4559

4660
@Override
47-
public Response getAccountFavorites(String userId, String harnessAccount, String resourceType) {
48-
if (isNotEmpty(resourceType)) {
49-
List<FavoriteResponse> favoriteResponses =
50-
favoritesResourceUtils.toFavoriteResponse(favoritesService.getFavorites(
51-
harnessAccount, null, null, userId, EnumUtils.getEnum(ResourceType.class, resourceType)));
61+
public Response getAccountFavorites(String userId, String harnessAccount, FavoritesResourceType resourceType) {
62+
if (resourceType != null) {
63+
List<FavoriteResponse> favoriteResponses = favoritesResourceUtils.toFavoriteResponse(
64+
favoritesService.getFavorites(harnessAccount, null, null, userId, resourceType));
5265
return Response.ok().entity(favoriteResponses).build();
5366
}
5467
List<FavoriteResponse> favoriteResponses =
Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,31 @@
77

88
package io.harness.favorites.remote;
99

10-
import static io.harness.data.structure.EmptyPredicate.isNotEmpty;
11-
1210
import static java.util.Objects.nonNull;
1311

12+
import io.harness.eraro.ErrorCode;
13+
import io.harness.eraro.Level;
14+
import io.harness.eraro.ResponseMessage;
1415
import io.harness.exception.InvalidRequestException;
15-
import io.harness.favorites.ResourceType;
1616
import io.harness.favorites.services.FavoritesService;
1717
import io.harness.favorites.utils.FavoritesResourceUtils;
1818
import io.harness.spec.server.ng.v1.OrgFavoritesApi;
1919
import io.harness.spec.server.ng.v1.model.FavoriteDTO;
2020
import io.harness.spec.server.ng.v1.model.FavoriteResponse;
21+
import io.harness.spec.server.ng.v1.model.FavoritesResourceType;
2122

2223
import com.google.inject.Inject;
2324
import java.util.List;
2425
import java.util.Objects;
2526
import javax.validation.Valid;
27+
import javax.ws.rs.core.MediaType;
2628
import javax.ws.rs.core.Response;
2729
import lombok.AllArgsConstructor;
2830
import lombok.extern.slf4j.Slf4j;
29-
import org.apache.commons.lang3.EnumUtils;
3031

3132
@AllArgsConstructor(onConstructor = @__({ @Inject }))
3233
@Slf4j
33-
public class OrgFavoriteApiImpl implements OrgFavoritesApi {
34+
public class OrgFavoritesApiImpl implements OrgFavoritesApi {
3435
@Inject private final FavoritesService favoritesService;
3536
@Inject private final FavoritesResourceUtils favoritesResourceUtils;
3637
@Override
@@ -46,21 +47,32 @@ public Response createOrgFavorite(String org, @Valid FavoriteDTO body, String ac
4647

4748
@Override
4849
public Response deleteOrgFavorite(
49-
String org, String userId, String harnessAccount, String resourceType, String resourceId) {
50-
favoritesService.deleteFavorite(harnessAccount, org, null, userId, resourceType, resourceId);
50+
String org, String userId, String harnessAccount, FavoritesResourceType resourceType, String resourceId) {
51+
try {
52+
favoritesService.deleteFavorite(harnessAccount, org, null, userId, resourceType, resourceId);
53+
} catch (InvalidRequestException exception) {
54+
return Response.status(Response.Status.BAD_REQUEST)
55+
.entity(ResponseMessage.builder()
56+
.code(ErrorCode.INVALID_REQUEST)
57+
.level(Level.ERROR)
58+
.message(exception.getMessage())
59+
.build())
60+
.type(MediaType.APPLICATION_JSON)
61+
.build();
62+
}
5163
return Response.status(Response.Status.NO_CONTENT).build();
5264
}
5365

5466
@Override
55-
public Response getOrgFavorites(String org, String userId, String harnessAccount, String resourceType) {
56-
if (isNotEmpty(resourceType)) {
57-
List<FavoriteResponse> favoriteResponses =
58-
favoritesResourceUtils.toFavoriteResponse(favoritesService.getFavorites(
59-
harnessAccount, org, null, userId, EnumUtils.getEnum(ResourceType.class, resourceType)));
67+
public Response getOrgFavorites(
68+
String org, String userId, String harnessAccount, FavoritesResourceType resourceType) {
69+
if (resourceType != null) {
70+
List<FavoriteResponse> favoriteResponses = favoritesResourceUtils.toFavoriteResponse(
71+
favoritesService.getFavorites(harnessAccount, org, null, userId, resourceType));
6072
return Response.ok().entity(favoriteResponses).build();
6173
}
6274
List<FavoriteResponse> favoriteResponses =
63-
favoritesResourceUtils.toFavoriteResponse(favoritesService.getFavorites(harnessAccount, null, null, userId));
75+
favoritesResourceUtils.toFavoriteResponse(favoritesService.getFavorites(harnessAccount, org, null, userId));
6476
return Response.ok().entity(favoriteResponses).build();
6577
}
6678
}
Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,29 @@
77

88
package io.harness.favorites.remote;
99

10-
import static io.harness.data.structure.EmptyPredicate.isNotEmpty;
11-
10+
import io.harness.eraro.ErrorCode;
11+
import io.harness.eraro.Level;
12+
import io.harness.eraro.ResponseMessage;
1213
import io.harness.exception.InvalidRequestException;
13-
import io.harness.favorites.ResourceType;
1414
import io.harness.favorites.services.FavoritesService;
1515
import io.harness.favorites.utils.FavoritesResourceUtils;
1616
import io.harness.spec.server.ng.v1.ProjectFavoritesApi;
1717
import io.harness.spec.server.ng.v1.model.FavoriteDTO;
1818
import io.harness.spec.server.ng.v1.model.FavoriteResponse;
19+
import io.harness.spec.server.ng.v1.model.FavoritesResourceType;
1920

2021
import com.google.inject.Inject;
2122
import java.util.List;
2223
import java.util.Objects;
2324
import javax.validation.Valid;
25+
import javax.ws.rs.core.MediaType;
2426
import javax.ws.rs.core.Response;
2527
import lombok.AllArgsConstructor;
2628
import lombok.extern.slf4j.Slf4j;
27-
import org.apache.commons.lang3.EnumUtils;
2829

2930
@AllArgsConstructor(onConstructor = @__({ @Inject }))
3031
@Slf4j
31-
public class ProjectFavoriteApiImpl implements ProjectFavoritesApi {
32+
public class ProjectFavoritesApiImpl implements ProjectFavoritesApi {
3233
@Inject private final FavoritesService favoritesService;
3334
@Inject private final FavoritesResourceUtils favoritesResourceUtils;
3435
@Override
@@ -42,23 +43,33 @@ public Response createProjectFavorite(String org, String project, @Valid Favorit
4243
}
4344

4445
@Override
45-
public Response deleteProjectFavorite(
46-
String org, String project, String userId, String harnessAccount, String resourceType, String resourceId) {
47-
favoritesService.deleteFavorite(harnessAccount, org, project, userId, resourceType, resourceId);
46+
public Response deleteProjectFavorite(String org, String project, String userId, String harnessAccount,
47+
FavoritesResourceType resourceType, String resourceId) {
48+
try {
49+
favoritesService.deleteFavorite(harnessAccount, org, project, userId, resourceType, resourceId);
50+
} catch (InvalidRequestException exception) {
51+
return Response.status(Response.Status.BAD_REQUEST)
52+
.entity(ResponseMessage.builder()
53+
.code(ErrorCode.INVALID_REQUEST)
54+
.level(Level.ERROR)
55+
.message(exception.getMessage())
56+
.build())
57+
.type(MediaType.APPLICATION_JSON)
58+
.build();
59+
}
4860
return Response.status(Response.Status.NO_CONTENT).build();
4961
}
5062

5163
@Override
5264
public Response getProjectFavorites(
53-
String org, String project, String userId, String harnessAccount, String resourceType) {
54-
if (isNotEmpty(resourceType)) {
55-
List<FavoriteResponse> favoriteResponses =
56-
favoritesResourceUtils.toFavoriteResponse(favoritesService.getFavorites(
57-
harnessAccount, org, project, userId, EnumUtils.getEnum(ResourceType.class, resourceType)));
65+
String org, String project, String userId, String harnessAccount, FavoritesResourceType resourceType) {
66+
if (resourceType != null) {
67+
List<FavoriteResponse> favoriteResponses = favoritesResourceUtils.toFavoriteResponse(
68+
favoritesService.getFavorites(harnessAccount, org, project, userId, resourceType));
5869
return Response.ok().entity(favoriteResponses).build();
5970
}
6071
List<FavoriteResponse> favoriteResponses =
61-
favoritesResourceUtils.toFavoriteResponse(favoritesService.getFavorites(harnessAccount, null, null, userId));
72+
favoritesResourceUtils.toFavoriteResponse(favoritesService.getFavorites(harnessAccount, org, project, userId));
6273
return Response.ok().entity(favoriteResponses).build();
6374
}
6475
}

120-ng-manager/modules/favorites/src/main/java/io/harness/favorites/services/FavoritesService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88
package io.harness.favorites.services;
99

10-
import io.harness.favorites.ResourceType;
1110
import io.harness.favorites.entities.Favorite;
1211
import io.harness.spec.server.ng.v1.model.FavoriteDTO;
12+
import io.harness.spec.server.ng.v1.model.FavoritesResourceType;
1313

1414
import java.util.List;
1515

@@ -32,7 +32,7 @@ public interface FavoritesService {
3232
*/
3333

3434
List<Favorite> getFavorites(String accountIdentifier, String orgIdentifier, String projectIdentifier, String userId,
35-
ResourceType resourceType);
35+
FavoritesResourceType resourceType);
3636

3737
/**
3838
*
@@ -56,5 +56,5 @@ List<Favorite> getFavorites(String accountIdentifier, String orgIdentifier, Stri
5656
*/
5757

5858
void deleteFavorite(String accountIdentifier, String orgIdentifier, String projectIdentifier, String userId,
59-
String resourceType, String resourceId);
59+
FavoritesResourceType resourceType, String resourceId);
6060
}

120-ng-manager/modules/favorites/src/main/java/io/harness/favorites/services/impl/FavoritesServiceImpl.java

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.harness.favorites.utils.FavoritesValidator;
1818
import io.harness.repositories.favorites.spring.FavoriteRepository;
1919
import io.harness.spec.server.ng.v1.model.FavoriteDTO;
20+
import io.harness.spec.server.ng.v1.model.FavoritesResourceType;
2021

2122
import com.google.inject.Inject;
2223
import java.util.List;
@@ -30,6 +31,7 @@ public class FavoritesServiceImpl implements FavoritesService {
3031
private final FavoriteRepository favoriteRepository;
3132
private final FavoritesResourceUtils favoritesResourceUtils;
3233
private final FavoritesValidator favoritesValidator;
34+
private static final String INVALID_RESOURCE_TYPE_ERROR_MESSAGE = "Please provide a valid resource Type";
3335

3436
@Inject
3537
public FavoritesServiceImpl(FavoriteRepository favoriteRepository, FavoritesResourceUtils favoritesResourceUtils,
@@ -52,7 +54,12 @@ public Favorite createFavorite(FavoriteDTO favoriteDTO, String accountIdentifier
5254

5355
@Override
5456
public List<Favorite> getFavorites(String accountIdentifier, String orgIdentifier, String projectIdentifier,
55-
String userId, ResourceType resourceType) {
57+
String userId, FavoritesResourceType resourceTypeDTO) {
58+
ResourceType resourceType =
59+
resourceTypeDTO != null ? EnumUtils.getEnum(ResourceType.class, resourceTypeDTO.toString()) : null;
60+
if (resourceType == null) {
61+
throw new InvalidRequestException(INVALID_RESOURCE_TYPE_ERROR_MESSAGE);
62+
}
5663
return favoriteRepository
5764
.findByAccountIdentifierAndOrgIdentifierAndProjectIdentifierAndUserIdentifierAndResourceType(
5865
accountIdentifier, orgIdentifier, projectIdentifier, userId, resourceType);
@@ -67,14 +74,14 @@ public List<Favorite> getFavorites(
6774

6875
@Override
6976
public void deleteFavorite(String accountIdentifier, String orgIdentifier, String projectIdentifier, String userId,
70-
String resourceType, String resourceId) {
71-
ResourceType resourceTypeEnum = EnumUtils.getEnum(ResourceType.class, resourceType);
72-
if (resourceTypeEnum != null) {
73-
favoriteRepository
74-
.deleteByAccountIdentifierAndOrgIdentifierAndProjectIdentifierAndUserIdentifierAndResourceTypeAndResourceIdentifier(
75-
accountIdentifier, orgIdentifier, projectIdentifier, userId, resourceTypeEnum, resourceId);
76-
} else {
77-
throw new InvalidRequestException("Please provide a valid resource Type");
77+
FavoritesResourceType resourceTypeDTO, String resourceId) throws InvalidRequestException {
78+
ResourceType resourceType =
79+
resourceTypeDTO != null ? EnumUtils.getEnum(ResourceType.class, resourceTypeDTO.toString()) : null;
80+
if (resourceType == null) {
81+
throw new InvalidRequestException(INVALID_RESOURCE_TYPE_ERROR_MESSAGE);
7882
}
83+
favoriteRepository
84+
.deleteByAccountIdentifierAndOrgIdentifierAndProjectIdentifierAndUserIdentifierAndResourceTypeAndResourceIdentifier(
85+
accountIdentifier, orgIdentifier, projectIdentifier, userId, resourceType, resourceId);
7986
}
8087
}

120-ng-manager/modules/favorites/src/main/java/io/harness/favorites/utils/FavoritesResourceUtils.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.harness.favorites.entities.Favorite;
1515
import io.harness.spec.server.ng.v1.model.FavoriteDTO;
1616
import io.harness.spec.server.ng.v1.model.FavoriteResponse;
17+
import io.harness.spec.server.ng.v1.model.FavoritesResourceType;
1718

1819
import com.google.inject.Singleton;
1920
import java.util.List;
@@ -28,8 +29,8 @@ private FavoriteDTO toFavoriteDTO(Favorite favorite) {
2829
.org(favorite.getOrgIdentifier())
2930
.project(favorite.getProjectIdentifier())
3031
.userId(favorite.getUserIdentifier())
31-
.module(favorite.getModule().toString())
32-
.resourceType(favorite.getResourceType().toString())
32+
.module(io.harness.spec.server.ng.v1.model.ModuleType.fromValue(favorite.getModule().toString()))
33+
.resourceType(FavoritesResourceType.fromValue(favorite.getResourceType().toString()))
3334
.resourceId(favorite.getResourceIdentifier());
3435
}
3536

@@ -39,8 +40,8 @@ public Favorite toFavoriteEntity(FavoriteDTO favoriteDTO, String accountIdentifi
3940
.orgIdentifier(favoriteDTO.getOrg())
4041
.projectIdentifier(favoriteDTO.getProject())
4142
.userIdentifier(favoriteDTO.getUserId())
42-
.module(EnumUtils.getEnum(ModuleType.class, favoriteDTO.getModule()))
43-
.resourceType(EnumUtils.getEnum(ResourceType.class, favoriteDTO.getResourceType()))
43+
.module(EnumUtils.getEnum(ModuleType.class, favoriteDTO.getModule().toString()))
44+
.resourceType(EnumUtils.getEnum(ResourceType.class, favoriteDTO.getResourceType().toString()))
4445
.resourceIdentifier(favoriteDTO.getResourceId())
4546
.build();
4647
}

120-ng-manager/modules/favorites/src/main/java/io/harness/favorites/utils/FavoritesValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public void validateFavoriteEntry(FavoriteDTO favoriteDTO, String accountIdentif
9393
checkIfUserExist(favoriteDTO, accountIdentifier);
9494
// Resource existence check
9595
boolean resourceExist = true;
96-
switch (EnumUtils.getEnum(ResourceType.class, favoriteDTO.getResourceType())) {
96+
switch (EnumUtils.getEnum(ResourceType.class, favoriteDTO.getResourceType().toString())) {
9797
case CONNECTOR:
9898
resourceExist = doesConnectorExist(favoriteDTO, accountIdentifier);
9999
break;

0 commit comments

Comments
 (0)