diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a508772bc..886c943f8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,6 +6,7 @@ on: branches: - master - develop + - feature/orgs paths-ignore: - '.github/**' - README.md diff --git a/build.gradle b/build.gradle index c496469be..3f2893657 100644 --- a/build.gradle +++ b/build.gradle @@ -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 diff --git a/codecov.yml b/codecov.yml index 78b7df448..562620472 100644 --- a/codecov.yml +++ b/codecov.yml @@ -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/**' \ No newline at end of file + - 'com/epam/ta/reportportal/entity/widget/content/**', + - 'com/epam/ta/reportportal/entity/organization' diff --git a/jooq.gradle b/jooq.gradle index b2033abed..24e729999 100644 --- a/jooq.gradle +++ b/jooq.gradle @@ -36,4 +36,4 @@ jooq { generateSampleJooqSchemaSource { enabled = false -} \ No newline at end of file +} diff --git a/project-properties.gradle b/project-properties.gradle index f67d3868e..778fe9564 100755 --- a/project-properties.gradle +++ b/project-properties.gradle @@ -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 = [ @@ -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, diff --git a/src/main/java/com/epam/ta/reportportal/commons/ReportPortalUser.java b/src/main/java/com/epam/ta/reportportal/commons/ReportPortalUser.java index 7dc6c7106..02e41235f 100644 --- a/src/main/java/com/epam/ta/reportportal/commons/ReportPortalUser.java +++ b/src/main/java/com/epam/ta/reportportal/commons/ReportPortalUser.java @@ -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; @@ -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; @@ -38,6 +43,9 @@ * * @author Andrei Varabyeu */ +@Getter +@Setter +@EqualsAndHashCode(callSuper = false) public class ReportPortalUser extends User { private Long userId; @@ -47,6 +55,8 @@ public class ReportPortalUser extends User { private String email; private Map projectDetails; + private Map organizationDetails; + private ReportPortalUser(String username, String password, Collection authorities, Long userId, @@ -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 getProjectDetails() { - return projectDetails; - } - - public void setProjectDetails(Map projectDetails) { - this.projectDetails = projectDetails; - } - + @Getter + @Setter public static class ProjectDetails implements Serializable { @JsonProperty(value = "id") @@ -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() { @@ -146,6 +120,11 @@ 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)); @@ -153,7 +132,56 @@ public ProjectDetailsBuilder withProjectRole(String projectRole) { } 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); } } } diff --git a/src/main/java/com/epam/ta/reportportal/commons/querygen/FilterTarget.java b/src/main/java/com/epam/ta/reportportal/commons/querygen/FilterTarget.java index 935f1f703..fbcd395ad 100644 --- a/src/main/java/com/epam/ta/reportportal/commons/querygen/FilterTarget.java +++ b/src/main/java/com/epam/ta/reportportal/commons/querygen/FilterTarget.java @@ -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; @@ -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; @@ -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, @@ -220,7 +224,10 @@ public enum FilterTarget { protected Collection 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, @@ -265,6 +272,8 @@ protected Field 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(), @@ -293,7 +302,7 @@ protected Field idField() { public QuerySupplier getQuery() { SelectQuery 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; @@ -309,9 +318,12 @@ protected Collection 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 ); } @@ -357,6 +369,12 @@ protected Field 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 @@ -382,10 +400,15 @@ protected Collection 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 ); } @@ -398,6 +421,7 @@ protected void addFrom(SelectQuery 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 @@ -1194,6 +1218,8 @@ protected Field 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 @@ -1207,7 +1233,10 @@ protected Collection selectFields() { INTEGRATION.CREATION_DATE, INTEGRATION_TYPE.NAME, INTEGRATION_TYPE.GROUP_TYPE, - PROJECT.NAME + PROJECT.NAME, + PROJECT.KEY, + PROJECT.SLUG, + PROJECT.ORGANIZATION_ID ); } diff --git a/src/main/java/com/epam/ta/reportportal/commons/querygen/constant/ProjectCriteriaConstant.java b/src/main/java/com/epam/ta/reportportal/commons/querygen/constant/ProjectCriteriaConstant.java index 59a667720..2b2de0004 100644 --- a/src/main/java/com/epam/ta/reportportal/commons/querygen/constant/ProjectCriteriaConstant.java +++ b/src/main/java/com/epam/ta/reportportal/commons/querygen/constant/ProjectCriteriaConstant.java @@ -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"; diff --git a/src/main/java/com/epam/ta/reportportal/config/DataSourceConfig.java b/src/main/java/com/epam/ta/reportportal/config/DataSourceConfig.java index 7ce5d6f43..c9906cb15 100644 --- a/src/main/java/com/epam/ta/reportportal/config/DataSourceConfig.java +++ b/src/main/java/com/epam/ta/reportportal/config/DataSourceConfig.java @@ -22,6 +22,9 @@ import java.io.File; import java.io.IOException; import javax.sql.DataSource; +import org.postgresql.ds.PGSimpleDataSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -36,6 +39,8 @@ @ConfigurationProperties(prefix = "rp.datasource") public class DataSourceConfig extends HikariConfig { + private static final Logger log = LoggerFactory.getLogger(DataSourceConfig.class); + @Primary @Bean @Profile("!unittest") @@ -53,6 +58,8 @@ public DataSource testDataSource(@Value("${embedded.datasource.dir}") String dat .setPort(port) .setDataDirectory(new File(dataDir)) .setCleanDataDirectory(clean); - return builder.start().getPostgresDatabase(); + DataSource dataSource = builder.start().getPostgresDatabase(); + log.info("Database started on port: {}", ((PGSimpleDataSource) dataSource).getPortNumbers()); + return dataSource; } } diff --git a/src/main/java/com/epam/ta/reportportal/dao/ProjectRepository.java b/src/main/java/com/epam/ta/reportportal/dao/ProjectRepository.java index 1600fe21f..2c22ea3bb 100644 --- a/src/main/java/com/epam/ta/reportportal/dao/ProjectRepository.java +++ b/src/main/java/com/epam/ta/reportportal/dao/ProjectRepository.java @@ -27,7 +27,9 @@ public interface ProjectRepository extends ReportPortalRepository Optional findByName(String name); - boolean existsByName(String name); + Optional findByKey(String key); + + boolean existsByName(String name); @Query(value = "SELECT p.* FROM project p JOIN project_user pu on p.id = pu.project_id JOIN users u on pu.user_id = u.id WHERE u.login = :login", nativeQuery = true) List findUserProjects(@Param("login") String login); diff --git a/src/main/java/com/epam/ta/reportportal/dao/ProjectUserRepositoryCustom.java b/src/main/java/com/epam/ta/reportportal/dao/ProjectUserRepositoryCustom.java index 3e00c5fca..8d87bb837 100644 --- a/src/main/java/com/epam/ta/reportportal/dao/ProjectUserRepositoryCustom.java +++ b/src/main/java/com/epam/ta/reportportal/dao/ProjectUserRepositoryCustom.java @@ -5,7 +5,7 @@ public interface ProjectUserRepositoryCustom { - Optional findDetailsByUserIdAndProjectName(Long userId, String projectName); + Optional findDetailsByUserIdAndProjectKey(Long userId, String projectKey); - Optional findAdminDetailsProjectName(String projectName); + Optional findAdminDetailsProjectKey(String projectKey); } diff --git a/src/main/java/com/epam/ta/reportportal/dao/ProjectUserRepositoryCustomImpl.java b/src/main/java/com/epam/ta/reportportal/dao/ProjectUserRepositoryCustomImpl.java index 52565ec54..70cf75af0 100644 --- a/src/main/java/com/epam/ta/reportportal/dao/ProjectUserRepositoryCustomImpl.java +++ b/src/main/java/com/epam/ta/reportportal/dao/ProjectUserRepositoryCustomImpl.java @@ -22,23 +22,25 @@ public ProjectUserRepositoryCustomImpl(DSLContext dsl) { } @Override - public Optional findDetailsByUserIdAndProjectName(Long userId, String projectName) { - return dsl.select(PROJECT_USER.PROJECT_ID, PROJECT_USER.PROJECT_ROLE, PROJECT.NAME) + public Optional findDetailsByUserIdAndProjectKey(Long userId, String projectKey) { + return dsl.select(PROJECT_USER.PROJECT_ID, PROJECT_USER.PROJECT_ROLE, PROJECT.NAME, PROJECT.KEY) .from(PROJECT_USER) .join(PROJECT) .on(PROJECT_USER.PROJECT_ID.eq(PROJECT.ID)) .where(PROJECT_USER.USER_ID.eq(userId)) - .and(PROJECT.NAME.eq(projectName)) + .and(PROJECT.KEY.eq(projectKey)) .fetchOptional(PROJECT_DETAILS_MAPPER); } @Override - public Optional findAdminDetailsProjectName(String projectName) { - return dsl.select(PROJECT.ID.as(PROJECT_USER.PROJECT_ID), + public Optional findAdminDetailsProjectKey(String projectKey) { + return dsl.select( + PROJECT.ID.as(PROJECT_USER.PROJECT_ID), DSL.val("PROJECT_MANAGER").as(PROJECT_USER.PROJECT_ROLE), - PROJECT.NAME) + PROJECT.NAME, + PROJECT.KEY) .from(PROJECT) - .where(PROJECT.NAME.eq(projectName)) + .where(PROJECT.KEY.eq(projectKey)) .fetchOptional(PROJECT_DETAILS_MAPPER); } } diff --git a/src/main/java/com/epam/ta/reportportal/dao/TestItemRepositoryCustomImpl.java b/src/main/java/com/epam/ta/reportportal/dao/TestItemRepositoryCustomImpl.java index f206725d6..654f0a800 100644 --- a/src/main/java/com/epam/ta/reportportal/dao/TestItemRepositoryCustomImpl.java +++ b/src/main/java/com/epam/ta/reportportal/dao/TestItemRepositoryCustomImpl.java @@ -1196,7 +1196,11 @@ private Condition hasContentQuery(JTestItem nested, CommonTableExpression logsCt } /** - * @return Map + * Selects and returns a map of PathName objects based on the provided collection of TestItem objects. + * + * @param testItems the collection of TestItem objects to be used to generate the map of PathNames + * @return a map with the test item IDs as keys and the PathName objects as values. + * If the provided collection of test items is null or empty, it returns an empty map. */ @Override public Map selectPathNames(Collection testItems) { diff --git a/src/main/java/com/epam/ta/reportportal/dao/WidgetContentRepositoryImpl.java b/src/main/java/com/epam/ta/reportportal/dao/WidgetContentRepositoryImpl.java index d05e230ba..2279ab6dc 100644 --- a/src/main/java/com/epam/ta/reportportal/dao/WidgetContentRepositoryImpl.java +++ b/src/main/java/com/epam/ta/reportportal/dao/WidgetContentRepositoryImpl.java @@ -865,7 +865,8 @@ public List activityStatistics(Filter filter, Sort sort, int l ACTIVITY.OBJECT_NAME, ACTIVITY.SUBJECT_NAME, USERS.LOGIN, - PROJECT.NAME + PROJECT.NAME, + PROJECT.KEY ) .from(ACTIVITY) .join(ACTIVITIES) diff --git a/src/main/java/com/epam/ta/reportportal/dao/organization/OrganizationRepository.java b/src/main/java/com/epam/ta/reportportal/dao/organization/OrganizationRepository.java new file mode 100644 index 000000000..0ae826939 --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/dao/organization/OrganizationRepository.java @@ -0,0 +1,40 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.dao.organization; + +import com.epam.ta.reportportal.dao.ReportPortalRepository; +import com.epam.ta.reportportal.entity.organization.Organization; + +import java.util.Optional; + +/** + * @author Siarhei Hrabko + */ +public interface OrganizationRepository extends ReportPortalRepository { + + /** + * @param name name of organization + * @return {@link Optional} of {@link Organization} + */ + Optional findByName(String name); + + /** + * @param slug slug name of organization + * @return {@link Optional} of {@link Organization} + */ + Optional findBySlug(String slug); +} diff --git a/src/main/java/com/epam/ta/reportportal/dao/organization/OrganizationUserRepository.java b/src/main/java/com/epam/ta/reportportal/dao/organization/OrganizationUserRepository.java new file mode 100644 index 000000000..187bd672a --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/dao/organization/OrganizationUserRepository.java @@ -0,0 +1,29 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.dao.organization; + +import com.epam.ta.reportportal.dao.ReportPortalRepository; +import com.epam.ta.reportportal.entity.organization.OrganizationUser; +import com.epam.ta.reportportal.entity.organization.OrganizationUserId; + +/** + * @author Siarhei Hrabko + */ +public interface OrganizationUserRepository extends + ReportPortalRepository { + +} diff --git a/src/main/java/com/epam/ta/reportportal/dao/util/RecordMappers.java b/src/main/java/com/epam/ta/reportportal/dao/util/RecordMappers.java index 265eba6c9..b8df3bcb9 100644 --- a/src/main/java/com/epam/ta/reportportal/dao/util/RecordMappers.java +++ b/src/main/java/com/epam/ta/reportportal/dao/util/RecordMappers.java @@ -33,6 +33,7 @@ import static com.epam.ta.reportportal.jooq.Tables.ISSUE_TYPE; 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.PATTERN_TEMPLATE; import static com.epam.ta.reportportal.jooq.Tables.PROJECT; import static com.epam.ta.reportportal.jooq.Tables.PROJECT_USER; @@ -80,6 +81,7 @@ import com.epam.ta.reportportal.entity.item.issue.IssueType; import com.epam.ta.reportportal.entity.launch.Launch; import com.epam.ta.reportportal.entity.log.Log; +import com.epam.ta.reportportal.entity.organization.Organization; import com.epam.ta.reportportal.entity.pattern.PatternTemplate; import com.epam.ta.reportportal.entity.project.Project; import com.epam.ta.reportportal.entity.project.ProjectRole; @@ -115,7 +117,7 @@ import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Function; -import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.collections4.CollectionUtils; import org.apache.logging.log4j.util.Strings; import org.jooq.Field; import org.jooq.Record; @@ -389,10 +391,16 @@ public class RecordMappers { ProjectUser projectUser = new ProjectUser(); projectUser.setProjectRole(r.into(PROJECT_USER.PROJECT_ROLE).into(ProjectRole.class)); + Organization organization = new Organization(); + organization.setId(r.get(ORGANIZATION.ID)); + Project project = new Project(); project.setId(r.get(PROJECT_USER.PROJECT_ID)); project.setName(r.get(PROJECT.NAME)); + project.setKey(r.get(PROJECT.KEY)); + project.setSlug(r.get(PROJECT.SLUG)); project.setProjectType(ProjectType.valueOf(r.get(PROJECT.PROJECT_TYPE))); + project.setOrganization(organization); User user = new User(); user.setLogin(r.get(USERS.LOGIN)); @@ -407,7 +415,8 @@ public class RecordMappers { final Long projectId = r.get(PROJECT_USER.PROJECT_ID); final String projectName = r.get(PROJECT.NAME); final ProjectRole projectRole = r.into(PROJECT_USER.PROJECT_ROLE).into(ProjectRole.class); - return new ReportPortalUser.ProjectDetails(projectId, projectName, projectRole); + final String projectKey = r.get(PROJECT.KEY); + return new ReportPortalUser.ProjectDetails(projectId, projectName, projectRole, projectKey); }; public static final RecordMapper ACTIVITY_MAPPER = r -> { @@ -531,7 +540,7 @@ public class RecordMappers { } } - if (attributeList.size() > 0) { + if (CollectionUtils.isNotEmpty(attributeList)) { return Optional.of(attributeList); } else { return Optional.empty(); diff --git a/src/main/java/com/epam/ta/reportportal/dao/util/ResultFetchers.java b/src/main/java/com/epam/ta/reportportal/dao/util/ResultFetchers.java index 2e98bf560..579ed0298 100644 --- a/src/main/java/com/epam/ta/reportportal/dao/util/ResultFetchers.java +++ b/src/main/java/com/epam/ta/reportportal/dao/util/ResultFetchers.java @@ -34,6 +34,7 @@ import static com.epam.ta.reportportal.jooq.Tables.INTEGRATION; 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.OWNED_ENTITY; import static com.epam.ta.reportportal.jooq.Tables.PARAMETER; import static com.epam.ta.reportportal.jooq.Tables.PROJECT_ATTRIBUTE; import static com.epam.ta.reportportal.jooq.tables.JProject.PROJECT; @@ -67,26 +68,18 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; import org.jooq.Record; import org.jooq.Result; import org.springframework.data.domain.Sort; import org.springframework.util.CollectionUtils; -import java.util.*; -import java.util.function.Function; - -import static com.epam.ta.reportportal.dao.constant.LogRepositoryConstants.PAGE_NUMBER; -import static com.epam.ta.reportportal.dao.constant.LogRepositoryConstants.TYPE; -import static com.epam.ta.reportportal.dao.constant.LogRepositoryConstants.LOG_LEVEL; -import static com.epam.ta.reportportal.dao.constant.WidgetContentRepositoryConstants.ID; -import static com.epam.ta.reportportal.dao.util.RecordMappers.*; -import static com.epam.ta.reportportal.jooq.Tables.*; -import static com.epam.ta.reportportal.jooq.tables.JProject.PROJECT; -import static com.epam.ta.reportportal.jooq.tables.JProjectUser.PROJECT_USER; -import static com.epam.ta.reportportal.jooq.tables.JTestItem.TEST_ITEM; -import static com.epam.ta.reportportal.jooq.tables.JUsers.USERS; -import static java.util.Optional.ofNullable; - /** * Fetches results from db by JOOQ queries into Java objects. * diff --git a/src/main/java/com/epam/ta/reportportal/dao/util/WidgetContentUtil.java b/src/main/java/com/epam/ta/reportportal/dao/util/WidgetContentUtil.java index 23e407517..f013a3304 100644 --- a/src/main/java/com/epam/ta/reportportal/dao/util/WidgetContentUtil.java +++ b/src/main/java/com/epam/ta/reportportal/dao/util/WidgetContentUtil.java @@ -250,6 +250,7 @@ public static void consumeIfNotNull(K key, V value, BiConsumer cons : r.get(ACTIVITY.SUBJECT_NAME)); activityResource.setProjectId(r.get(ACTIVITY.PROJECT_ID)); activityResource.setProjectName(r.get(PROJECT.NAME)); + activityResource.setProjectKey(r.get(PROJECT.KEY)); activityResource.setActionType(r.get(ACTIVITY.EVENT_NAME)); activityResource.setObjectType(r.get(ACTIVITY.OBJECT_TYPE)); activityResource.setObjectName(r.get(ACTIVITY.OBJECT_NAME)); diff --git a/src/main/java/com/epam/ta/reportportal/entity/enums/OrganizationType.java b/src/main/java/com/epam/ta/reportportal/entity/enums/OrganizationType.java new file mode 100644 index 000000000..1639a1980 --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/entity/enums/OrganizationType.java @@ -0,0 +1,42 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.entity.enums; + +import java.util.Arrays; +import java.util.Optional; + +/** + * Project Type enumeration
Used for supporting different organization types processing. + * + * @author Siarhei Hrabko + */ +public enum OrganizationType { + + PERSONAL, + INTERNAL, + UPSA; + + public static Optional findByName(String name) { + return Arrays.stream(OrganizationType.values()) + .filter(type -> type.name().equalsIgnoreCase(name)) + .findAny(); + } + + public static boolean isPresent(String name) { + return findByName(name).isPresent(); + } +} diff --git a/src/main/java/com/epam/ta/reportportal/entity/enums/converter/OrganizationTypeConverter.java b/src/main/java/com/epam/ta/reportportal/entity/enums/converter/OrganizationTypeConverter.java new file mode 100644 index 000000000..cecf519d4 --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/entity/enums/converter/OrganizationTypeConverter.java @@ -0,0 +1,43 @@ +/* + * Copyright 2019 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.entity.enums.converter; + +import com.epam.ta.reportportal.entity.enums.OrganizationType; +import com.epam.ta.reportportal.exception.ReportPortalException; +import javax.persistence.AttributeConverter; +import javax.persistence.Converter; + +/** + * Organization type converter. Converts from ordinal value to String representations + * + * @author Siarhei Hrabko + */ +@Converter(autoApply = true) +public class OrganizationTypeConverter implements AttributeConverter { + + @Override + public String convertToDatabaseColumn(OrganizationType attribute) { + return attribute.toString(); + } + + @Override + public OrganizationType convertToEntityAttribute(String orgType) { + return OrganizationType.findByName(orgType) + .orElseThrow( + () -> new ReportPortalException("Can not convert organization type from database.")); + } +} diff --git a/src/main/java/com/epam/ta/reportportal/entity/organization/Organization.java b/src/main/java/com/epam/ta/reportportal/entity/organization/Organization.java new file mode 100644 index 000000000..67b5690f4 --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/entity/organization/Organization.java @@ -0,0 +1,61 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.entity.organization; + +import com.epam.ta.reportportal.entity.enums.OrganizationType; +import java.io.Serializable; +import java.time.LocalDateTime; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author Siarhei Hrabko + */ +@Entity +@Table(name = "organization", schema = "public") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Organization implements Serializable { + + private static final long serialVersionUID = 6730810629133187834L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id", unique = true, nullable = false, precision = 64) + private Long id; + + @Column(name = "creation_date", nullable = false) + private LocalDateTime creationDate; + + @Column(name = "name") + private String name; + + @Column(name = "organization_type") + private OrganizationType organizationType; + + @Column(name = "slug") + private String slug; + +} diff --git a/src/main/java/com/epam/ta/reportportal/entity/organization/OrganizationRole.java b/src/main/java/com/epam/ta/reportportal/entity/organization/OrganizationRole.java new file mode 100644 index 000000000..52d7896d6 --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/entity/organization/OrganizationRole.java @@ -0,0 +1,35 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.entity.organization; + +import java.util.Arrays; +import java.util.Optional; + +/** + * @author Siarhei Hrabko + */ +public enum OrganizationRole { + + MANAGER, + MEMBER; + + public static Optional forName(final String name) { + return Arrays.stream(OrganizationRole.values()) + .filter(role -> role.name().equalsIgnoreCase(name)) + .findAny(); + } +} diff --git a/src/main/java/com/epam/ta/reportportal/entity/organization/OrganizationUser.java b/src/main/java/com/epam/ta/reportportal/entity/organization/OrganizationUser.java new file mode 100644 index 000000000..edcb3e74f --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/entity/organization/OrganizationUser.java @@ -0,0 +1,88 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.entity.organization; + +import com.epam.ta.reportportal.entity.enums.PostgreSQLEnumType; +import com.epam.ta.reportportal.entity.user.User; + +import javax.persistence.Column; +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.FetchType; +import javax.persistence.ManyToOne; +import javax.persistence.MapsId; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Objects; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; +import org.hibernate.annotations.TypeDef; + +/** + * @author Siarhei Hrabko + */ +@Entity +@Data +@TypeDef(name = "pqsql_enum", typeClass = PostgreSQLEnumType.class) +@Table(name = "organization_user", schema = "public") +@NoArgsConstructor +@AllArgsConstructor +public class OrganizationUser implements Serializable { + + private static final long serialVersionUID = 7313055792392238124L; + + @EmbeddedId + private OrganizationUserId id; + + @ManyToOne(fetch = FetchType.EAGER) + @MapsId("organizationId") + private Organization organization; + + @ManyToOne(fetch = FetchType.EAGER) + @MapsId("userId") + private User user; + + @Column(name = "organization_role") + @Enumerated(EnumType.STRING) + @Type(type = "pqsql_enum") + private OrganizationRole organizationRole; + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof OrganizationUser)) { + return false; + } + OrganizationUser that = (OrganizationUser) o; + return organization.equals(that.organization) + && id.equals(that.id) + && user.equals(that.user) + && organizationRole == that.organizationRole; + } + + @Override + public int hashCode() { + return Objects.hash(id, organization, user, organizationRole); + } +} diff --git a/src/main/java/com/epam/ta/reportportal/entity/organization/OrganizationUserId.java b/src/main/java/com/epam/ta/reportportal/entity/organization/OrganizationUserId.java new file mode 100644 index 000000000..8d8b4a93c --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/entity/organization/OrganizationUserId.java @@ -0,0 +1,37 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.entity.organization; + +import java.io.Serializable; +import javax.persistence.Column; +import javax.persistence.Embeddable; +import lombok.Data; + +/** + * @author Siarhei Hrabko + */ +@Embeddable +@Data +public class OrganizationUserId implements Serializable { + + @Column(name = "organization_id") + private Long organizationId; + + @Column(name = "user_id") + private Long userId; + +} diff --git a/src/main/java/com/epam/ta/reportportal/entity/project/Project.java b/src/main/java/com/epam/ta/reportportal/entity/project/Project.java index 75041070d..2639918c3 100644 --- a/src/main/java/com/epam/ta/reportportal/entity/project/Project.java +++ b/src/main/java/com/epam/ta/reportportal/entity/project/Project.java @@ -19,6 +19,7 @@ import com.epam.ta.reportportal.entity.Metadata; import com.epam.ta.reportportal.entity.enums.ProjectType; import com.epam.ta.reportportal.entity.integration.Integration; +import com.epam.ta.reportportal.entity.organization.Organization; import com.epam.ta.reportportal.entity.pattern.PatternTemplate; import com.epam.ta.reportportal.entity.project.email.SenderCase; import com.epam.ta.reportportal.entity.user.ProjectUser; @@ -35,9 +36,14 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.MapsId; import javax.persistence.OneToMany; import javax.persistence.OrderBy; import javax.persistence.Table; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; @@ -47,6 +53,9 @@ @Entity @TypeDef(name = "json", typeClass = Metadata.class) @Table(name = "project", schema = "public") +@Getter +@Setter +@NoArgsConstructor public class Project implements Serializable { private static final long serialVersionUID = -263516611; @@ -85,8 +94,19 @@ public class Project implements Serializable { @Column(name = "metadata") private Metadata metadata; + // TODO: rename to meaningful variable. eg. orgSlug, orgKey or else @Column(name = "organization") - private String organization; + private String org; + + @ManyToOne(fetch = FetchType.LAZY) + @MapsId("organization_id") + private Organization organization; + + @Column(name = "key") + private String key; + + @Column(name = "slug") + private String slug; @Column(name = "allocated_storage", updatable = false) private long allocatedStorage; @@ -99,118 +119,6 @@ public class Project implements Serializable { @OrderBy private Set patternTemplates = Sets.newHashSet(); - public Project(Long id, String name) { - this.id = id; - this.name = name; - } - - public Project() { - } - - public Date getCreationDate() { - return creationDate; - } - - public void setCreationDate(Date creationDate) { - this.creationDate = creationDate; - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public ProjectType getProjectType() { - return projectType; - } - - public void setProjectType(ProjectType projectType) { - this.projectType = projectType; - } - - public Set getUsers() { - return users; - } - - public void setUsers(Set users) { - this.users = users; - } - - public long getAllocatedStorage() { - return allocatedStorage; - } - - public void setAllocatedStorage(long allocatedStorage) { - this.allocatedStorage = allocatedStorage; - } - - public Set getPatternTemplates() { - return patternTemplates; - } - - public void setPatternTemplates(Set patternTemplates) { - this.patternTemplates = patternTemplates; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Set getIntegrations() { - return integrations; - } - - public void setIntegrations(Set integrations) { - this.integrations = integrations; - } - - public Set getProjectAttributes() { - return projectAttributes; - } - - public void setProjectAttributes(Set projectAttributes) { - this.projectAttributes = projectAttributes; - } - - public Set getProjectIssueTypes() { - return projectIssueTypes; - } - - public void setProjectIssueTypes(Set projectIssueTypes) { - this.projectIssueTypes = projectIssueTypes; - } - - public Set getSenderCases() { - return senderCases; - } - - public void setSenderCases(Set senderCases) { - this.senderCases = senderCases; - } - - public String getOrganization() { - return organization; - } - - public void setOrganization(String organization) { - this.organization = organization; - } - - public Metadata getMetadata() { - return metadata; - } - - public void setMetadata(Metadata metadata) { - this.metadata = metadata; - } - @Override public boolean equals(Object o) { if (this == o) { diff --git a/src/main/java/com/epam/ta/reportportal/entity/project/ProjectInfo.java b/src/main/java/com/epam/ta/reportportal/entity/project/ProjectInfo.java index 1fa9d3fb3..ede38fff8 100644 --- a/src/main/java/com/epam/ta/reportportal/entity/project/ProjectInfo.java +++ b/src/main/java/com/epam/ta/reportportal/entity/project/ProjectInfo.java @@ -18,12 +18,20 @@ import java.io.Serializable; import java.time.LocalDateTime; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; /** * Not database object. Representation of the result of project info query * * @author Pavel Bortnik */ +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor public class ProjectInfo implements Serializable { public static final String USERS_QUANTITY = "usersQuantity"; @@ -38,7 +46,11 @@ public class ProjectInfo implements Serializable { private String projectType; - private String organization; + private String organizationSlug; + + private String projectKey; + + private String projectSlug; private int usersQuantity; @@ -46,67 +58,4 @@ public class ProjectInfo implements Serializable { private LocalDateTime lastRun; - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public LocalDateTime getCreationDate() { - return creationDate; - } - - public void setCreationDate(LocalDateTime creationDate) { - this.creationDate = creationDate; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getProjectType() { - return projectType; - } - - public void setProjectType(String projectType) { - this.projectType = projectType; - } - - public String getOrganization() { - return organization; - } - - public void setOrganization(String organization) { - this.organization = organization; - } - - public int getUsersQuantity() { - return usersQuantity; - } - - public void setUsersQuantity(int usersQuantity) { - this.usersQuantity = usersQuantity; - } - - public int getLaunchesQuantity() { - return launchesQuantity; - } - - public void setLaunchesQuantity(int launchesQuantity) { - this.launchesQuantity = launchesQuantity; - } - - public LocalDateTime getLastRun() { - return lastRun; - } - - public void setLastRun(LocalDateTime lastRun) { - this.lastRun = lastRun; - } } diff --git a/src/main/java/com/epam/ta/reportportal/entity/user/User.java b/src/main/java/com/epam/ta/reportportal/entity/user/User.java index 2c3e2208a..d7520f686 100644 --- a/src/main/java/com/epam/ta/reportportal/entity/user/User.java +++ b/src/main/java/com/epam/ta/reportportal/entity/user/User.java @@ -17,6 +17,7 @@ package com.epam.ta.reportportal.entity.user; import com.epam.ta.reportportal.entity.Metadata; +import com.epam.ta.reportportal.entity.organization.OrganizationUser; import com.google.common.collect.Sets; import java.io.Serializable; import java.util.Objects; @@ -32,6 +33,9 @@ import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; @@ -41,6 +45,9 @@ @Entity @TypeDef(name = "meta", typeClass = Metadata.class) @Table(name = "users", schema = "public") +@Getter +@Setter +@NoArgsConstructor public class User implements Serializable { private static final long serialVersionUID = 923392981; @@ -86,104 +93,10 @@ public class User implements Serializable { CascadeType.MERGE, CascadeType.REFRESH}) private Set projects = Sets.newHashSet(); - public User() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getLogin() { - return this.login; - } - - public void setLogin(String login) { - this.login = login; - } - - public String getPassword() { - return this.password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getEmail() { - return this.email; - } - - public void setEmail(String email) { - this.email = email; - } - - public UserRole getRole() { - return role; - } - - public void setRole(UserRole role) { - this.role = role; - } - - public Set getProjects() { - return projects; - } - - public void setProjects(Set projects) { - this.projects = projects; - } - - public String getFullName() { - return this.fullName; - } - - public void setFullName(String fullName) { - this.fullName = fullName; - } - - public boolean isExpired() { - return isExpired; - } - - public void setExpired(boolean expired) { - isExpired = expired; - } - - public String getAttachment() { - return attachment; - } - - public void setAttachment(String attachment) { - this.attachment = attachment; - } - - public String getAttachmentThumbnail() { - return attachmentThumbnail; - } - - public void setAttachmentThumbnail(String attachmentThumbnail) { - this.attachmentThumbnail = attachmentThumbnail; - } - - public UserType getUserType() { - return userType; - } - - public void setUserType(UserType userType) { - this.userType = userType; - } - - public Metadata getMetadata() { - return metadata; - } + @OneToMany(fetch = FetchType.LAZY, mappedBy = "user", cascade = {CascadeType.PERSIST, + CascadeType.MERGE, CascadeType.REFRESH}) + private Set organizationUser = Sets.newHashSet(); - public void setMetadata(Metadata metadata) { - this.metadata = metadata; - } @Override public boolean equals(Object o) { @@ -194,14 +107,16 @@ public boolean equals(Object o) { return false; } User user = (User) o; - return isExpired == user.isExpired && Objects.equals(id, user.id) && Objects.equals(login, - user.login) && Objects.equals(password, - user.password - ) && Objects.equals(email, user.email) && role == user.role && Objects.equals(fullName, - user.fullName) && Objects.equals(metadata, - user.metadata - ) && Objects.equals(attachment, user.attachment) && Objects.equals(attachmentThumbnail, - user.attachmentThumbnail) + return isExpired == user.isExpired + && Objects.equals(id, user.id) + && Objects.equals(login, user.login) + && Objects.equals(password, user.password) + && Objects.equals(email, user.email) + && role == user.role + && Objects.equals(fullName, user.fullName) + && Objects.equals(metadata, user.metadata) + && Objects.equals(attachment, user.attachment) + && Objects.equals(attachmentThumbnail, user.attachmentThumbnail) && userType == user.userType; } @@ -210,5 +125,4 @@ public int hashCode() { return Objects.hash(id, login, password, email, role, fullName, isExpired, metadata, attachment, attachmentThumbnail, userType); } - } diff --git a/src/main/java/com/epam/ta/reportportal/jooq/Indexes.java b/src/main/java/com/epam/ta/reportportal/jooq/Indexes.java index d40580b1c..f394b5336 100644 --- a/src/main/java/com/epam/ta/reportportal/jooq/Indexes.java +++ b/src/main/java/com/epam/ta/reportportal/jooq/Indexes.java @@ -34,6 +34,8 @@ import com.epam.ta.reportportal.jooq.tables.JOauthRegistrationRestriction; import com.epam.ta.reportportal.jooq.tables.JOauthRegistrationScope; import com.epam.ta.reportportal.jooq.tables.JOnboarding; +import com.epam.ta.reportportal.jooq.tables.JOrganization; +import com.epam.ta.reportportal.jooq.tables.JOrganizationUser; import com.epam.ta.reportportal.jooq.tables.JOwnedEntity; import com.epam.ta.reportportal.jooq.tables.JParameter; import com.epam.ta.reportportal.jooq.tables.JPatternTemplate; @@ -144,7 +146,6 @@ public class Indexes { public static final Index LOG_ATTACH_ID_IDX = Indexes0.LOG_ATTACH_ID_IDX; public static final Index LOG_CLUSTER_IDX = Indexes0.LOG_CLUSTER_IDX; public static final Index LOG_LAUNCH_ID_IDX = Indexes0.LOG_LAUNCH_ID_IDX; - public static final Index LOG_MESSAGE_TRGM_IDX = Indexes0.LOG_MESSAGE_TRGM_IDX; public static final Index LOG_PK = Indexes0.LOG_PK; public static final Index LOG_PROJECT_ID_LOG_TIME_IDX = Indexes0.LOG_PROJECT_ID_LOG_TIME_IDX; public static final Index LOG_PROJECT_IDX = Indexes0.LOG_PROJECT_IDX; @@ -156,6 +157,11 @@ public class Indexes { public static final Index OAUTH_REGISTRATION_SCOPE_PK = Indexes0.OAUTH_REGISTRATION_SCOPE_PK; public static final Index OAUTH_REGISTRATION_SCOPE_UNIQUE = Indexes0.OAUTH_REGISTRATION_SCOPE_UNIQUE; public static final Index ONBOARDING_PK = Indexes0.ONBOARDING_PK; + public static final Index ORGANIZATION_NAME_KEY = Indexes0.ORGANIZATION_NAME_KEY; + public static final Index ORGANIZATION_PKEY = Indexes0.ORGANIZATION_PKEY; + public static final Index ORGANIZATION_SLUG_IDX = Indexes0.ORGANIZATION_SLUG_IDX; + public static final Index ORGANIZATION_SLUG_KEY = Indexes0.ORGANIZATION_SLUG_KEY; + public static final Index ORGANIZATION_USER_PK = Indexes0.ORGANIZATION_USER_PK; public static final Index SHAREABLE_PK = Indexes0.SHAREABLE_PK; public static final Index SHARED_ENTITY_OWNERX = Indexes0.SHARED_ENTITY_OWNERX; public static final Index SHARED_ENTITY_PROJECT_IDX = Indexes0.SHARED_ENTITY_PROJECT_IDX; @@ -164,8 +170,11 @@ public class Indexes { public static final Index UNQ_NAME_PROJECTID = Indexes0.UNQ_NAME_PROJECTID; public static final Index PATTERN_ITEM_ITEM_ID_IDX = Indexes0.PATTERN_ITEM_ITEM_ID_IDX; public static final Index PATTERN_ITEM_UNQ = Indexes0.PATTERN_ITEM_UNQ; + public static final Index PROJECT_KEY_IDX = Indexes0.PROJECT_KEY_IDX; + public static final Index PROJECT_KEY_KEY = Indexes0.PROJECT_KEY_KEY; public static final Index PROJECT_NAME_KEY = Indexes0.PROJECT_NAME_KEY; public static final Index PROJECT_PK = Indexes0.PROJECT_PK; + public static final Index PROJECT_SLUG_KEY = Indexes0.PROJECT_SLUG_KEY; public static final Index UNIQUE_ATTRIBUTE_PER_PROJECT = Indexes0.UNIQUE_ATTRIBUTE_PER_PROJECT; public static final Index USERS_PROJECT_PK = Indexes0.USERS_PROJECT_PK; public static final Index RCPNT_SEND_CASE_IDX = Indexes0.RCPNT_SEND_CASE_IDX; @@ -276,7 +285,6 @@ private static class Indexes0 { public static Index LOG_ATTACH_ID_IDX = Internal.createIndex("log_attach_id_idx", JLog.LOG, new OrderField[] { JLog.LOG.ATTACHMENT_ID }, false); public static Index LOG_CLUSTER_IDX = Internal.createIndex("log_cluster_idx", JLog.LOG, new OrderField[] { JLog.LOG.CLUSTER_ID }, false); public static Index LOG_LAUNCH_ID_IDX = Internal.createIndex("log_launch_id_idx", JLog.LOG, new OrderField[] { JLog.LOG.LAUNCH_ID }, false); - public static Index LOG_MESSAGE_TRGM_IDX = Internal.createIndex("log_message_trgm_idx", JLog.LOG, new OrderField[] { JLog.LOG.LOG_MESSAGE }, false); public static Index LOG_PK = Internal.createIndex("log_pk", JLog.LOG, new OrderField[] { JLog.LOG.ID }, true); public static Index LOG_PROJECT_ID_LOG_TIME_IDX = Internal.createIndex("log_project_id_log_time_idx", JLog.LOG, new OrderField[] { JLog.LOG.PROJECT_ID, JLog.LOG.LOG_TIME }, false); public static Index LOG_PROJECT_IDX = Internal.createIndex("log_project_idx", JLog.LOG, new OrderField[] { JLog.LOG.PROJECT_ID }, false); @@ -288,6 +296,11 @@ private static class Indexes0 { public static Index OAUTH_REGISTRATION_SCOPE_PK = Internal.createIndex("oauth_registration_scope_pk", JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE, new OrderField[] { JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE.ID }, true); public static Index OAUTH_REGISTRATION_SCOPE_UNIQUE = Internal.createIndex("oauth_registration_scope_unique", JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE, new OrderField[] { JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE.SCOPE, JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE.OAUTH_REGISTRATION_FK }, true); public static Index ONBOARDING_PK = Internal.createIndex("onboarding_pk", JOnboarding.ONBOARDING, new OrderField[] { JOnboarding.ONBOARDING.ID }, true); + public static Index ORGANIZATION_NAME_KEY = Internal.createIndex("organization_name_key", JOrganization.ORGANIZATION, new OrderField[] { JOrganization.ORGANIZATION.NAME }, true); + public static Index ORGANIZATION_PKEY = Internal.createIndex("organization_pkey", JOrganization.ORGANIZATION, new OrderField[] { JOrganization.ORGANIZATION.ID }, true); + public static Index ORGANIZATION_SLUG_IDX = Internal.createIndex("organization_slug_idx", JOrganization.ORGANIZATION, new OrderField[] { JOrganization.ORGANIZATION.SLUG }, false); + public static Index ORGANIZATION_SLUG_KEY = Internal.createIndex("organization_slug_key", JOrganization.ORGANIZATION, new OrderField[] { JOrganization.ORGANIZATION.SLUG }, true); + public static Index ORGANIZATION_USER_PK = Internal.createIndex("organization_user_pk", JOrganizationUser.ORGANIZATION_USER, new OrderField[] { JOrganizationUser.ORGANIZATION_USER.USER_ID, JOrganizationUser.ORGANIZATION_USER.ORGANIZATION_ID }, true); public static Index SHAREABLE_PK = Internal.createIndex("shareable_pk", JOwnedEntity.OWNED_ENTITY, new OrderField[] { JOwnedEntity.OWNED_ENTITY.ID }, true); public static Index SHARED_ENTITY_OWNERX = Internal.createIndex("shared_entity_ownerx", JOwnedEntity.OWNED_ENTITY, new OrderField[] { JOwnedEntity.OWNED_ENTITY.OWNER }, false); public static Index SHARED_ENTITY_PROJECT_IDX = Internal.createIndex("shared_entity_project_idx", JOwnedEntity.OWNED_ENTITY, new OrderField[] { JOwnedEntity.OWNED_ENTITY.PROJECT_ID }, false); @@ -296,8 +309,11 @@ private static class Indexes0 { public static Index UNQ_NAME_PROJECTID = Internal.createIndex("unq_name_projectid", JPatternTemplate.PATTERN_TEMPLATE, new OrderField[] { JPatternTemplate.PATTERN_TEMPLATE.NAME, JPatternTemplate.PATTERN_TEMPLATE.PROJECT_ID }, true); public static Index PATTERN_ITEM_ITEM_ID_IDX = Internal.createIndex("pattern_item_item_id_idx", JPatternTemplateTestItem.PATTERN_TEMPLATE_TEST_ITEM, new OrderField[] { JPatternTemplateTestItem.PATTERN_TEMPLATE_TEST_ITEM.ITEM_ID }, false); public static Index PATTERN_ITEM_UNQ = Internal.createIndex("pattern_item_unq", JPatternTemplateTestItem.PATTERN_TEMPLATE_TEST_ITEM, new OrderField[] { JPatternTemplateTestItem.PATTERN_TEMPLATE_TEST_ITEM.PATTERN_ID, JPatternTemplateTestItem.PATTERN_TEMPLATE_TEST_ITEM.ITEM_ID }, true); + public static Index PROJECT_KEY_IDX = Internal.createIndex("project_key_idx", JProject.PROJECT, new OrderField[] { JProject.PROJECT.KEY }, false); + public static Index PROJECT_KEY_KEY = Internal.createIndex("project_key_key", JProject.PROJECT, new OrderField[] { JProject.PROJECT.KEY }, true); public static Index PROJECT_NAME_KEY = Internal.createIndex("project_name_key", JProject.PROJECT, new OrderField[] { JProject.PROJECT.NAME }, true); public static Index PROJECT_PK = Internal.createIndex("project_pk", JProject.PROJECT, new OrderField[] { JProject.PROJECT.ID }, true); + public static Index PROJECT_SLUG_KEY = Internal.createIndex("project_slug_key", JProject.PROJECT, new OrderField[] { JProject.PROJECT.SLUG }, true); public static Index UNIQUE_ATTRIBUTE_PER_PROJECT = Internal.createIndex("unique_attribute_per_project", JProjectAttribute.PROJECT_ATTRIBUTE, new OrderField[] { JProjectAttribute.PROJECT_ATTRIBUTE.ATTRIBUTE_ID, JProjectAttribute.PROJECT_ATTRIBUTE.PROJECT_ID }, true); public static Index USERS_PROJECT_PK = Internal.createIndex("users_project_pk", JProjectUser.PROJECT_USER, new OrderField[] { JProjectUser.PROJECT_USER.USER_ID, JProjectUser.PROJECT_USER.PROJECT_ID }, true); public static Index RCPNT_SEND_CASE_IDX = Internal.createIndex("rcpnt_send_case_idx", JRecipients.RECIPIENTS, new OrderField[] { JRecipients.RECIPIENTS.SENDER_CASE_ID }, false); diff --git a/src/main/java/com/epam/ta/reportportal/jooq/JPublic.java b/src/main/java/com/epam/ta/reportportal/jooq/JPublic.java index 8ec2de1f5..ac71b3270 100644 --- a/src/main/java/com/epam/ta/reportportal/jooq/JPublic.java +++ b/src/main/java/com/epam/ta/reportportal/jooq/JPublic.java @@ -34,6 +34,8 @@ import com.epam.ta.reportportal.jooq.tables.JOauthRegistrationRestriction; import com.epam.ta.reportportal.jooq.tables.JOauthRegistrationScope; import com.epam.ta.reportportal.jooq.tables.JOnboarding; +import com.epam.ta.reportportal.jooq.tables.JOrganization; +import com.epam.ta.reportportal.jooq.tables.JOrganizationUser; import com.epam.ta.reportportal.jooq.tables.JOwnedEntity; import com.epam.ta.reportportal.jooq.tables.JParameter; import com.epam.ta.reportportal.jooq.tables.JPatternTemplate; @@ -88,7 +90,7 @@ @SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class JPublic extends SchemaImpl { - private static final long serialVersionUID = -1176761935; + private static final long serialVersionUID = 286849201; /** * The reference instance of public @@ -245,6 +247,16 @@ public class JPublic extends SchemaImpl { */ public final JOnboarding ONBOARDING = com.epam.ta.reportportal.jooq.tables.JOnboarding.ONBOARDING; + /** + * The table public.organization. + */ + public final JOrganization ORGANIZATION = com.epam.ta.reportportal.jooq.tables.JOrganization.ORGANIZATION; + + /** + * The table public.organization_user. + */ + public final JOrganizationUser ORGANIZATION_USER = com.epam.ta.reportportal.jooq.tables.JOrganizationUser.ORGANIZATION_USER; + /** * The table public.owned_entity. */ @@ -427,6 +439,8 @@ private final List> getSequences0() { Sequences.OAUTH_REGISTRATION_RESTRICTION_ID_SEQ, Sequences.OAUTH_REGISTRATION_SCOPE_ID_SEQ, Sequences.ONBOARDING_ID_SEQ, + Sequences.ORGANIZATION_ID_SEQ, + Sequences.ORGANIZATION_USER_USER_ID_SEQ, Sequences.PATTERN_TEMPLATE_ID_SEQ, Sequences.PROJECT_ATTRIBUTE_ATTRIBUTE_ID_SEQ, Sequences.PROJECT_ATTRIBUTE_PROJECT_ID_SEQ, @@ -483,6 +497,8 @@ private final List> getTables0() { JOauthRegistrationRestriction.OAUTH_REGISTRATION_RESTRICTION, JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE, JOnboarding.ONBOARDING, + JOrganization.ORGANIZATION, + JOrganizationUser.ORGANIZATION_USER, JOwnedEntity.OWNED_ENTITY, JParameter.PARAMETER, JPatternTemplate.PATTERN_TEMPLATE, diff --git a/src/main/java/com/epam/ta/reportportal/jooq/Keys.java b/src/main/java/com/epam/ta/reportportal/jooq/Keys.java index 266024928..85faf139f 100644 --- a/src/main/java/com/epam/ta/reportportal/jooq/Keys.java +++ b/src/main/java/com/epam/ta/reportportal/jooq/Keys.java @@ -34,6 +34,8 @@ import com.epam.ta.reportportal.jooq.tables.JOauthRegistrationRestriction; import com.epam.ta.reportportal.jooq.tables.JOauthRegistrationScope; import com.epam.ta.reportportal.jooq.tables.JOnboarding; +import com.epam.ta.reportportal.jooq.tables.JOrganization; +import com.epam.ta.reportportal.jooq.tables.JOrganizationUser; import com.epam.ta.reportportal.jooq.tables.JOwnedEntity; import com.epam.ta.reportportal.jooq.tables.JParameter; import com.epam.ta.reportportal.jooq.tables.JPatternTemplate; @@ -87,6 +89,8 @@ import com.epam.ta.reportportal.jooq.tables.records.JOauthRegistrationRestrictionRecord; import com.epam.ta.reportportal.jooq.tables.records.JOauthRegistrationScopeRecord; import com.epam.ta.reportportal.jooq.tables.records.JOnboardingRecord; +import com.epam.ta.reportportal.jooq.tables.records.JOrganizationRecord; +import com.epam.ta.reportportal.jooq.tables.records.JOrganizationUserRecord; import com.epam.ta.reportportal.jooq.tables.records.JOwnedEntityRecord; import com.epam.ta.reportportal.jooq.tables.records.JParameterRecord; import com.epam.ta.reportportal.jooq.tables.records.JPatternTemplateRecord; @@ -156,6 +160,8 @@ public class Keys { public static final Identity IDENTITY_OAUTH_REGISTRATION_RESTRICTION = Identities0.IDENTITY_OAUTH_REGISTRATION_RESTRICTION; public static final Identity IDENTITY_OAUTH_REGISTRATION_SCOPE = Identities0.IDENTITY_OAUTH_REGISTRATION_SCOPE; public static final Identity IDENTITY_ONBOARDING = Identities0.IDENTITY_ONBOARDING; + public static final Identity IDENTITY_ORGANIZATION = Identities0.IDENTITY_ORGANIZATION; + public static final Identity IDENTITY_ORGANIZATION_USER = Identities0.IDENTITY_ORGANIZATION_USER; public static final Identity IDENTITY_OWNED_ENTITY = Identities0.IDENTITY_OWNED_ENTITY; public static final Identity IDENTITY_PATTERN_TEMPLATE = Identities0.IDENTITY_PATTERN_TEMPLATE; public static final Identity IDENTITY_PROJECT = Identities0.IDENTITY_PROJECT; @@ -213,12 +219,18 @@ public class Keys { public static final UniqueKey OAUTH_REGISTRATION_SCOPE_PK = UniqueKeys0.OAUTH_REGISTRATION_SCOPE_PK; public static final UniqueKey OAUTH_REGISTRATION_SCOPE_UNIQUE = UniqueKeys0.OAUTH_REGISTRATION_SCOPE_UNIQUE; public static final UniqueKey ONBOARDING_PK = UniqueKeys0.ONBOARDING_PK; + public static final UniqueKey ORGANIZATION_PKEY = UniqueKeys0.ORGANIZATION_PKEY; + public static final UniqueKey ORGANIZATION_NAME_KEY = UniqueKeys0.ORGANIZATION_NAME_KEY; + public static final UniqueKey ORGANIZATION_SLUG_KEY = UniqueKeys0.ORGANIZATION_SLUG_KEY; + public static final UniqueKey ORGANIZATION_USER_PK = UniqueKeys0.ORGANIZATION_USER_PK; public static final UniqueKey SHAREABLE_PK = UniqueKeys0.SHAREABLE_PK; public static final UniqueKey PATTERN_TEMPLATE_PK = UniqueKeys0.PATTERN_TEMPLATE_PK; public static final UniqueKey UNQ_NAME_PROJECTID = UniqueKeys0.UNQ_NAME_PROJECTID; public static final UniqueKey PATTERN_ITEM_UNQ = UniqueKeys0.PATTERN_ITEM_UNQ; public static final UniqueKey PROJECT_PK = UniqueKeys0.PROJECT_PK; public static final UniqueKey PROJECT_NAME_KEY = UniqueKeys0.PROJECT_NAME_KEY; + public static final UniqueKey PROJECT_SLUG_KEY = UniqueKeys0.PROJECT_SLUG_KEY; + public static final UniqueKey PROJECT_KEY_KEY = UniqueKeys0.PROJECT_KEY_KEY; public static final UniqueKey UNIQUE_ATTRIBUTE_PER_PROJECT = UniqueKeys0.UNIQUE_ATTRIBUTE_PER_PROJECT; public static final UniqueKey USERS_PROJECT_PK = UniqueKeys0.USERS_PROJECT_PK; public static final UniqueKey RESTORE_PASSWORD_BID_PK = UniqueKeys0.RESTORE_PASSWORD_BID_PK; @@ -281,6 +293,8 @@ public class Keys { public static final ForeignKey LOG__LOG_ATTACHMENT_ID_FKEY = ForeignKeys0.LOG__LOG_ATTACHMENT_ID_FKEY; public static final ForeignKey OAUTH_REGISTRATION_RESTRICTION__OAUTH_REGISTRATION_RESTRICTION_OAUTH_REGISTRATION_FK_FKEY = ForeignKeys0.OAUTH_REGISTRATION_RESTRICTION__OAUTH_REGISTRATION_RESTRICTION_OAUTH_REGISTRATION_FK_FKEY; public static final ForeignKey OAUTH_REGISTRATION_SCOPE__OAUTH_REGISTRATION_SCOPE_OAUTH_REGISTRATION_FK_FKEY = ForeignKeys0.OAUTH_REGISTRATION_SCOPE__OAUTH_REGISTRATION_SCOPE_OAUTH_REGISTRATION_FK_FKEY; + public static final ForeignKey ORGANIZATION_USER__ORGANIZATION_USER_USER_ID_FKEY = ForeignKeys0.ORGANIZATION_USER__ORGANIZATION_USER_USER_ID_FKEY; + public static final ForeignKey ORGANIZATION_USER__ORGANIZATION_USER_ORGANIZATION_ID_FKEY = ForeignKeys0.ORGANIZATION_USER__ORGANIZATION_USER_ORGANIZATION_ID_FKEY; public static final ForeignKey OWNED_ENTITY__SHAREABLE_ENTITY_PROJECT_ID_FKEY = ForeignKeys0.OWNED_ENTITY__SHAREABLE_ENTITY_PROJECT_ID_FKEY; public static final ForeignKey PARAMETER__PARAMETER_ITEM_ID_FKEY = ForeignKeys0.PARAMETER__PARAMETER_ITEM_ID_FKEY; public static final ForeignKey PATTERN_TEMPLATE__PATTERN_TEMPLATE_PROJECT_ID_FKEY = ForeignKeys0.PATTERN_TEMPLATE__PATTERN_TEMPLATE_PROJECT_ID_FKEY; @@ -331,6 +345,8 @@ private static class Identities0 { public static Identity IDENTITY_OAUTH_REGISTRATION_RESTRICTION = Internal.createIdentity(JOauthRegistrationRestriction.OAUTH_REGISTRATION_RESTRICTION, JOauthRegistrationRestriction.OAUTH_REGISTRATION_RESTRICTION.ID); public static Identity IDENTITY_OAUTH_REGISTRATION_SCOPE = Internal.createIdentity(JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE, JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE.ID); public static Identity IDENTITY_ONBOARDING = Internal.createIdentity(JOnboarding.ONBOARDING, JOnboarding.ONBOARDING.ID); + public static Identity IDENTITY_ORGANIZATION = Internal.createIdentity(JOrganization.ORGANIZATION, JOrganization.ORGANIZATION.ID); + public static Identity IDENTITY_ORGANIZATION_USER = Internal.createIdentity(JOrganizationUser.ORGANIZATION_USER, JOrganizationUser.ORGANIZATION_USER.USER_ID); public static Identity IDENTITY_OWNED_ENTITY = Internal.createIdentity(JOwnedEntity.OWNED_ENTITY, JOwnedEntity.OWNED_ENTITY.ID); public static Identity IDENTITY_PATTERN_TEMPLATE = Internal.createIdentity(JPatternTemplate.PATTERN_TEMPLATE, JPatternTemplate.PATTERN_TEMPLATE.ID); public static Identity IDENTITY_PROJECT = Internal.createIdentity(JProject.PROJECT, JProject.PROJECT.ID); @@ -386,12 +402,18 @@ private static class UniqueKeys0 { public static final UniqueKey OAUTH_REGISTRATION_SCOPE_PK = Internal.createUniqueKey(JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE, "oauth_registration_scope_pk", JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE.ID); public static final UniqueKey OAUTH_REGISTRATION_SCOPE_UNIQUE = Internal.createUniqueKey(JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE, "oauth_registration_scope_unique", JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE.SCOPE, JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE.OAUTH_REGISTRATION_FK); public static final UniqueKey ONBOARDING_PK = Internal.createUniqueKey(JOnboarding.ONBOARDING, "onboarding_pk", JOnboarding.ONBOARDING.ID); + public static final UniqueKey ORGANIZATION_PKEY = Internal.createUniqueKey(JOrganization.ORGANIZATION, "organization_pkey", JOrganization.ORGANIZATION.ID); + public static final UniqueKey ORGANIZATION_NAME_KEY = Internal.createUniqueKey(JOrganization.ORGANIZATION, "organization_name_key", JOrganization.ORGANIZATION.NAME); + public static final UniqueKey ORGANIZATION_SLUG_KEY = Internal.createUniqueKey(JOrganization.ORGANIZATION, "organization_slug_key", JOrganization.ORGANIZATION.SLUG); + public static final UniqueKey ORGANIZATION_USER_PK = Internal.createUniqueKey(JOrganizationUser.ORGANIZATION_USER, "organization_user_pk", JOrganizationUser.ORGANIZATION_USER.USER_ID, JOrganizationUser.ORGANIZATION_USER.ORGANIZATION_ID); public static final UniqueKey SHAREABLE_PK = Internal.createUniqueKey(JOwnedEntity.OWNED_ENTITY, "shareable_pk", JOwnedEntity.OWNED_ENTITY.ID); public static final UniqueKey PATTERN_TEMPLATE_PK = Internal.createUniqueKey(JPatternTemplate.PATTERN_TEMPLATE, "pattern_template_pk", JPatternTemplate.PATTERN_TEMPLATE.ID); public static final UniqueKey UNQ_NAME_PROJECTID = Internal.createUniqueKey(JPatternTemplate.PATTERN_TEMPLATE, "unq_name_projectid", JPatternTemplate.PATTERN_TEMPLATE.NAME, JPatternTemplate.PATTERN_TEMPLATE.PROJECT_ID); public static final UniqueKey PATTERN_ITEM_UNQ = Internal.createUniqueKey(JPatternTemplateTestItem.PATTERN_TEMPLATE_TEST_ITEM, "pattern_item_unq", JPatternTemplateTestItem.PATTERN_TEMPLATE_TEST_ITEM.PATTERN_ID, JPatternTemplateTestItem.PATTERN_TEMPLATE_TEST_ITEM.ITEM_ID); public static final UniqueKey PROJECT_PK = Internal.createUniqueKey(JProject.PROJECT, "project_pk", JProject.PROJECT.ID); public static final UniqueKey PROJECT_NAME_KEY = Internal.createUniqueKey(JProject.PROJECT, "project_name_key", JProject.PROJECT.NAME); + public static final UniqueKey PROJECT_SLUG_KEY = Internal.createUniqueKey(JProject.PROJECT, "project_slug_key", JProject.PROJECT.SLUG); + public static final UniqueKey PROJECT_KEY_KEY = Internal.createUniqueKey(JProject.PROJECT, "project_key_key", JProject.PROJECT.KEY); public static final UniqueKey UNIQUE_ATTRIBUTE_PER_PROJECT = Internal.createUniqueKey(JProjectAttribute.PROJECT_ATTRIBUTE, "unique_attribute_per_project", JProjectAttribute.PROJECT_ATTRIBUTE.ATTRIBUTE_ID, JProjectAttribute.PROJECT_ATTRIBUTE.PROJECT_ID); public static final UniqueKey USERS_PROJECT_PK = Internal.createUniqueKey(JProjectUser.PROJECT_USER, "users_project_pk", JProjectUser.PROJECT_USER.USER_ID, JProjectUser.PROJECT_USER.PROJECT_ID); public static final UniqueKey RESTORE_PASSWORD_BID_PK = Internal.createUniqueKey(JRestorePasswordBid.RESTORE_PASSWORD_BID, "restore_password_bid_pk", JRestorePasswordBid.RESTORE_PASSWORD_BID.UUID); @@ -452,6 +474,8 @@ private static class ForeignKeys0 { public static final ForeignKey LOG__LOG_ATTACHMENT_ID_FKEY = Internal.createForeignKey(com.epam.ta.reportportal.jooq.Keys.ATTACHMENT_PK, JLog.LOG, "log__log_attachment_id_fkey", JLog.LOG.ATTACHMENT_ID); public static final ForeignKey OAUTH_REGISTRATION_RESTRICTION__OAUTH_REGISTRATION_RESTRICTION_OAUTH_REGISTRATION_FK_FKEY = Internal.createForeignKey(com.epam.ta.reportportal.jooq.Keys.OAUTH_REGISTRATION_PKEY, JOauthRegistrationRestriction.OAUTH_REGISTRATION_RESTRICTION, "oauth_registration_restriction__oauth_registration_restriction_oauth_registration_fk_fkey", JOauthRegistrationRestriction.OAUTH_REGISTRATION_RESTRICTION.OAUTH_REGISTRATION_FK); public static final ForeignKey OAUTH_REGISTRATION_SCOPE__OAUTH_REGISTRATION_SCOPE_OAUTH_REGISTRATION_FK_FKEY = Internal.createForeignKey(com.epam.ta.reportportal.jooq.Keys.OAUTH_REGISTRATION_PKEY, JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE, "oauth_registration_scope__oauth_registration_scope_oauth_registration_fk_fkey", JOauthRegistrationScope.OAUTH_REGISTRATION_SCOPE.OAUTH_REGISTRATION_FK); + public static final ForeignKey ORGANIZATION_USER__ORGANIZATION_USER_USER_ID_FKEY = Internal.createForeignKey(com.epam.ta.reportportal.jooq.Keys.USERS_PK, JOrganizationUser.ORGANIZATION_USER, "organization_user__organization_user_user_id_fkey", JOrganizationUser.ORGANIZATION_USER.USER_ID); + public static final ForeignKey ORGANIZATION_USER__ORGANIZATION_USER_ORGANIZATION_ID_FKEY = Internal.createForeignKey(com.epam.ta.reportportal.jooq.Keys.ORGANIZATION_PKEY, JOrganizationUser.ORGANIZATION_USER, "organization_user__organization_user_organization_id_fkey", JOrganizationUser.ORGANIZATION_USER.ORGANIZATION_ID); public static final ForeignKey OWNED_ENTITY__SHAREABLE_ENTITY_PROJECT_ID_FKEY = Internal.createForeignKey(com.epam.ta.reportportal.jooq.Keys.PROJECT_PK, JOwnedEntity.OWNED_ENTITY, "owned_entity__shareable_entity_project_id_fkey", JOwnedEntity.OWNED_ENTITY.PROJECT_ID); public static final ForeignKey PARAMETER__PARAMETER_ITEM_ID_FKEY = Internal.createForeignKey(com.epam.ta.reportportal.jooq.Keys.TEST_ITEM_PK, JParameter.PARAMETER, "parameter__parameter_item_id_fkey", JParameter.PARAMETER.ITEM_ID); public static final ForeignKey PATTERN_TEMPLATE__PATTERN_TEMPLATE_PROJECT_ID_FKEY = Internal.createForeignKey(com.epam.ta.reportportal.jooq.Keys.PROJECT_PK, JPatternTemplate.PATTERN_TEMPLATE, "pattern_template__pattern_template_project_id_fkey", JPatternTemplate.PATTERN_TEMPLATE.PROJECT_ID); diff --git a/src/main/java/com/epam/ta/reportportal/jooq/Sequences.java b/src/main/java/com/epam/ta/reportportal/jooq/Sequences.java index b1c0fc0aa..6eb9a445b 100644 --- a/src/main/java/com/epam/ta/reportportal/jooq/Sequences.java +++ b/src/main/java/com/epam/ta/reportportal/jooq/Sequences.java @@ -118,6 +118,16 @@ public class Sequences { */ public static final Sequence ONBOARDING_ID_SEQ = new SequenceImpl("onboarding_id_seq", JPublic.PUBLIC, org.jooq.impl.SQLDataType.SMALLINT.nullable(false)); + /** + * The sequence public.organization_id_seq + */ + public static final Sequence ORGANIZATION_ID_SEQ = new SequenceImpl("organization_id_seq", JPublic.PUBLIC, org.jooq.impl.SQLDataType.BIGINT.nullable(false)); + + /** + * The sequence public.organization_user_user_id_seq + */ + public static final Sequence ORGANIZATION_USER_USER_ID_SEQ = new SequenceImpl("organization_user_user_id_seq", JPublic.PUBLIC, org.jooq.impl.SQLDataType.BIGINT.nullable(false)); + /** * The sequence public.pattern_template_id_seq */ diff --git a/src/main/java/com/epam/ta/reportportal/jooq/Tables.java b/src/main/java/com/epam/ta/reportportal/jooq/Tables.java index ab133d143..1c247af11 100644 --- a/src/main/java/com/epam/ta/reportportal/jooq/Tables.java +++ b/src/main/java/com/epam/ta/reportportal/jooq/Tables.java @@ -34,6 +34,8 @@ import com.epam.ta.reportportal.jooq.tables.JOauthRegistrationRestriction; import com.epam.ta.reportportal.jooq.tables.JOauthRegistrationScope; import com.epam.ta.reportportal.jooq.tables.JOnboarding; +import com.epam.ta.reportportal.jooq.tables.JOrganization; +import com.epam.ta.reportportal.jooq.tables.JOrganizationUser; import com.epam.ta.reportportal.jooq.tables.JOwnedEntity; import com.epam.ta.reportportal.jooq.tables.JParameter; import com.epam.ta.reportportal.jooq.tables.JPatternTemplate; @@ -230,6 +232,16 @@ public class Tables { */ public static final JOnboarding ONBOARDING = JOnboarding.ONBOARDING; + /** + * The table public.organization. + */ + public static final JOrganization ORGANIZATION = JOrganization.ORGANIZATION; + + /** + * The table public.organization_user. + */ + public static final JOrganizationUser ORGANIZATION_USER = JOrganizationUser.ORGANIZATION_USER; + /** * The table public.owned_entity. */ diff --git a/src/main/java/com/epam/ta/reportportal/jooq/enums/JOrganizationRoleEnum.java b/src/main/java/com/epam/ta/reportportal/jooq/enums/JOrganizationRoleEnum.java new file mode 100644 index 000000000..b49770127 --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/jooq/enums/JOrganizationRoleEnum.java @@ -0,0 +1,58 @@ +/* + * This file is generated by jOOQ. + */ +package com.epam.ta.reportportal.jooq.enums; + + +import com.epam.ta.reportportal.jooq.JPublic; + +import javax.annotation.processing.Generated; + +import org.jooq.Catalog; +import org.jooq.EnumType; +import org.jooq.Schema; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.12.4" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public enum JOrganizationRoleEnum implements EnumType { + + MANAGER("MANAGER"), + + MEMBER("MEMBER"); + + private final String literal; + + private JOrganizationRoleEnum(String literal) { + this.literal = literal; + } + + @Override + public Catalog getCatalog() { + return getSchema() == null ? null : getSchema().getCatalog(); + } + + @Override + public Schema getSchema() { + return JPublic.PUBLIC; + } + + @Override + public String getName() { + return "organization_role_enum"; + } + + @Override + public String getLiteral() { + return literal; + } +} diff --git a/src/main/java/com/epam/ta/reportportal/jooq/tables/JLog.java b/src/main/java/com/epam/ta/reportportal/jooq/tables/JLog.java index 023f79df7..04ebbd871 100644 --- a/src/main/java/com/epam/ta/reportportal/jooq/tables/JLog.java +++ b/src/main/java/com/epam/ta/reportportal/jooq/tables/JLog.java @@ -43,7 +43,7 @@ @SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class JLog extends TableImpl { - private static final long serialVersionUID = -198837446; + private static final long serialVersionUID = 231270563; /** * The reference instance of public.log @@ -153,7 +153,7 @@ public Schema getSchema() { @Override public List getIndexes() { - return Arrays.asList(Indexes.LOG_ATTACH_ID_IDX, Indexes.LOG_CLUSTER_IDX, Indexes.LOG_LAUNCH_ID_IDX, Indexes.LOG_MESSAGE_TRGM_IDX, Indexes.LOG_PK, Indexes.LOG_PROJECT_ID_LOG_TIME_IDX, Indexes.LOG_PROJECT_IDX, Indexes.LOG_TI_IDX); + return Arrays.asList(Indexes.LOG_ATTACH_ID_IDX, Indexes.LOG_CLUSTER_IDX, Indexes.LOG_LAUNCH_ID_IDX, Indexes.LOG_PK, Indexes.LOG_PROJECT_ID_LOG_TIME_IDX, Indexes.LOG_PROJECT_IDX, Indexes.LOG_TI_IDX); } @Override diff --git a/src/main/java/com/epam/ta/reportportal/jooq/tables/JOrganization.java b/src/main/java/com/epam/ta/reportportal/jooq/tables/JOrganization.java new file mode 100644 index 000000000..7bb07428e --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/jooq/tables/JOrganization.java @@ -0,0 +1,178 @@ +/* + * This file is generated by jOOQ. + */ +package com.epam.ta.reportportal.jooq.tables; + + +import com.epam.ta.reportportal.jooq.Indexes; +import com.epam.ta.reportportal.jooq.JPublic; +import com.epam.ta.reportportal.jooq.Keys; +import com.epam.ta.reportportal.jooq.tables.records.JOrganizationRecord; + +import java.sql.Timestamp; +import java.util.Arrays; +import java.util.List; + +import javax.annotation.processing.Generated; + +import org.jooq.Field; +import org.jooq.ForeignKey; +import org.jooq.Identity; +import org.jooq.Index; +import org.jooq.Name; +import org.jooq.Record; +import org.jooq.Row5; +import org.jooq.Schema; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.UniqueKey; +import org.jooq.impl.DSL; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.12.4" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class JOrganization extends TableImpl { + + private static final long serialVersionUID = -816599241; + + /** + * The reference instance of public.organization + */ + public static final JOrganization ORGANIZATION = new JOrganization(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return JOrganizationRecord.class; + } + + /** + * The column public.organization.id. + */ + public final TableField ID = createField(DSL.name("id"), org.jooq.impl.SQLDataType.BIGINT.nullable(false).defaultValue(org.jooq.impl.DSL.field("nextval('organization_id_seq'::regclass)", org.jooq.impl.SQLDataType.BIGINT)), this, ""); + + /** + * The column public.organization.creation_date. + */ + public final TableField CREATION_DATE = createField(DSL.name("creation_date"), org.jooq.impl.SQLDataType.TIMESTAMP.nullable(false).defaultValue(org.jooq.impl.DSL.field("now()", org.jooq.impl.SQLDataType.TIMESTAMP)), this, ""); + + /** + * The column public.organization.name. + */ + public final TableField NAME = createField(DSL.name("name"), org.jooq.impl.SQLDataType.CLOB.nullable(false), this, ""); + + /** + * The column public.organization.organization_type. + */ + public final TableField ORGANIZATION_TYPE = createField(DSL.name("organization_type"), org.jooq.impl.SQLDataType.CLOB.nullable(false), this, ""); + + /** + * The column public.organization.slug. + */ + public final TableField SLUG = createField(DSL.name("slug"), org.jooq.impl.SQLDataType.CLOB.nullable(false), this, ""); + + /** + * Create a public.organization table reference + */ + public JOrganization() { + this(DSL.name("organization"), null); + } + + /** + * Create an aliased public.organization table reference + */ + public JOrganization(String alias) { + this(DSL.name(alias), ORGANIZATION); + } + + /** + * Create an aliased public.organization table reference + */ + public JOrganization(Name alias) { + this(alias, ORGANIZATION); + } + + private JOrganization(Name alias, Table aliased) { + this(alias, aliased, null); + } + + private JOrganization(Name alias, Table aliased, Field[] parameters) { + super(alias, null, aliased, parameters, DSL.comment("")); + } + + public JOrganization(Table child, ForeignKey key) { + super(child, key, ORGANIZATION); + } + + @Override + public Schema getSchema() { + return JPublic.PUBLIC; + } + + @Override + public List getIndexes() { + return Arrays.asList(Indexes.ORGANIZATION_NAME_KEY, Indexes.ORGANIZATION_PKEY, Indexes.ORGANIZATION_SLUG_IDX, Indexes.ORGANIZATION_SLUG_KEY); + } + + @Override + public Identity getIdentity() { + return Keys.IDENTITY_ORGANIZATION; + } + + @Override + public UniqueKey getPrimaryKey() { + return Keys.ORGANIZATION_PKEY; + } + + @Override + public List> getKeys() { + return Arrays.>asList(Keys.ORGANIZATION_PKEY, Keys.ORGANIZATION_NAME_KEY, Keys.ORGANIZATION_SLUG_KEY); + } + + @Override + public JOrganization as(String alias) { + return new JOrganization(DSL.name(alias), this); + } + + @Override + public JOrganization as(Name alias) { + return new JOrganization(alias, this); + } + + /** + * Rename this table + */ + @Override + public JOrganization rename(String name) { + return new JOrganization(DSL.name(name), null); + } + + /** + * Rename this table + */ + @Override + public JOrganization rename(Name name) { + return new JOrganization(name, null); + } + + // ------------------------------------------------------------------------- + // Row5 type methods + // ------------------------------------------------------------------------- + + @Override + public Row5 fieldsRow() { + return (Row5) super.fieldsRow(); + } +} diff --git a/src/main/java/com/epam/ta/reportportal/jooq/tables/JOrganizationUser.java b/src/main/java/com/epam/ta/reportportal/jooq/tables/JOrganizationUser.java new file mode 100644 index 000000000..ba8a6bf94 --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/jooq/tables/JOrganizationUser.java @@ -0,0 +1,181 @@ +/* + * This file is generated by jOOQ. + */ +package com.epam.ta.reportportal.jooq.tables; + + +import com.epam.ta.reportportal.jooq.Indexes; +import com.epam.ta.reportportal.jooq.JPublic; +import com.epam.ta.reportportal.jooq.Keys; +import com.epam.ta.reportportal.jooq.enums.JOrganizationRoleEnum; +import com.epam.ta.reportportal.jooq.tables.records.JOrganizationUserRecord; + +import java.util.Arrays; +import java.util.List; + +import javax.annotation.processing.Generated; + +import org.jooq.Field; +import org.jooq.ForeignKey; +import org.jooq.Identity; +import org.jooq.Index; +import org.jooq.Name; +import org.jooq.Record; +import org.jooq.Row3; +import org.jooq.Schema; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.UniqueKey; +import org.jooq.impl.DSL; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.12.4" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class JOrganizationUser extends TableImpl { + + private static final long serialVersionUID = -453434879; + + /** + * The reference instance of public.organization_user + */ + public static final JOrganizationUser ORGANIZATION_USER = new JOrganizationUser(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return JOrganizationUserRecord.class; + } + + /** + * The column public.organization_user.user_id. + */ + public final TableField USER_ID = createField(DSL.name("user_id"), org.jooq.impl.SQLDataType.BIGINT.nullable(false).defaultValue(org.jooq.impl.DSL.field("nextval('organization_user_user_id_seq'::regclass)", org.jooq.impl.SQLDataType.BIGINT)), this, ""); + + /** + * The column public.organization_user.organization_id. + */ + public final TableField ORGANIZATION_ID = createField(DSL.name("organization_id"), org.jooq.impl.SQLDataType.BIGINT.nullable(false), this, ""); + + /** + * The column public.organization_user.organization_role. + */ + public final TableField ORGANIZATION_ROLE = createField(DSL.name("organization_role"), org.jooq.impl.SQLDataType.VARCHAR.nullable(false).asEnumDataType(com.epam.ta.reportportal.jooq.enums.JOrganizationRoleEnum.class), this, ""); + + /** + * Create a public.organization_user table reference + */ + public JOrganizationUser() { + this(DSL.name("organization_user"), null); + } + + /** + * Create an aliased public.organization_user table reference + */ + public JOrganizationUser(String alias) { + this(DSL.name(alias), ORGANIZATION_USER); + } + + /** + * Create an aliased public.organization_user table reference + */ + public JOrganizationUser(Name alias) { + this(alias, ORGANIZATION_USER); + } + + private JOrganizationUser(Name alias, Table aliased) { + this(alias, aliased, null); + } + + private JOrganizationUser(Name alias, Table aliased, Field[] parameters) { + super(alias, null, aliased, parameters, DSL.comment("")); + } + + public JOrganizationUser(Table child, ForeignKey key) { + super(child, key, ORGANIZATION_USER); + } + + @Override + public Schema getSchema() { + return JPublic.PUBLIC; + } + + @Override + public List getIndexes() { + return Arrays.asList(Indexes.ORGANIZATION_USER_PK); + } + + @Override + public Identity getIdentity() { + return Keys.IDENTITY_ORGANIZATION_USER; + } + + @Override + public UniqueKey getPrimaryKey() { + return Keys.ORGANIZATION_USER_PK; + } + + @Override + public List> getKeys() { + return Arrays.>asList(Keys.ORGANIZATION_USER_PK); + } + + @Override + public List> getReferences() { + return Arrays.>asList(Keys.ORGANIZATION_USER__ORGANIZATION_USER_USER_ID_FKEY, Keys.ORGANIZATION_USER__ORGANIZATION_USER_ORGANIZATION_ID_FKEY); + } + + public JUsers users() { + return new JUsers(this, Keys.ORGANIZATION_USER__ORGANIZATION_USER_USER_ID_FKEY); + } + + public JOrganization organization() { + return new JOrganization(this, Keys.ORGANIZATION_USER__ORGANIZATION_USER_ORGANIZATION_ID_FKEY); + } + + @Override + public JOrganizationUser as(String alias) { + return new JOrganizationUser(DSL.name(alias), this); + } + + @Override + public JOrganizationUser as(Name alias) { + return new JOrganizationUser(alias, this); + } + + /** + * Rename this table + */ + @Override + public JOrganizationUser rename(String name) { + return new JOrganizationUser(DSL.name(name), null); + } + + /** + * Rename this table + */ + @Override + public JOrganizationUser rename(Name name) { + return new JOrganizationUser(name, null); + } + + // ------------------------------------------------------------------------- + // Row3 type methods + // ------------------------------------------------------------------------- + + @Override + public Row3 fieldsRow() { + return (Row3) super.fieldsRow(); + } +} diff --git a/src/main/java/com/epam/ta/reportportal/jooq/tables/JProject.java b/src/main/java/com/epam/ta/reportportal/jooq/tables/JProject.java index 4f07f222f..29ac5099a 100644 --- a/src/main/java/com/epam/ta/reportportal/jooq/tables/JProject.java +++ b/src/main/java/com/epam/ta/reportportal/jooq/tables/JProject.java @@ -22,7 +22,7 @@ import org.jooq.JSONB; import org.jooq.Name; import org.jooq.Record; -import org.jooq.Row7; +import org.jooq.Row10; import org.jooq.Schema; import org.jooq.Table; import org.jooq.TableField; @@ -44,7 +44,7 @@ @SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class JProject extends TableImpl { - private static final long serialVersionUID = 1584335243; + private static final long serialVersionUID = 1992655868; /** * The reference instance of public.project @@ -94,6 +94,21 @@ public Class getRecordType() { */ public final TableField ALLOCATED_STORAGE = createField(DSL.name("allocated_storage"), org.jooq.impl.SQLDataType.BIGINT.nullable(false).defaultValue(org.jooq.impl.DSL.field("0", org.jooq.impl.SQLDataType.BIGINT)), this, ""); + /** + * The column public.project.organization_id. + */ + public final TableField ORGANIZATION_ID = createField(DSL.name("organization_id"), org.jooq.impl.SQLDataType.BIGINT, this, ""); + + /** + * The column public.project.slug. + */ + public final TableField SLUG = createField(DSL.name("slug"), org.jooq.impl.SQLDataType.CLOB, this, ""); + + /** + * The column public.project.key. + */ + public final TableField KEY = createField(DSL.name("key"), org.jooq.impl.SQLDataType.CLOB, this, ""); + /** * Create a public.project table reference */ @@ -134,7 +149,7 @@ public Schema getSchema() { @Override public List getIndexes() { - return Arrays.asList(Indexes.PROJECT_NAME_KEY, Indexes.PROJECT_PK); + return Arrays.asList(Indexes.PROJECT_KEY_IDX, Indexes.PROJECT_KEY_KEY, Indexes.PROJECT_NAME_KEY, Indexes.PROJECT_PK, Indexes.PROJECT_SLUG_KEY); } @Override @@ -149,7 +164,7 @@ public UniqueKey getPrimaryKey() { @Override public List> getKeys() { - return Arrays.>asList(Keys.PROJECT_PK, Keys.PROJECT_NAME_KEY); + return Arrays.>asList(Keys.PROJECT_PK, Keys.PROJECT_NAME_KEY, Keys.PROJECT_SLUG_KEY, Keys.PROJECT_KEY_KEY); } @Override @@ -179,11 +194,11 @@ public JProject rename(Name name) { } // ------------------------------------------------------------------------- - // Row7 type methods + // Row10 type methods // ------------------------------------------------------------------------- @Override - public Row7 fieldsRow() { - return (Row7) super.fieldsRow(); + public Row10 fieldsRow() { + return (Row10) super.fieldsRow(); } } diff --git a/src/main/java/com/epam/ta/reportportal/jooq/tables/records/JOrganizationRecord.java b/src/main/java/com/epam/ta/reportportal/jooq/tables/records/JOrganizationRecord.java new file mode 100644 index 000000000..b86cc8dbd --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/jooq/tables/records/JOrganizationRecord.java @@ -0,0 +1,266 @@ +/* + * This file is generated by jOOQ. + */ +package com.epam.ta.reportportal.jooq.tables.records; + + +import com.epam.ta.reportportal.jooq.tables.JOrganization; + +import java.sql.Timestamp; + +import javax.annotation.processing.Generated; + +import org.jooq.Field; +import org.jooq.Record1; +import org.jooq.Record5; +import org.jooq.Row5; +import org.jooq.impl.UpdatableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.12.4" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class JOrganizationRecord extends UpdatableRecordImpl implements Record5 { + + private static final long serialVersionUID = 909327136; + + /** + * Setter for public.organization.id. + */ + public void setId(Long value) { + set(0, value); + } + + /** + * Getter for public.organization.id. + */ + public Long getId() { + return (Long) get(0); + } + + /** + * Setter for public.organization.creation_date. + */ + public void setCreationDate(Timestamp value) { + set(1, value); + } + + /** + * Getter for public.organization.creation_date. + */ + public Timestamp getCreationDate() { + return (Timestamp) get(1); + } + + /** + * Setter for public.organization.name. + */ + public void setName(String value) { + set(2, value); + } + + /** + * Getter for public.organization.name. + */ + public String getName() { + return (String) get(2); + } + + /** + * Setter for public.organization.organization_type. + */ + public void setOrganizationType(String value) { + set(3, value); + } + + /** + * Getter for public.organization.organization_type. + */ + public String getOrganizationType() { + return (String) get(3); + } + + /** + * Setter for public.organization.slug. + */ + public void setSlug(String value) { + set(4, value); + } + + /** + * Getter for public.organization.slug. + */ + public String getSlug() { + return (String) get(4); + } + + // ------------------------------------------------------------------------- + // Primary key information + // ------------------------------------------------------------------------- + + @Override + public Record1 key() { + return (Record1) super.key(); + } + + // ------------------------------------------------------------------------- + // Record5 type implementation + // ------------------------------------------------------------------------- + + @Override + public Row5 fieldsRow() { + return (Row5) super.fieldsRow(); + } + + @Override + public Row5 valuesRow() { + return (Row5) super.valuesRow(); + } + + @Override + public Field field1() { + return JOrganization.ORGANIZATION.ID; + } + + @Override + public Field field2() { + return JOrganization.ORGANIZATION.CREATION_DATE; + } + + @Override + public Field field3() { + return JOrganization.ORGANIZATION.NAME; + } + + @Override + public Field field4() { + return JOrganization.ORGANIZATION.ORGANIZATION_TYPE; + } + + @Override + public Field field5() { + return JOrganization.ORGANIZATION.SLUG; + } + + @Override + public Long component1() { + return getId(); + } + + @Override + public Timestamp component2() { + return getCreationDate(); + } + + @Override + public String component3() { + return getName(); + } + + @Override + public String component4() { + return getOrganizationType(); + } + + @Override + public String component5() { + return getSlug(); + } + + @Override + public Long value1() { + return getId(); + } + + @Override + public Timestamp value2() { + return getCreationDate(); + } + + @Override + public String value3() { + return getName(); + } + + @Override + public String value4() { + return getOrganizationType(); + } + + @Override + public String value5() { + return getSlug(); + } + + @Override + public JOrganizationRecord value1(Long value) { + setId(value); + return this; + } + + @Override + public JOrganizationRecord value2(Timestamp value) { + setCreationDate(value); + return this; + } + + @Override + public JOrganizationRecord value3(String value) { + setName(value); + return this; + } + + @Override + public JOrganizationRecord value4(String value) { + setOrganizationType(value); + return this; + } + + @Override + public JOrganizationRecord value5(String value) { + setSlug(value); + return this; + } + + @Override + public JOrganizationRecord values(Long value1, Timestamp value2, String value3, String value4, String value5) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached JOrganizationRecord + */ + public JOrganizationRecord() { + super(JOrganization.ORGANIZATION); + } + + /** + * Create a detached, initialised JOrganizationRecord + */ + public JOrganizationRecord(Long id, Timestamp creationDate, String name, String organizationType, String slug) { + super(JOrganization.ORGANIZATION); + + set(0, id); + set(1, creationDate); + set(2, name); + set(3, organizationType); + set(4, slug); + } +} diff --git a/src/main/java/com/epam/ta/reportportal/jooq/tables/records/JOrganizationUserRecord.java b/src/main/java/com/epam/ta/reportportal/jooq/tables/records/JOrganizationUserRecord.java new file mode 100644 index 000000000..73d5f60df --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/jooq/tables/records/JOrganizationUserRecord.java @@ -0,0 +1,191 @@ +/* + * This file is generated by jOOQ. + */ +package com.epam.ta.reportportal.jooq.tables.records; + + +import com.epam.ta.reportportal.jooq.enums.JOrganizationRoleEnum; +import com.epam.ta.reportportal.jooq.tables.JOrganizationUser; + +import javax.annotation.processing.Generated; + +import org.jooq.Field; +import org.jooq.Record2; +import org.jooq.Record3; +import org.jooq.Row3; +import org.jooq.impl.UpdatableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.12.4" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class JOrganizationUserRecord extends UpdatableRecordImpl implements Record3 { + + private static final long serialVersionUID = -1276662636; + + /** + * Setter for public.organization_user.user_id. + */ + public void setUserId(Long value) { + set(0, value); + } + + /** + * Getter for public.organization_user.user_id. + */ + public Long getUserId() { + return (Long) get(0); + } + + /** + * Setter for public.organization_user.organization_id. + */ + public void setOrganizationId(Long value) { + set(1, value); + } + + /** + * Getter for public.organization_user.organization_id. + */ + public Long getOrganizationId() { + return (Long) get(1); + } + + /** + * Setter for public.organization_user.organization_role. + */ + public void setOrganizationRole(JOrganizationRoleEnum value) { + set(2, value); + } + + /** + * Getter for public.organization_user.organization_role. + */ + public JOrganizationRoleEnum getOrganizationRole() { + return (JOrganizationRoleEnum) get(2); + } + + // ------------------------------------------------------------------------- + // Primary key information + // ------------------------------------------------------------------------- + + @Override + public Record2 key() { + return (Record2) super.key(); + } + + // ------------------------------------------------------------------------- + // Record3 type implementation + // ------------------------------------------------------------------------- + + @Override + public Row3 fieldsRow() { + return (Row3) super.fieldsRow(); + } + + @Override + public Row3 valuesRow() { + return (Row3) super.valuesRow(); + } + + @Override + public Field field1() { + return JOrganizationUser.ORGANIZATION_USER.USER_ID; + } + + @Override + public Field field2() { + return JOrganizationUser.ORGANIZATION_USER.ORGANIZATION_ID; + } + + @Override + public Field field3() { + return JOrganizationUser.ORGANIZATION_USER.ORGANIZATION_ROLE; + } + + @Override + public Long component1() { + return getUserId(); + } + + @Override + public Long component2() { + return getOrganizationId(); + } + + @Override + public JOrganizationRoleEnum component3() { + return getOrganizationRole(); + } + + @Override + public Long value1() { + return getUserId(); + } + + @Override + public Long value2() { + return getOrganizationId(); + } + + @Override + public JOrganizationRoleEnum value3() { + return getOrganizationRole(); + } + + @Override + public JOrganizationUserRecord value1(Long value) { + setUserId(value); + return this; + } + + @Override + public JOrganizationUserRecord value2(Long value) { + setOrganizationId(value); + return this; + } + + @Override + public JOrganizationUserRecord value3(JOrganizationRoleEnum value) { + setOrganizationRole(value); + return this; + } + + @Override + public JOrganizationUserRecord values(Long value1, Long value2, JOrganizationRoleEnum value3) { + value1(value1); + value2(value2); + value3(value3); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached JOrganizationUserRecord + */ + public JOrganizationUserRecord() { + super(JOrganizationUser.ORGANIZATION_USER); + } + + /** + * Create a detached, initialised JOrganizationUserRecord + */ + public JOrganizationUserRecord(Long userId, Long organizationId, JOrganizationRoleEnum organizationRole) { + super(JOrganizationUser.ORGANIZATION_USER); + + set(0, userId); + set(1, organizationId); + set(2, organizationRole); + } +} diff --git a/src/main/java/com/epam/ta/reportportal/jooq/tables/records/JProjectRecord.java b/src/main/java/com/epam/ta/reportportal/jooq/tables/records/JProjectRecord.java index 164b64e73..6a21631ee 100644 --- a/src/main/java/com/epam/ta/reportportal/jooq/tables/records/JProjectRecord.java +++ b/src/main/java/com/epam/ta/reportportal/jooq/tables/records/JProjectRecord.java @@ -13,8 +13,8 @@ import org.jooq.Field; import org.jooq.JSONB; import org.jooq.Record1; -import org.jooq.Record7; -import org.jooq.Row7; +import org.jooq.Record10; +import org.jooq.Row10; import org.jooq.impl.UpdatableRecordImpl; @@ -29,9 +29,9 @@ comments = "This class is generated by jOOQ" ) @SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class JProjectRecord extends UpdatableRecordImpl implements Record7 { +public class JProjectRecord extends UpdatableRecordImpl implements Record10 { - private static final long serialVersionUID = 832057346; + private static final long serialVersionUID = 2145940380; /** * Setter for public.project.id. @@ -131,6 +131,48 @@ public Long getAllocatedStorage() { return (Long) get(6); } + /** + * Setter for public.project.organization_id. + */ + public void setOrganizationId(Long value) { + set(7, value); + } + + /** + * Getter for public.project.organization_id. + */ + public Long getOrganizationId() { + return (Long) get(7); + } + + /** + * Setter for public.project.slug. + */ + public void setSlug(String value) { + set(8, value); + } + + /** + * Getter for public.project.slug. + */ + public String getSlug() { + return (String) get(8); + } + + /** + * Setter for public.project.key. + */ + public void setKey(String value) { + set(9, value); + } + + /** + * Getter for public.project.key. + */ + public String getKey() { + return (String) get(9); + } + // ------------------------------------------------------------------------- // Primary key information // ------------------------------------------------------------------------- @@ -141,17 +183,17 @@ public Record1 key() { } // ------------------------------------------------------------------------- - // Record7 type implementation + // Record10 type implementation // ------------------------------------------------------------------------- @Override - public Row7 fieldsRow() { - return (Row7) super.fieldsRow(); + public Row10 fieldsRow() { + return (Row10) super.fieldsRow(); } @Override - public Row7 valuesRow() { - return (Row7) super.valuesRow(); + public Row10 valuesRow() { + return (Row10) super.valuesRow(); } @Override @@ -189,6 +231,21 @@ public Field field7() { return JProject.PROJECT.ALLOCATED_STORAGE; } + @Override + public Field field8() { + return JProject.PROJECT.ORGANIZATION_ID; + } + + @Override + public Field field9() { + return JProject.PROJECT.SLUG; + } + + @Override + public Field field10() { + return JProject.PROJECT.KEY; + } + @Override public Long component1() { return getId(); @@ -224,6 +281,21 @@ public Long component7() { return getAllocatedStorage(); } + @Override + public Long component8() { + return getOrganizationId(); + } + + @Override + public String component9() { + return getSlug(); + } + + @Override + public String component10() { + return getKey(); + } + @Override public Long value1() { return getId(); @@ -259,6 +331,21 @@ public Long value7() { return getAllocatedStorage(); } + @Override + public Long value8() { + return getOrganizationId(); + } + + @Override + public String value9() { + return getSlug(); + } + + @Override + public String value10() { + return getKey(); + } + @Override public JProjectRecord value1(Long value) { setId(value); @@ -302,7 +389,25 @@ public JProjectRecord value7(Long value) { } @Override - public JProjectRecord values(Long value1, String value2, String value3, String value4, Timestamp value5, JSONB value6, Long value7) { + public JProjectRecord value8(Long value) { + setOrganizationId(value); + return this; + } + + @Override + public JProjectRecord value9(String value) { + setSlug(value); + return this; + } + + @Override + public JProjectRecord value10(String value) { + setKey(value); + return this; + } + + @Override + public JProjectRecord values(Long value1, String value2, String value3, String value4, Timestamp value5, JSONB value6, Long value7, Long value8, String value9, String value10) { value1(value1); value2(value2); value3(value3); @@ -310,6 +415,9 @@ public JProjectRecord values(Long value1, String value2, String value3, String v value5(value5); value6(value6); value7(value7); + value8(value8); + value9(value9); + value10(value10); return this; } @@ -327,7 +435,7 @@ public JProjectRecord() { /** * Create a detached, initialised JProjectRecord */ - public JProjectRecord(Long id, String name, String projectType, String organization, Timestamp creationDate, JSONB metadata, Long allocatedStorage) { + public JProjectRecord(Long id, String name, String projectType, String organization, Timestamp creationDate, JSONB metadata, Long allocatedStorage, Long organizationId, String slug, String key) { super(JProject.PROJECT); set(0, id); @@ -337,5 +445,8 @@ public JProjectRecord(Long id, String name, String projectType, String organizat set(4, creationDate); set(5, metadata); set(6, allocatedStorage); + set(7, organizationId); + set(8, slug); + set(9, key); } } diff --git a/src/test/java/com/epam/ta/reportportal/dao/ProjectRepositoryTest.java b/src/test/java/com/epam/ta/reportportal/dao/ProjectRepositoryTest.java index 574815abd..13ac5b0f8 100644 --- a/src/test/java/com/epam/ta/reportportal/dao/ProjectRepositoryTest.java +++ b/src/test/java/com/epam/ta/reportportal/dao/ProjectRepositoryTest.java @@ -80,6 +80,16 @@ void findByName() { assertEquals(projectName, projectOptional.get().getName()); } + @Test + void findByKey() { + final String projectKey = "default_personal"; + + final Optional projectOptional = projectRepository.findByKey(projectKey); + + assertTrue(projectOptional.isPresent()); + assertEquals(projectKey, projectOptional.get().getKey()); + } + @Test void existsByName() { assertTrue(projectRepository.existsByName("default_personal")); @@ -166,7 +176,7 @@ void findProjectInfoByFilterWithPagination() { void deleteOneByTypeAndLastRunBefore() { int count = projectRepository.deleteByTypeAndLastLaunchRunBefore(ProjectType.UPSA, LocalDateTime.now().minusDays(11), 1); - assertEquals(count, 1); + assertEquals(1, count); assertFalse(projectRepository.findById(100L).isPresent()); } } diff --git a/src/test/java/com/epam/ta/reportportal/dao/ProjectUserRepositoryTest.java b/src/test/java/com/epam/ta/reportportal/dao/ProjectUserRepositoryTest.java index 0a64cfd29..a5d8f748e 100644 --- a/src/test/java/com/epam/ta/reportportal/dao/ProjectUserRepositoryTest.java +++ b/src/test/java/com/epam/ta/reportportal/dao/ProjectUserRepositoryTest.java @@ -8,37 +8,37 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -public class ProjectUserRepositoryTest extends BaseTest { +class ProjectUserRepositoryTest extends BaseTest { @Autowired private ProjectUserRepository projectUserRepository; @Test - void shouldFindDetailsByUserIdAndProjectName() { + void shouldFindDetailsByUserIdAndProjectKey() { - final String projectName = "superadmin_personal"; - final Optional projectDetails = projectUserRepository.findDetailsByUserIdAndProjectName( + final String projectKey = "superadmin_personal"; + final Optional projectDetails = projectUserRepository.findDetailsByUserIdAndProjectKey( 1L, - projectName + projectKey ); Assertions.assertTrue(projectDetails.isPresent()); - Assertions.assertEquals(projectName, projectDetails.get().getProjectName()); + Assertions.assertEquals(projectKey, projectDetails.get().getProjectName()); Assertions.assertEquals(1L, projectDetails.get().getProjectId()); Assertions.assertEquals(ProjectRole.PROJECT_MANAGER, projectDetails.get().getProjectRole()); } @Test - void shouldNotFindDetailsByUserIdAndProjectNameWhenNotExists() { + void shouldNotFindDetailsByUserIdAndProjectKeyWhenNotExists() { - final String projectName = "superadmin_personal"; - final Optional projectDetails = projectUserRepository.findDetailsByUserIdAndProjectName( + final String projectKey = "falcon-key"; + final Optional projectDetails = projectUserRepository.findDetailsByUserIdAndProjectKey( 2L, - projectName + projectKey ); Assertions.assertFalse(projectDetails.isPresent()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/dao/UserRepositoryTest.java b/src/test/java/com/epam/ta/reportportal/dao/UserRepositoryTest.java index c3b3ffb8b..ecd988375 100644 --- a/src/test/java/com/epam/ta/reportportal/dao/UserRepositoryTest.java +++ b/src/test/java/com/epam/ta/reportportal/dao/UserRepositoryTest.java @@ -380,8 +380,7 @@ void findUsernamesWithProjectRolesByProjectIdTest() { @Test void findAllMembersByProjectManagerRole() { - List emails = userRepository.findEmailsByProjectAndRole(1L, - ProjectRole.PROJECT_MANAGER); + List emails = userRepository.findEmailsByProjectAndRole(1L, ProjectRole.PROJECT_MANAGER); assertFalse(emails.isEmpty()); @@ -420,4 +419,4 @@ private Filter buildDefaultUserFilter() { new FilterCondition(Condition.LOWER_THAN_OR_EQUALS, false, "1000", CRITERIA_ID)) .build(); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/dao/organization/OrganizationRepositoryTest.java b/src/test/java/com/epam/ta/reportportal/dao/organization/OrganizationRepositoryTest.java new file mode 100644 index 000000000..46c325c34 --- /dev/null +++ b/src/test/java/com/epam/ta/reportportal/dao/organization/OrganizationRepositoryTest.java @@ -0,0 +1,58 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.dao.organization; + +import static org.springframework.test.util.AssertionErrors.assertTrue; + +import com.epam.ta.reportportal.BaseTest; +import com.epam.ta.reportportal.entity.organization.Organization; +import java.util.Optional; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @author Siarhei Hrabko + */ +class OrganizationRepositoryTest extends BaseTest { + + @Autowired + private OrganizationRepository organizationRepository; + + @Test + void findByNameTest() { + //given + String name = "My organization"; + + //when + Optional organization = organizationRepository.findByName(name); + + //then + assertTrue("Organization found", organization.isPresent()); + } + + @Test + void findBySlugTest() { + //given + String slug = "my-organization"; + + //when + Optional organization = organizationRepository.findBySlug(slug); + + //then + assertTrue("Organization found", organization.isPresent()); + } +} diff --git a/src/test/java/com/epam/ta/reportportal/entity/enums/converter/OrganizationTypeConverterTest.java b/src/test/java/com/epam/ta/reportportal/entity/enums/converter/OrganizationTypeConverterTest.java new file mode 100644 index 000000000..5ae1b096c --- /dev/null +++ b/src/test/java/com/epam/ta/reportportal/entity/enums/converter/OrganizationTypeConverterTest.java @@ -0,0 +1,46 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.entity.enums.converter; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.epam.ta.reportportal.entity.enums.OrganizationType; +import java.util.Arrays; +import java.util.stream.Collectors; +import org.junit.jupiter.api.BeforeEach; + +/** + * Organization type converter. Converts from ordinal value to String representations + * + * @author Siarhei Hrabko + */ +public class OrganizationTypeConverterTest extends AttributeConverterTest { + + @BeforeEach + void setUp() { + this.converter = new OrganizationTypeConverter(); + allowedValues = Arrays.stream(OrganizationType.values()) + .collect(Collectors.toMap(it -> it, + it -> Arrays.asList(it.name(), it.name().toUpperCase(), it.name().toLowerCase()))); + } + + @Override + protected void convertToColumnTest() { + Arrays.stream(OrganizationType.values()) + .forEach(it -> assertEquals(it.name(), converter.convertToDatabaseColumn(it))); + } +} diff --git a/src/test/resources/db/migration/V001008__add_organizations.sql b/src/test/resources/db/migration/V001008__add_organizations.sql new file mode 100644 index 000000000..d6f40cbf1 --- /dev/null +++ b/src/test/resources/db/migration/V001008__add_organizations.sql @@ -0,0 +1,24 @@ +-- Update 'project' table +WITH org_id AS (INSERT INTO public.organization (name, slug, organization_type) +VALUES ('My organization', 'my-organization', 'INTERNAL') RETURNING id) +UPDATE public.project AS prj SET + "organization_id" = 1, + "key" = slugify(name); + +UPDATE project SET "slug" = "key"; + +INSERT INTO organization_user (user_id, organization_id, organization_role) +(SELECT pu.user_id, (SELECT o.id FROM organization o LIMIT 1), (SELECT 'MEMBER'::public."organization_role_enum") +FROM project_user pu +WHERE pu."project_role" IN + ('OPERATOR'::public."project_role_enum", + 'CUSTOMER'::public."project_role_enum", + 'MEMBER'::public."project_role_enum" + ) +); + + +INSERT INTO organization_user (user_id, organization_id, organization_role ) +(SELECT pu.user_id, (SELECT o.id FROM organization o LIMIT 1), (SELECT 'MANAGER'::public."organization_role_enum") +FROM project_user pu +WHERE pu.project_role = 'PROJECT_MANAGER'::public."project_role_enum");