Skip to content

Commit ca45bb3

Browse files
committed
TMS - Service Api migration
1 parent df6e43c commit ca45bb3

File tree

259 files changed

+42418
-4
lines changed

Some content is hidden

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

259 files changed

+42418
-4
lines changed

build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ dependencies {
105105

106106
// JasperReport's export to XLS uses Apache POI and openpdf for PDF export
107107
implementation(libs.apache.poi)
108+
implementation(libs.apache.poi.ooxml)
109+
implementation(libs.apache.commons.commonscsv)
108110
implementation(libs.openpdf)
109111
implementation(libs.jakarta.inject.api)
110112
implementation(libs.jakarta.mail)
@@ -125,6 +127,10 @@ dependencies {
125127
compileOnly(libs.lombok)
126128
annotationProcessor(libs.lombok)
127129

130+
//mapstruct
131+
implementation(libs.mapstruct)
132+
annotationProcessor(libs.mapstruct.processor)
133+
128134
// Tests
129135
testImplementation(libs.bundles.test.libs)
130136
testCompileOnly(libs.lombok)

gradle/libs.versions.toml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ springdoc-openapi = "2.8.14"
4747
tika = "3.2.3"
4848
thumbnailator = "0.4.21"
4949
xerces = "2.12.2"
50-
50+
mapstruct = "1.5.5.Final"
51+
apache-commons-csv = "1.10.0"
5152

5253
[libraries]
5354
# Development libs
@@ -85,6 +86,7 @@ rabbitmq-http-client = { group = "com.rabbitmq", name = "http-client", version.r
8586
httpclient5 = { group = "org.apache.httpcomponents.client5", name = "httpclient5", version.ref = "httpclient5" }
8687
jasperreports = { group = "net.sf.jasperreports", name = "jasperreports", version.ref = "jasperreports" }
8788
apache-poi = { group = "org.apache.poi", name = "poi", version.ref = "apache-poi" }
89+
apache-poi-ooxml = { group = "org.apache.poi", name = "poi-ooxml", version.ref = "apache-poi" }
8890
openpdf = { group = "com.github.librepdf", name = "openpdf", version.ref = "openpdf" }
8991
jakarta-inject-api = { group = "jakarta.inject", name = "jakarta.inject-api", version.ref = "jakarta-inject" }
9092
jakarta-mail = { group = "com.sun.mail", name = "jakarta.mail", version.ref = "jakarta-mail" }
@@ -123,11 +125,15 @@ spring-security-core = { group = "org.springframework.security", name = "spring-
123125
spring-data-commons = { group = "org.springframework.data", name = "spring-data-commons" }
124126
hibernate-core = { group = "org.hibernate.orm", name = "hibernate-core" }
125127
jakarta-validation = { group = "jakarta.validation", name = "jakarta.validation-api" }
126-
128+
apache-commons-commonscsv = { group = "org.apache.commons", name = "commons-csv", version.ref = "apache-commons-csv" }
127129

128130
# Lombok
129131
lombok = { group = "org.projectlombok", name = "lombok", version.ref = "lombok" }
130132

133+
# Mapstruct
134+
mapstruct = { group = "org.mapstruct", name = "mapstruct", version.ref = "mapstruct" }
135+
mapstruct-processor = { group = "org.mapstruct", name = "mapstruct-processor", version.ref = "mapstruct" }
136+
131137
# Test libraries
132138
spring-test = { group = "org.springframework", name = "spring-test" }
133139
flyway-spring-test = { group = "org.flywaydb.flyway-test-extensions", name = "flyway-spring-test", version.ref = "flyway-spring-test" }

src/main/java/com/epam/reportportal/core/configs/MvcConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.epam.reportportal.ws.resolver.ActiveUserWebArgumentResolver;
2020
import com.epam.reportportal.ws.resolver.FilterCriteriaResolver;
2121
import com.epam.reportportal.ws.resolver.JsonViewSupportFactoryBean;
22+
import com.epam.reportportal.ws.resolver.OffsetArgumentResolver;
2223
import com.epam.reportportal.ws.resolver.PagingHandlerMethodArgumentResolver;
2324
import com.epam.reportportal.ws.resolver.PredefinedFilterCriteriaResolver;
2425
import com.epam.reportportal.ws.resolver.SortArgumentResolver;
@@ -97,6 +98,7 @@ public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentRes
9798
argumentResolvers.add(new ActiveUserWebArgumentResolver());
9899
argumentResolvers.add(new FilterCriteriaResolver());
99100
argumentResolvers.add(new PredefinedFilterCriteriaResolver());
101+
argumentResolvers.add(new OffsetArgumentResolver());
100102
}
101103

102104
@Override

src/main/java/com/epam/reportportal/core/configs/SchedulerConfiguration.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.epam.reportportal.core.configs;
1818

19+
import com.epam.reportportal.core.tms.scheduled.TmsAttachmentCleanupJob;
1920
import com.epam.reportportal.extension.classloader.ReportPortalResourceLoader;
2021
import com.epam.reportportal.job.CleanExpiredCreationBidsJob;
2122
import com.epam.reportportal.job.FlushingDataJob;
@@ -71,6 +72,9 @@ public class SchedulerConfiguration {
7172
@Autowired
7273
private ReportPortalResourceLoader resourceLoader;
7374

75+
@Autowired
76+
private TmsAttachmentCleanupJob tmsAttachmentCleanupJob;
77+
7478
@Bean
7579
@Primary
7680
public SchedulerFactoryBean schedulerFactoryBean() {
@@ -163,6 +167,18 @@ public SimpleTriggerFactoryBean createTrigger(JobDetail jobDetail, long pollFreq
163167
return factoryBean;
164168
}
165169

170+
@Bean
171+
public SimpleTriggerFactoryBean tmsAttachmentCleanupTrigger(
172+
@Named("tmsAttachmentCleanupJobBean") JobDetail jobDetail,
173+
@Value("${rp.tms.attachment.cleanup.cleanup.cron}") String cleanupCron) {
174+
return createTrigger(jobDetail, Duration.parse(cleanupCron).toMillis());
175+
}
176+
177+
@Bean("tmsAttachmentCleanupJobBean")
178+
public JobDetailFactoryBean tmsAttachmentCleanupJob() {
179+
return createJobDetail(TmsAttachmentCleanupJob.class);
180+
}
181+
166182
public SimpleTriggerFactoryBean createTriggerDelayed(JobDetail jobDetail, long pollFrequencyMs) {
167183
SimpleTriggerFactoryBean factoryBean = new SimpleTriggerFactoryBean();
168184
factoryBean.setJobDetail(jobDetail);
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
package com.epam.reportportal.core.tms.controller;
2+
3+
import com.epam.reportportal.infrastructure.persistence.commons.EntityUtils;
4+
import com.epam.reportportal.infrastructure.persistence.commons.ReportPortalUser;
5+
import com.epam.reportportal.core.tms.dto.ProductVersionRQ;
6+
import com.epam.reportportal.core.tms.dto.TmsProductVersionRS;
7+
import com.epam.reportportal.core.tms.service.ProductVersionService;
8+
import com.epam.reportportal.util.ProjectExtractor;
9+
import io.swagger.v3.oas.annotations.tags.Tag;
10+
import lombok.RequiredArgsConstructor;
11+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
12+
import org.springframework.web.bind.annotation.DeleteMapping;
13+
import org.springframework.web.bind.annotation.GetMapping;
14+
import org.springframework.web.bind.annotation.PathVariable;
15+
import org.springframework.web.bind.annotation.PostMapping;
16+
import org.springframework.web.bind.annotation.PutMapping;
17+
import org.springframework.web.bind.annotation.RequestBody;
18+
import org.springframework.web.bind.annotation.RequestMapping;
19+
import org.springframework.web.bind.annotation.RestController;
20+
21+
/**
22+
* Controller for managing product versions within a project. Each endpoint
23+
* in this controller is secured and requires the user to have administrator
24+
* privileges. Operations supported include creating, retrieving, updating,
25+
* and deleting product versions associated with a specific project.
26+
*/
27+
@RestController
28+
@RequestMapping("/v1/project/{projectKey}/tms/productversion")
29+
@Tag(name = "Product Version", description = "Product Version API collection")
30+
@RequiredArgsConstructor
31+
public class ProductVersionController {
32+
33+
private final ProductVersionService productVersionService;
34+
private final ProjectExtractor projectExtractor;
35+
36+
/**
37+
* Retrieves a specific product version by its ID within a project.
38+
*
39+
* @param projectKey The key of the project to which the product version belongs.
40+
* @param productVersionId The ID of the product version to retrieve.
41+
* @return A data transfer object ({@link TmsProductVersionRS}) containing details of the product version.
42+
*/
43+
@GetMapping("/{productVersionId}")
44+
TmsProductVersionRS getById(@PathVariable("projectKey") String projectKey,
45+
@PathVariable("productVersionId") final long productVersionId,
46+
@AuthenticationPrincipal ReportPortalUser user) {
47+
return productVersionService.getById(
48+
projectExtractor
49+
.extractMembershipDetails(user, EntityUtils.normalizeId(projectKey))
50+
.getProjectId(),
51+
productVersionId);
52+
}
53+
54+
/**
55+
* Creates a new product version in the specified project.
56+
*
57+
* @param projectKey The key of the project to which the new product version will be added.
58+
* @param inputDto A request payload ({@link ProductVersionRQ}) containing information
59+
* about the product version to create.
60+
* @return A data transfer object ({@link TmsProductVersionRS}) with details of the created product version.
61+
*/
62+
@PostMapping
63+
TmsProductVersionRS createVersion(@PathVariable("projectKey") String projectKey,
64+
@RequestBody final ProductVersionRQ inputDto,
65+
@AuthenticationPrincipal ReportPortalUser user) {
66+
return productVersionService.create(
67+
projectExtractor
68+
.extractMembershipDetails(user, EntityUtils.normalizeId(projectKey))
69+
.getProjectId(),
70+
inputDto);
71+
}
72+
73+
/**
74+
* Updates the details of an existing product version in a project.
75+
*
76+
* @param projectKey The key of the project to which the product version belongs.
77+
* @param productVersionId The ID of the product version to update.
78+
* @param inputDto A request payload ({@link ProductVersionRQ}) containing updated information
79+
* for the product version.
80+
* @return A data transfer object ({@link TmsProductVersionRS}) with updated details of the product version.
81+
*/
82+
@PutMapping("/{productVersionId}")
83+
TmsProductVersionRS updateVersion(@PathVariable("projectKey") String projectKey,
84+
@PathVariable("productVersionId") final long productVersionId,
85+
@RequestBody final ProductVersionRQ inputDto,
86+
@AuthenticationPrincipal ReportPortalUser user) {
87+
return productVersionService.update(
88+
projectExtractor
89+
.extractMembershipDetails(user, EntityUtils.normalizeId(projectKey))
90+
.getProjectId(),
91+
productVersionId,
92+
inputDto);
93+
}
94+
95+
/**
96+
* Deletes a specific product version from a project.
97+
*
98+
* @param projectKey The key of the project to which the product version belongs.
99+
* @param productVersionId The ID of the product version to delete.
100+
*/
101+
@DeleteMapping("/{productVersionId}")
102+
void deleteVersion(@PathVariable("projectKey") String projectKey,
103+
@PathVariable("productVersionId") final long productVersionId,
104+
@AuthenticationPrincipal ReportPortalUser user) {
105+
productVersionService.delete(
106+
projectExtractor
107+
.extractMembershipDetails(user, EntityUtils.normalizeId(projectKey))
108+
.getProjectId(),
109+
productVersionId);
110+
}
111+
}

0 commit comments

Comments
 (0)