Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EPMRPP-89198 routing refactor #984

Merged
merged 14 commits into from
Feb 26, 2024
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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:950d304'
}

//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
Loading