Skip to content

Commit

Permalink
EPMRPP-89198 routing refactor (#984)
Browse files Browse the repository at this point in the history
* EPMRPP-89198 organizations routing refactoring

* EPMRPP-89198 model dependency update
  • Loading branch information
grabsefx authored Feb 26, 2024
1 parent efee579 commit ade8559
Show file tree
Hide file tree
Showing 47 changed files with 1,849 additions and 409 deletions.
1 change: 1 addition & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:
branches:
- master
- develop
- feature/orgs
paths-ignore:
- '.github/**'
- README.md
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ dependencies {
} else {
compile 'com.github.reportportal:commons:07566b8e'
compile 'com.github.reportportal:commons-rules:42d4dd5634'
compile 'com.github.reportportal:commons-model:3072286352'
compile 'com.github.reportportal:commons-model:23adba8'
}

//https://nvd.nist.gov/vuln/detail/CVE-2020-10683 (dom4j 2.1.3 version dependency) AND https://nvd.nist.gov/vuln/detail/CVE-2019-14900
Expand Down
3 changes: 2 additions & 1 deletion codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ ignore:
- 'com/epam/ta/reportportal/entity/oauth',
- 'com/epam/ta/reportportal/entity/bts',
- 'com/epam/ta/reportportal/entity/ldap',
- 'com/epam/ta/reportportal/entity/widget/content/**'
- 'com/epam/ta/reportportal/entity/widget/content/**',
- 'com/epam/ta/reportportal/entity/organization'
2 changes: 1 addition & 1 deletion jooq.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,4 @@ jooq {

generateSampleJooqSchemaSource {
enabled = false
}
}
7 changes: 3 additions & 4 deletions project-properties.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ project.ext {
(migrationsUrl + '/migrations/76_user_bid_extension.up.sql') : 'V076__user_bid_extension.sql',
(migrationsUrl + '/migrations/77_email_server_documentation_link.up.sql') : 'V077__email_server_documentation_link.sql',
(migrationsUrl + '/migrations/78_drop_redundant_index.up.sql') : 'V078__drop_redundant_index.sql',
(migrationsUrl + '/migrations/83_add_slugify_function.up.sql') : 'V083__add_slugify_function.sql',
(migrationsUrl + '/migrations/84_organization_tables.up.sql') : 'V084__organization_tables.sql',

]
excludeTests = [
Expand All @@ -86,10 +88,7 @@ project.ext {
'com/epam/ta/reportportal/commons/accessible',
'com/epam/ta/reportportal/commons/querygen/constant',
'com/epam/ta/reportportal/exception',
'com/epam/ta/reportportal/entity/oauth',
'com/epam/ta/reportportal/entity/bts',
'com/epam/ta/reportportal/entity/ldap',
'com/epam/ta/reportportal/entity/widget/content/**'
'com/epam/ta/reportportal/entity/**'
]
limits = [
'instruction': 70,
Expand Down
120 changes: 74 additions & 46 deletions src/main/java/com/epam/ta/reportportal/commons/ReportPortalUser.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import static java.util.Optional.ofNullable;

import com.epam.ta.reportportal.entity.organization.OrganizationRole;
import com.epam.ta.reportportal.entity.project.ProjectRole;
import com.epam.ta.reportportal.entity.user.UserRole;
import com.epam.ta.reportportal.exception.ReportPortalException;
Expand All @@ -28,6 +29,10 @@
import java.util.Collections;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
Expand All @@ -38,6 +43,9 @@
*
* @author <a href="mailto:[email protected]">Andrei Varabyeu</a>
*/
@Getter
@Setter
@EqualsAndHashCode(callSuper = false)
public class ReportPortalUser extends User {

private Long userId;
Expand All @@ -47,6 +55,8 @@ public class ReportPortalUser extends User {
private String email;

private Map<String, ProjectDetails> projectDetails;
private Map<String, OrganizationDetails> organizationDetails;


private ReportPortalUser(String username, String password,
Collection<? extends GrantedAuthority> authorities, Long userId,
Expand All @@ -62,38 +72,8 @@ public static ReportPortalUserBuilder userBuilder() {
return new ReportPortalUserBuilder();
}

public Long getUserId() {
return userId;
}

public void setUserId(Long userId) {
this.userId = userId;
}

public UserRole getUserRole() {
return userRole;
}

public void setUserRole(UserRole userRole) {
this.userRole = userRole;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public Map<String, ProjectDetails> getProjectDetails() {
return projectDetails;
}

public void setProjectDetails(Map<String, ProjectDetails> projectDetails) {
this.projectDetails = projectDetails;
}

@Getter
@Setter
public static class ProjectDetails implements Serializable {

@JsonProperty(value = "id")
Expand All @@ -102,35 +82,29 @@ public static class ProjectDetails implements Serializable {
@JsonProperty(value = "name")
private String projectName;

@JsonProperty(value = "key")
private String projectKey;

@JsonProperty("role")
private ProjectRole projectRole;

public ProjectDetails(Long projectId, String projectName, ProjectRole projectRole) {
public ProjectDetails(Long projectId, String projectName, ProjectRole projectRole,
String projectKey) {
this.projectId = projectId;
this.projectName = projectName;
this.projectRole = projectRole;
this.projectKey = projectKey;
}

public static ProjectDetailsBuilder builder() {
return new ProjectDetailsBuilder();
}

public Long getProjectId() {
return projectId;
}

public String getProjectName() {
return projectName;
}

public ProjectRole getProjectRole() {
return projectRole;
}

public static class ProjectDetailsBuilder {

private Long projectId;
private String projectName;
private String projectKey;
private ProjectRole projectRole;

private ProjectDetailsBuilder() {
Expand All @@ -146,14 +120,68 @@ public ProjectDetailsBuilder withProjectName(String projectName) {
return this;
}

public ProjectDetailsBuilder withProjectKey(String projectKey) {
this.projectKey = projectKey;
return this;
}

public ProjectDetailsBuilder withProjectRole(String projectRole) {
this.projectRole = ProjectRole.forName(projectRole)
.orElseThrow(() -> new ReportPortalException(ErrorType.ROLE_NOT_FOUND, projectRole));
return this;
}

public ProjectDetails build() {
return new ProjectDetails(projectId, projectName, projectRole);
return new ProjectDetails(projectId, projectName, projectRole, projectKey);
}
}
}

@Getter
@Setter
@AllArgsConstructor
public static class OrganizationDetails implements Serializable {

@JsonProperty(value = "id")
private Long orgId;

@JsonProperty(value = "name")
private String orgName;

@JsonProperty("role")
private OrganizationRole orgRole;

public static OrganizationDetailsBuilder builder() {
return new OrganizationDetailsBuilder();
}

public static class OrganizationDetailsBuilder {

private Long orgId;
private String orgName;
private OrganizationRole orgRole;

private OrganizationDetailsBuilder() {
}

public OrganizationDetailsBuilder withOrgId(Long orgId) {
this.orgId = orgId;
return this;
}

public OrganizationDetailsBuilder withOrgName(String orgName) {
this.orgName = orgName;
return this;
}

public OrganizationDetailsBuilder withProjectRole(String orgRole) {
this.orgRole = OrganizationRole.forName(orgRole)
.orElseThrow(() -> new ReportPortalException(ErrorType.ROLE_NOT_FOUND, orgRole));
return this;
}

public OrganizationDetails build() {
return new OrganizationDetails(orgId, orgName, orgRole);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
import static com.epam.ta.reportportal.commons.querygen.constant.ProjectCriteriaConstant.CRITERIA_ALLOCATED_STORAGE;
import static com.epam.ta.reportportal.commons.querygen.constant.ProjectCriteriaConstant.CRITERIA_PROJECT_ATTRIBUTE_NAME;
import static com.epam.ta.reportportal.commons.querygen.constant.ProjectCriteriaConstant.CRITERIA_PROJECT_CREATION_DATE;
import static com.epam.ta.reportportal.commons.querygen.constant.ProjectCriteriaConstant.CRITERIA_PROJECT_KEY;
import static com.epam.ta.reportportal.commons.querygen.constant.ProjectCriteriaConstant.CRITERIA_PROJECT_NAME;
import static com.epam.ta.reportportal.commons.querygen.constant.ProjectCriteriaConstant.CRITERIA_PROJECT_ORGANIZATION;
import static com.epam.ta.reportportal.commons.querygen.constant.ProjectCriteriaConstant.CRITERIA_PROJECT_TYPE;
Expand Down Expand Up @@ -122,6 +123,7 @@
import static com.epam.ta.reportportal.jooq.Tables.ITEM_ATTRIBUTE;
import static com.epam.ta.reportportal.jooq.Tables.LAUNCH;
import static com.epam.ta.reportportal.jooq.Tables.LOG;
import static com.epam.ta.reportportal.jooq.Tables.ORGANIZATION;
import static com.epam.ta.reportportal.jooq.Tables.PARAMETER;
import static com.epam.ta.reportportal.jooq.Tables.PATTERN_TEMPLATE;
import static com.epam.ta.reportportal.jooq.Tables.PATTERN_TEMPLATE_TEST_ITEM;
Expand Down Expand Up @@ -183,6 +185,8 @@ public enum FilterTarget {
PROJECT.ALLOCATED_STORAGE, Long.class).get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_PROJECT_NAME, PROJECT.NAME, String.class)
.get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_PROJECT_KEY, PROJECT.KEY, String.class)
.get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_PROJECT_ORGANIZATION,
PROJECT.ORGANIZATION, String.class).get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_PROJECT_TYPE, PROJECT.PROJECT_TYPE,
Expand Down Expand Up @@ -220,7 +224,10 @@ public enum FilterTarget {
protected Collection<? extends SelectField> selectFields() {
return Lists.newArrayList(PROJECT.ID,
PROJECT.NAME,
PROJECT.KEY,
PROJECT.SLUG,
PROJECT.ORGANIZATION,
PROJECT.ORGANIZATION_ID,
PROJECT.PROJECT_TYPE,
PROJECT.CREATION_DATE,
PROJECT.METADATA,
Expand Down Expand Up @@ -265,6 +272,8 @@ protected Field<Long> idField() {
new CriteriaHolderBuilder().newBuilder(CRITERIA_ID, PROJECT.ID, Long.class).get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_PROJECT_NAME, PROJECT.NAME, String.class)
.get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_PROJECT_KEY, PROJECT.KEY, String.class)
.get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_PROJECT_TYPE, PROJECT.PROJECT_TYPE,
String.class).get(),

Expand Down Expand Up @@ -293,7 +302,7 @@ protected Field<Long> idField() {
public QuerySupplier getQuery() {
SelectQuery<? extends Record> query = DSL.select(selectFields()).getQuery();
addFrom(query);
query.addGroupBy(PROJECT.ID, PROJECT.CREATION_DATE, PROJECT.NAME, PROJECT.PROJECT_TYPE);
query.addGroupBy(PROJECT.ID, PROJECT.CREATION_DATE, PROJECT.KEY, PROJECT.PROJECT_TYPE);
QuerySupplier querySupplier = new QuerySupplier(query);
joinTables(querySupplier);
return querySupplier;
Expand All @@ -309,9 +318,12 @@ protected Collection<? extends SelectField> selectFields() {
DSL.max(LAUNCH.START_TIME).as(LAST_RUN),
PROJECT.ID,
PROJECT.CREATION_DATE,
PROJECT.KEY,
PROJECT.SLUG,
PROJECT.NAME,
PROJECT.PROJECT_TYPE,
PROJECT.ORGANIZATION
PROJECT.ORGANIZATION,
PROJECT.ORGANIZATION_ID
);
}

Expand Down Expand Up @@ -357,6 +369,12 @@ protected Field<Long> idField() {
new CriteriaHolderBuilder().newBuilder(CRITERIA_PROJECT, PROJECT.NAME, List.class)
.withAggregateCriteria(DSL.arrayAgg(PROJECT.NAME).toString())
.get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_PROJECT, PROJECT.KEY, List.class)
.withAggregateCriteria(DSL.arrayAgg(PROJECT.KEY).toString())
.get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_PROJECT, PROJECT.ORGANIZATION_ID, List.class)
.withAggregateCriteria(DSL.arrayAgg(PROJECT.ORGANIZATION_ID).toString())
.get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_LAST_LOGIN,
"(" + USERS.METADATA + "-> 'metadata' ->> 'last_login')::DOUBLE PRECISION ",
Long.class
Expand All @@ -382,10 +400,15 @@ protected Collection<? extends SelectField> selectFields() {
USERS.ROLE,
USERS.METADATA,
PROJECT.NAME,
PROJECT.KEY,
PROJECT.SLUG,
PROJECT.PROJECT_TYPE,
PROJECT_USER.PROJECT_ID,
PROJECT_USER.PROJECT_ROLE,
PROJECT_USER.USER_ID
PROJECT_USER.USER_ID,
ORGANIZATION.ID,
ORGANIZATION.SLUG,
ORGANIZATION.NAME
);
}

Expand All @@ -398,6 +421,7 @@ protected void addFrom(SelectQuery<? extends Record> query) {
protected void joinTables(QuerySupplier query) {
query.addJoin(PROJECT_USER, JoinType.LEFT_OUTER_JOIN, USERS.ID.eq(PROJECT_USER.USER_ID));
query.addJoin(PROJECT, JoinType.LEFT_OUTER_JOIN, PROJECT_USER.PROJECT_ID.eq(PROJECT.ID));
query.addJoin(ORGANIZATION, JoinType.LEFT_OUTER_JOIN, ORGANIZATION.ID.eq(PROJECT.ORGANIZATION_ID));
}

@Override
Expand Down Expand Up @@ -1194,6 +1218,8 @@ protected Field<Long> idField() {
new CriteriaHolderBuilder().newBuilder(CRITERIA_NAME, INTEGRATION_TYPE.NAME, String.class)
.get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_PROJECT_NAME, PROJECT.NAME, String.class)
.get(),
new CriteriaHolderBuilder().newBuilder(CRITERIA_PROJECT_KEY, PROJECT.KEY, String.class)
.get()
)) {
@Override
Expand All @@ -1207,7 +1233,10 @@ protected Collection<? extends SelectField> selectFields() {
INTEGRATION.CREATION_DATE,
INTEGRATION_TYPE.NAME,
INTEGRATION_TYPE.GROUP_TYPE,
PROJECT.NAME
PROJECT.NAME,
PROJECT.KEY,
PROJECT.SLUG,
PROJECT.ORGANIZATION_ID
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ public final class ProjectCriteriaConstant {

public static final String CRITERIA_PROJECT_TYPE = "type";
public static final String CRITERIA_PROJECT_NAME = "name";
public static final String CRITERIA_PROJECT_KEY = "key";
public static final String CRITERIA_PROJECT_SLUG = "slug";
public static final String CRITERIA_ALLOCATED_STORAGE = "allocatedStorage";
public static final String CRITERIA_PROJECT_ORGANIZATION = "organization";
public static final String CRITERIA_PROJECT_CREATION_DATE = "creationDate";
Expand Down
Loading

0 comments on commit ade8559

Please sign in to comment.