Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
P
pmis-svc
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mmahalingam
pmis-svc
Commits
cbcdba25
Commit
cbcdba25
authored
Aug 01, 2023
by
kkichaan
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'subash' into 'master'
Account Metrics and Summary APIs See merge request
!5
parents
82034db1
4f8086d8
Hide whitespace changes
Inline
Side-by-side
Showing
44 changed files
with
567 additions
and
127 deletions
+567
-127
DemoDB.mv.db
DemoDB.mv.db
+0
-0
PMISExceptionHandler.java
...a/com/altimetrik/pmis/Exception/PMISExceptionHandler.java
+34
-0
IndicatorController.java
...a/com/altimetrik/pmis/controller/IndicatorController.java
+4
-1
MetricsController.java
...ava/com/altimetrik/pmis/controller/MetricsController.java
+36
-26
ProjectController.java
...ava/com/altimetrik/pmis/controller/ProjectController.java
+19
-0
AccountEntity.java
...n/java/com/altimetrik/pmis/core/entity/AccountEntity.java
+8
-0
AccountMetricEntity.java
.../com/altimetrik/pmis/core/entity/AccountMetricEntity.java
+4
-6
IndicatorEntity.java
...java/com/altimetrik/pmis/core/entity/IndicatorEntity.java
+5
-0
ProjectEntity.java
...n/java/com/altimetrik/pmis/core/entity/ProjectEntity.java
+4
-1
ProjectSummaryEntity.java
...com/altimetrik/pmis/core/entity/ProjectSummaryEntity.java
+7
-9
ProjectSummaryRemarkEntity.java
...timetrik/pmis/core/entity/ProjectSummaryRemarkEntity.java
+2
-4
WeeklyMetricEntity.java
...a/com/altimetrik/pmis/core/entity/WeeklyMetricEntity.java
+0
-1
ProjectType.java
...main/java/com/altimetrik/pmis/core/enums/ProjectType.java
+5
-0
MetricsMapper.java
src/main/java/com/altimetrik/pmis/mapper/MetricsMapper.java
+62
-14
ProjectMapper.java
src/main/java/com/altimetrik/pmis/mapper/ProjectMapper.java
+0
-1
ProjectSummaryMapper.java
...java/com/altimetrik/pmis/mapper/ProjectSummaryMapper.java
+57
-0
Account.java
src/main/java/com/altimetrik/pmis/model/Account.java
+1
-0
AccountCategory.java
src/main/java/com/altimetrik/pmis/model/AccountCategory.java
+0
-1
AccountIndicator.java
...main/java/com/altimetrik/pmis/model/AccountIndicator.java
+0
-1
Category.java
src/main/java/com/altimetrik/pmis/model/Category.java
+6
-1
CreateProjectSummaryRequest.java
...om/altimetrik/pmis/model/CreateProjectSummaryRequest.java
+22
-0
Indicator.java
src/main/java/com/altimetrik/pmis/model/Indicator.java
+13
-1
Metric.java
src/main/java/com/altimetrik/pmis/model/Metric.java
+21
-0
MetricIndicator.java
src/main/java/com/altimetrik/pmis/model/MetricIndicator.java
+6
-9
Project.java
src/main/java/com/altimetrik/pmis/model/Project.java
+2
-5
ProjectCategory.java
src/main/java/com/altimetrik/pmis/model/ProjectCategory.java
+0
-1
ProjectIndicator.java
...main/java/com/altimetrik/pmis/model/ProjectIndicator.java
+0
-1
ProjectMetric.java
src/main/java/com/altimetrik/pmis/model/ProjectMetric.java
+0
-1
ProjectSummary.java
src/main/java/com/altimetrik/pmis/model/ProjectSummary.java
+31
-0
ProjectSummaryRemark.java
.../java/com/altimetrik/pmis/model/ProjectSummaryRemark.java
+14
-0
Trend.java
src/main/java/com/altimetrik/pmis/model/Trend.java
+0
-1
ValueOfEnum.java
...ava/com/altimetrik/pmis/model/validators/ValueOfEnum.java
+26
-0
ValueOfEnumValidator.java
...ltimetrik/pmis/model/validators/ValueOfEnumValidator.java
+29
-0
AccountMetricsRepository.java
.../altimetrik/pmis/repository/AccountMetricsRepository.java
+12
-0
AccountRepository.java
...ava/com/altimetrik/pmis/repository/AccountRepository.java
+1
-0
IndicatorsRepository.java
.../com/altimetrik/pmis/repository/IndicatorsRepository.java
+5
-1
MetricsRepository.java
...ava/com/altimetrik/pmis/repository/MetricsRepository.java
+0
-6
ProjectSummaryRepository.java
.../altimetrik/pmis/repository/ProjectSummaryRepository.java
+13
-0
MetricsService.java
...main/java/com/altimetrik/pmis/service/MetricsService.java
+9
-5
ProjectService.java
...main/java/com/altimetrik/pmis/service/ProjectService.java
+9
-0
IndicatorServiceImpl.java
...om/altimetrik/pmis/service/impl/IndicatorServiceImpl.java
+2
-1
MetricsServiceImpl.java
.../com/altimetrik/pmis/service/impl/MetricsServiceImpl.java
+56
-27
ProjectServiceImpl.java
.../com/altimetrik/pmis/service/impl/ProjectServiceImpl.java
+42
-1
ApplicationTests.java
src/test/java/com/altimetrik/ApplicationTests.java
+0
-1
No files found.
DemoDB.mv.db
View file @
cbcdba25
No preview for this file type
src/main/java/com/altimetrik/pmis/Exception/PMISExceptionHandler.java
0 → 100644
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
Exception
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.HttpStatusCode
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.validation.FieldError
;
import
org.springframework.web.bind.MethodArgumentNotValidException
;
import
org.springframework.web.bind.annotation.ControllerAdvice
;
import
org.springframework.web.context.request.WebRequest
;
import
org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler
;
import
java.util.HashMap
;
import
java.util.Map
;
@ControllerAdvice
public
class
PMISExceptionHandler
extends
ResponseEntityExceptionHandler
{
@Override
protected
ResponseEntity
<
Object
>
handleMethodArgumentNotValid
(
MethodArgumentNotValidException
ex
,
HttpHeaders
headers
,
HttpStatusCode
status
,
WebRequest
request
)
{
Map
<
String
,
String
>
errors
=
new
HashMap
<>();
ex
.
getBindingResult
().
getAllErrors
().
forEach
((
error
)
->
{
String
fieldName
=
((
FieldError
)
error
).
getField
();
String
message
=
error
.
getDefaultMessage
();
errors
.
put
(
fieldName
,
message
);
});
return
new
ResponseEntity
<>(
errors
,
HttpStatus
.
BAD_REQUEST
);
}
}
src/main/java/com/altimetrik/pmis/controller/IndicatorController.java
View file @
cbcdba25
...
...
@@ -2,14 +2,17 @@ package com.altimetrik.pmis.controller;
import
com.altimetrik.pmis.model.Indicator
;
import
com.altimetrik.pmis.service.IndicatorService
;
import
jakarta.validation.Valid
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
@RestController
@RequestMapping
(
"/indicator"
)
@Validated
public
class
IndicatorController
{
private
IndicatorService
indicatorService
;
...
...
@@ -20,7 +23,7 @@ public class IndicatorController {
}
@PostMapping
(
"save"
)
ResponseEntity
<
Indicator
>
save
(
@RequestBody
Indicator
indicator
)
{
ResponseEntity
<
Indicator
>
save
(
@
Valid
@
RequestBody
Indicator
indicator
)
{
return
ResponseEntity
.
ok
(
indicatorService
.
save
(
indicator
));
}
...
...
src/main/java/com/altimetrik/pmis/controller/MetricsController.java
View file @
cbcdba25
//package com.altimetrik.pmis.controller;
//
//import com.altimetrik.pmis.core.entity.Metrics;
//import com.altimetrik.pmis.service.MetricsService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.http.ResponseEntity;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//@RestController
//@RequestMapping("/metrics")
//public class MetricsController {
// private final MetricsService metricsService;
//
// @Autowired
// private MetricsController(MetricsService metricsService) {
// this.metricsService = metricsService;
// }
//
// @PostMapping
// public ResponseEntity<Metrics> save(@RequestBody Metrics metrics) {
// return ResponseEntity.ok(metricsService.save(metrics));
// }
//}
package
com
.
altimetrik
.
pmis
.
controller
;
import
com.altimetrik.pmis.model.Metric
;
import
com.altimetrik.pmis.service.MetricsService
;
import
jakarta.websocket.server.PathParam
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.Objects
;
@RestController
@RequestMapping
(
"/metrics"
)
public
class
MetricsController
{
private
final
MetricsService
metricsService
;
@Autowired
private
MetricsController
(
MetricsService
metricsService
)
{
this
.
metricsService
=
metricsService
;
}
@PostMapping
(
"/account"
)
public
ResponseEntity
<
Metric
>
save
(
@RequestBody
Metric
metric
)
{
return
ResponseEntity
.
ok
(
metricsService
.
save
(
metric
));
}
@GetMapping
(
"account/{accountId}"
)
public
ResponseEntity
<
Metric
>
getByAccountId
(
@PathParam
(
"accountId"
)
Long
accountId
)
{
Metric
metric
=
metricsService
.
getByAccountId
(
accountId
);
if
(
Objects
.
isNull
(
metric
))
{
return
ResponseEntity
.
noContent
().
build
();
}
return
ResponseEntity
.
ok
(
metricsService
.
getByAccountId
(
accountId
));
}
}
src/main/java/com/altimetrik/pmis/controller/ProjectController.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
controller
;
import
com.altimetrik.pmis.model.CreateProjectSummaryRequest
;
import
com.altimetrik.pmis.model.Project
;
import
com.altimetrik.pmis.model.ProjectSummary
;
import
com.altimetrik.pmis.service.ProjectService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
java.time.LocalDate
;
import
java.util.List
;
@RestController
...
...
@@ -32,4 +36,19 @@ public class ProjectController {
public
ResponseEntity
<
List
<
Project
>>
getByAccount
(
@PathVariable
Long
accountId
)
{
return
ResponseEntity
.
ok
(
projectService
.
getByAccount
(
accountId
));
}
@PostMapping
(
"/summary"
)
public
ResponseEntity
<
List
<
ProjectSummary
>>
createProjectSummary
(
@RequestBody
CreateProjectSummaryRequest
createProjectSummaryRequest
)
{
return
ResponseEntity
.
ok
(
projectService
.
createProjectSummary
(
createProjectSummaryRequest
));
}
@GetMapping
(
"/summary/account/{accountId}/reportDate/{reportDate}"
)
public
ResponseEntity
<
List
<
ProjectSummary
>>
getProjectSummaryByAccountId
(
@PathVariable
(
"accountId"
)
Long
accountId
,
@PathVariable
(
"reportDate"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
LocalDate
reportDate
)
{
return
ResponseEntity
.
ok
(
projectService
.
getProjectSummaryByAccountIdAndReportDate
(
accountId
,
reportDate
));
}
@PutMapping
(
"/summary"
)
public
ResponseEntity
<
ProjectSummary
>
updateProjectSummary
(
@RequestBody
ProjectSummary
projectSummary
)
{
return
ResponseEntity
.
ok
(
projectService
.
updateProjectSummary
(
projectSummary
));
}
}
src/main/java/com/altimetrik/pmis/core/entity/AccountEntity.java
View file @
cbcdba25
...
...
@@ -13,6 +13,10 @@ import java.util.List;
@AllArgsConstructor
@Builder
public
class
AccountEntity
{
@OneToMany
(
mappedBy
=
"account"
)
List
<
AccountMetricEntity
>
accountMetricEntities
;
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
private
Long
id
;
...
...
@@ -23,6 +27,9 @@ public class AccountEntity {
@Column
(
length
=
100
)
private
String
head
;
@Column
private
String
headEmail
;
@Column
(
length
=
100
)
private
String
clientPartner
;
...
...
@@ -31,4 +38,5 @@ public class AccountEntity {
@Column
private
String
description
;
}
src/main/java/com/altimetrik/pmis/core/entity/AccountMetricEntity.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
core
.
entity
;
import
jakarta.persistence.*
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
import
lombok.*
;
@Entity
@Table
(
name
=
"tbl_account_metric"
)
...
...
@@ -12,16 +9,17 @@ import lombok.Setter;
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public
class
AccountMetricEntity
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
private
Long
id
;
@
One
ToOne
@
Many
ToOne
@JoinColumn
(
name
=
"account_id"
,
referencedColumnName
=
"id"
)
private
AccountEntity
account
;
@
One
ToOne
@
Many
ToOne
@JoinColumn
(
name
=
"indicator_id"
,
referencedColumnName
=
"id"
)
private
IndicatorEntity
indicator
;
...
...
src/main/java/com/altimetrik/pmis/core/entity/IndicatorEntity.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
core
.
entity
;
import
com.altimetrik.pmis.core.enums.ProjectType
;
import
jakarta.persistence.*
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
...
...
@@ -20,6 +21,10 @@ public class IndicatorEntity {
@Column
(
nullable
=
false
)
private
String
name
;
@Enumerated
(
EnumType
.
STRING
)
@Column
(
nullable
=
false
)
private
ProjectType
projectType
;
@ManyToOne
(
cascade
=
CascadeType
.
ALL
)
@JoinColumn
(
name
=
"category_id"
,
referencedColumnName
=
"id"
)
private
CategoryEntity
category
;
...
...
src/main/java/com/altimetrik/pmis/core/entity/ProjectEntity.java
View file @
cbcdba25
...
...
@@ -21,13 +21,16 @@ public class ProjectEntity {
@Column
(
length
=
100
)
private
String
name
;
@
OneToOne
(
fetch
=
FetchType
.
LAZY
,
optional
=
false
)
@
ManyToOne
@JoinColumn
(
name
=
"account_id"
,
referencedColumnName
=
"id"
)
private
AccountEntity
account
;
@Column
(
length
=
100
)
private
String
manager
;
@Column
private
String
managerEmail
;
@Column
(
length
=
100
)
private
String
clientManager
;
...
...
src/main/java/com/altimetrik/pmis/core/entity/ProjectSummaryEntity.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
core
.
entity
;
import
jakarta.persistence.*
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
import
lombok.*
;
import
java.
sql.
Date
;
import
java.
time.Local
Date
;
import
java.util.List
;
@Entity
...
...
@@ -15,20 +12,21 @@ import java.util.List;
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public
class
ProjectSummaryEntity
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
private
Long
id
;
@
One
ToOne
@
Many
ToOne
@JoinColumn
(
name
=
"project_id"
,
referencedColumnName
=
"id"
)
private
ProjectEntity
project
;
@Column
private
char
engineeringStatus
;
@
Column
private
Date
reportDate
;
@
Temporal
(
TemporalType
.
DATE
)
private
Local
Date
reportDate
;
@Column
private
int
planned
;
...
...
@@ -39,6 +37,6 @@ public class ProjectSummaryEntity {
@Column
private
char
peopleStatus
;
@OneToMany
(
mappedBy
=
"projectSummary"
)
@OneToMany
(
mappedBy
=
"projectSummary"
,
cascade
=
CascadeType
.
ALL
)
private
List
<
ProjectSummaryRemarkEntity
>
remarks
;
}
src/main/java/com/altimetrik/pmis/core/entity/ProjectSummaryRemarkEntity.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
core
.
entity
;
import
jakarta.persistence.*
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
import
lombok.*
;
@Entity
@Table
(
name
=
"tbl_project_summary_remark"
)
...
...
@@ -12,6 +9,7 @@ import lombok.Setter;
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public
class
ProjectSummaryRemarkEntity
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
...
...
src/main/java/com/altimetrik/pmis/core/entity/WeeklyMetricEntity.java
View file @
cbcdba25
...
...
@@ -7,7 +7,6 @@ import lombok.NoArgsConstructor;
import
lombok.Setter
;
import
java.sql.Date
;
import
java.util.List
;
@Entity
@Table
(
name
=
"tbl_weekly_metric"
)
...
...
src/main/java/com/altimetrik/pmis/core/enums/ProjectType.java
0 → 100644
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
core
.
enums
;
public
enum
ProjectType
{
DEVELOPMENT
,
QE
}
src/main/java/com/altimetrik/pmis/mapper/MetricsMapper.java
View file @
cbcdba25
//package com.altimetrik.pmis.mapper;
//
//import com.altimetrik.pmis.model.Metrics;
//import org.mapstruct.Mapper;
//import org.mapstruct.factory.Mappers;
//
//@Mapper
//public interface MetricsMapper {
// MetricsMapper INSTANCE = Mappers.getMapper(MetricsMapper.class);
//
// Metrics entityToDomain(MetricsEntity metricsEntity);
//
// MetricsEntity domainToEntity(Metrics metrics);
//}
package
com
.
altimetrik
.
pmis
.
mapper
;
import
com.altimetrik.pmis.core.entity.AccountEntity
;
import
com.altimetrik.pmis.core.entity.AccountMetricEntity
;
import
com.altimetrik.pmis.core.entity.IndicatorEntity
;
import
com.altimetrik.pmis.model.Metric
;
import
com.altimetrik.pmis.model.MetricIndicator
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mapping
;
import
org.mapstruct.factory.Mappers
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.Optional
;
import
java.util.stream.Collectors
;
@Mapper
public
interface
MetricsMapper
{
MetricsMapper
INSTANCE
=
Mappers
.
getMapper
(
MetricsMapper
.
class
);
default
Metric
entityToDomain
(
List
<
AccountMetricEntity
>
accountMetricEntities
)
{
Metric
metric
=
null
;
for
(
AccountMetricEntity
accountMetricEntity
:
accountMetricEntities
)
{
if
(
Objects
.
isNull
(
metric
))
{
metric
=
accountMetricEntityToDomain
(
accountMetricEntity
);
}
metric
.
getMetricIndicators
().
add
(
mapIndicatorEntityToDomain
(
accountMetricEntity
.
getId
(),
accountMetricEntity
.
getIndicator
(),
accountMetricEntity
.
isActive
()));
}
return
metric
;
}
default
List
<
AccountMetricEntity
>
domainToEntity
(
Metric
metric
,
Optional
<
AccountEntity
>
accountEntityOptional
,
Optional
<
List
<
IndicatorEntity
>>
indicatorEntitiesOptional
)
{
List
<
AccountMetricEntity
>
accountMetricEntities
=
new
ArrayList
<>();
if
(
indicatorEntitiesOptional
.
isPresent
()
&&
accountEntityOptional
.
isPresent
())
{
accountMetricEntities
=
indicatorEntitiesOptional
.
get
().
stream
()
.
map
((
indicatorEntity
)
->
{
Optional
<
MetricIndicator
>
metricIndicatorOptional
=
metric
.
getMetricIndicators
().
stream
().
filter
(
metricIndicator
->
metricIndicator
.
getIndicatorId
().
equals
(
indicatorEntity
.
getId
())).
findFirst
();
return
AccountMetricEntity
.
builder
()
.
id
(
null
)
.
description
(
metric
.
getDescription
())
.
account
(
accountEntityOptional
.
get
())
.
indicator
(
indicatorEntity
)
.
isActive
(
metricIndicatorOptional
.
isPresent
()
?
metricIndicatorOptional
.
get
().
isActive
()
:
false
)
.
build
();
})
.
collect
(
Collectors
.
toList
());
}
return
accountMetricEntities
;
}
@Mapping
(
target
=
"accountId"
,
source
=
"account.id"
)
Metric
accountMetricEntityToDomain
(
AccountMetricEntity
accountMetricEntity
);
@Mapping
(
target
=
"active"
,
source
=
"isActive"
)
@Mapping
(
target
=
"metricId"
,
source
=
"metricId"
)
@Mapping
(
target
=
"indicatorId"
,
source
=
"indicatorEntity.id"
)
@Mapping
(
target
=
"indicatorName"
,
source
=
"indicatorEntity.name"
)
MetricIndicator
mapIndicatorEntityToDomain
(
Long
metricId
,
IndicatorEntity
indicatorEntity
,
boolean
isActive
);
}
src/main/java/com/altimetrik/pmis/mapper/ProjectMapper.java
View file @
cbcdba25
...
...
@@ -4,7 +4,6 @@ import com.altimetrik.pmis.core.entity.ProjectEntity;
import
com.altimetrik.pmis.model.Project
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.factory.Mappers
;
import
org.springframework.util.CollectionUtils
;
@Mapper
public
interface
ProjectMapper
{
...
...
src/main/java/com/altimetrik/pmis/mapper/ProjectSummaryMapper.java
0 → 100644
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
mapper
;
import
com.altimetrik.pmis.core.entity.ProjectSummaryEntity
;
import
com.altimetrik.pmis.core.entity.ProjectSummaryRemarkEntity
;
import
com.altimetrik.pmis.model.ProjectSummary
;
import
com.altimetrik.pmis.model.ProjectSummaryRemark
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.Mapping
;
import
org.mapstruct.factory.Mappers
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@Mapper
public
interface
ProjectSummaryMapper
{
ProjectSummaryMapper
INSTANCE
=
Mappers
.
getMapper
(
ProjectSummaryMapper
.
class
);
List
<
ProjectSummary
>
projectSummaryEntitiesToDomains
(
List
<
ProjectSummaryEntity
>
projectSummaryEntities
);
@Mapping
(
target
=
"projectId"
,
source
=
"project.id"
)
@Mapping
(
target
=
"projectName"
,
source
=
"project.name"
)
ProjectSummary
projectSummaryEntityToDomain
(
ProjectSummaryEntity
projectSummaryEntity
);
default
List
<
ProjectSummaryEntity
>
projectSummaryDomainsToEntities
(
List
<
ProjectSummary
>
projectSummaries
)
{
return
projectSummaries
.
stream
()
.
map
(
projectSummary
->
mapProjectSummaryDomainToEntity
(
projectSummary
))
.
collect
(
Collectors
.
toList
());
}
default
ProjectSummaryEntity
mapProjectSummaryDomainToEntity
(
ProjectSummary
projectSummary
)
{
ProjectSummaryEntity
projectSummaryEntity
=
projectSummaryDomainToEntity
(
projectSummary
);
projectSummaryEntity
.
setRemarks
(
mapProjectSummaryRemarkDomainsToEntities
(
projectSummary
.
getRemarks
(),
projectSummaryEntity
));
return
projectSummaryEntity
;
}
@Mapping
(
target
=
"project.id"
,
source
=
"projectId"
)
ProjectSummaryEntity
projectSummaryDomainToEntity
(
ProjectSummary
projectSummary
);
default
List
<
ProjectSummaryRemarkEntity
>
mapProjectSummaryRemarkDomainsToEntities
(
List
<
ProjectSummaryRemark
>
projectSummaryRemarks
,
ProjectSummaryEntity
projectSummaryEntity
)
{
return
projectSummaryRemarks
.
stream
()
.
map
(
projectSummaryRemark
->
mapProjectSummaryRemarkDomainToEntity
(
projectSummaryRemark
,
projectSummaryEntity
))
.
collect
(
Collectors
.
toList
());
}
default
ProjectSummaryRemarkEntity
mapProjectSummaryRemarkDomainToEntity
(
ProjectSummaryRemark
projectSummaryRemark
,
ProjectSummaryEntity
projectSummaryEntity
)
{
ProjectSummaryRemarkEntity
projectSummaryRemarkEntity
=
projectSummaryRemarkDomainToEntity
(
projectSummaryRemark
);
projectSummaryRemarkEntity
.
setProjectSummary
(
projectSummaryEntity
);
return
projectSummaryRemarkEntity
;
}
ProjectSummaryRemarkEntity
projectSummaryRemarkDomainToEntity
(
ProjectSummaryRemark
projectSummaryRemark
);
}
src/main/java/com/altimetrik/pmis/model/Account.java
View file @
cbcdba25
...
...
@@ -11,6 +11,7 @@ public class Account {
private
Long
id
;
private
String
name
;
private
String
head
;
private
String
headEmail
;
private
String
clientPartner
;
private
String
clientHead
;
private
String
description
;
...
...
src/main/java/com/altimetrik/pmis/model/AccountCategory.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
;
import
jakarta.persistence.*
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
...
...
src/main/java/com/altimetrik/pmis/model/AccountIndicator.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
;
import
jakarta.persistence.*
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
...
...
src/main/java/com/altimetrik/pmis/model/Category.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
;
import
com.altimetrik.pmis.core.enums.CategoryType
;
import
jakarta.validation.constraints.NotEmpty
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
...
...
@@ -13,6 +14,9 @@ import lombok.Setter;
@AllArgsConstructor
public
class
Category
{
private
Long
id
;
@NotEmpty
(
message
=
"Category name cannot be null or empty"
)
private
String
categoryName
;
private
CategoryType
type
;
}
}
\ No newline at end of file
src/main/java/com/altimetrik/pmis/model/CreateProjectSummaryRequest.java
0 → 100644
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
;
import
jakarta.validation.constraints.NotEmpty
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
import
java.time.LocalDate
;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public
class
CreateProjectSummaryRequest
{
@NotEmpty
(
message
=
"account id cannot be null or empty"
)
private
Long
accountId
;
@NotEmpty
(
message
=
"week date cannot be null or empty"
)
private
LocalDate
reportDate
;
}
src/main/java/com/altimetrik/pmis/model/Indicator.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
;
import
com.altimetrik.pmis.core.enums.ProjectType
;
import
jakarta.validation.Valid
;
import
jakarta.validation.constraints.NotEmpty
;
import
jakarta.validation.constraints.NotNull
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
...
...
@@ -11,6 +15,13 @@ import lombok.Setter;
@AllArgsConstructor
public
class
Indicator
{
private
Long
id
;
@NotEmpty
(
message
=
"Indicator name cannot be null or empty"
)
private
String
name
;
@Valid
@NotNull
(
message
=
"Category cannot be null"
)
private
Category
category
;
}
private
ProjectType
projectType
;
}
\ No newline at end of file
src/main/java/com/altimetrik/pmis/model/Metric.java
0 → 100644
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
import
java.util.ArrayList
;
import
java.util.List
;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public
class
Metric
{
private
Long
accountId
;
private
List
<
MetricIndicator
>
metricIndicators
=
new
ArrayList
<>();
private
String
description
;
}
src/main/java/com/altimetrik/pmis/model/
AccountMetric
.java
→
src/main/java/com/altimetrik/pmis/model/
MetricIndicator
.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
;
import
jakarta.persistence.*
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
import
java.util.List
;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public
class
AccountMetric
{
private
Long
id
;
@NoArgsConstructor
public
class
MetricIndicator
{
private
Long
metricId
;
private
Account
account
;
private
Long
indicatorId
;
private
List
<
AccountCategory
>
categories
;
private
String
indicatorName
;
private
boolean
isActive
;
private
String
comments
;
}
src/main/java/com/altimetrik/pmis/model/Project.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
;
import
com.altimetrik.pmis.core.entity.AccountEntity
;
import
com.altimetrik.pmis.core.entity.TrendEntity
;
import
com.altimetrik.pmis.core.enums.ProjectStatus
;
import
jakarta.persistence.*
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
import
java.util.List
;
@Getter
@Setter
@NoArgsConstructor
...
...
@@ -24,6 +19,8 @@ public class Project {
private
String
manager
;
private
String
managerEmail
;
private
String
clientManager
;
private
String
description
;
...
...
src/main/java/com/altimetrik/pmis/model/ProjectCategory.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
;
import
jakarta.persistence.*
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
...
...
src/main/java/com/altimetrik/pmis/model/ProjectIndicator.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
;
import
jakarta.persistence.*
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
...
...
src/main/java/com/altimetrik/pmis/model/ProjectMetric.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
;
import
jakarta.persistence.*
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
...
...
src/main/java/com/altimetrik/pmis/model/ProjectSummary.java
0 → 100644
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
;
import
lombok.*
;
import
java.time.LocalDate
;
import
java.util.List
;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public
class
ProjectSummary
{
private
Long
id
;
private
Long
projectId
;
private
String
projectName
;
private
char
engineeringStatus
;
private
LocalDate
reportDate
;
private
int
planned
;
private
int
actual
;
private
char
peopleStatus
;
private
List
<
ProjectSummaryRemark
>
remarks
;
}
src/main/java/com/altimetrik/pmis/model/ProjectSummaryRemark.java
0 → 100644
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
;
import
lombok.Builder
;
import
lombok.Getter
;
import
lombok.Setter
;
@Getter
@Setter
@Builder
public
class
ProjectSummaryRemark
{
private
Long
id
;
private
String
remark
;
}
src/main/java/com/altimetrik/pmis/model/Trend.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
;
import
com.altimetrik.pmis.core.enums.ProjectStatus
;
import
jakarta.persistence.*
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
...
...
src/main/java/com/altimetrik/pmis/model/validators/ValueOfEnum.java
0 → 100644
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
.
validators
;
import
jakarta.validation.Constraint
;
import
jakarta.validation.Payload
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.Target
;
import
static
java
.
lang
.
annotation
.
ElementType
.*;
import
static
java
.
lang
.
annotation
.
RetentionPolicy
.
RUNTIME
;
@Target
({
METHOD
,
FIELD
,
ANNOTATION_TYPE
,
CONSTRUCTOR
,
PARAMETER
,
TYPE_USE
})
@Retention
(
RUNTIME
)
@Documented
@Constraint
(
validatedBy
=
ValueOfEnumValidator
.
class
)
public
@interface
ValueOfEnum
{
Class
<?
extends
Enum
<?>>
enumClass
();
String
message
()
default
"must be any of enum {enumClass}"
;
Class
<?>[]
groups
()
default
{};
Class
<?
extends
Payload
>[]
payload
()
default
{};
}
\ No newline at end of file
src/main/java/com/altimetrik/pmis/model/validators/ValueOfEnumValidator.java
0 → 100644
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
model
.
validators
;
import
jakarta.validation.ConstraintValidator
;
import
jakarta.validation.ConstraintValidatorContext
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
public
class
ValueOfEnumValidator
implements
ConstraintValidator
<
ValueOfEnum
,
CharSequence
>
{
private
List
<
String
>
acceptedValues
;
@Override
public
void
initialize
(
ValueOfEnum
annotation
)
{
acceptedValues
=
Stream
.
of
(
annotation
.
enumClass
().
getEnumConstants
())
.
map
(
Enum:
:
name
)
.
collect
(
Collectors
.
toList
());
}
@Override
public
boolean
isValid
(
CharSequence
value
,
ConstraintValidatorContext
context
)
{
if
(
value
==
null
)
{
return
true
;
}
return
acceptedValues
.
contains
(
value
.
toString
());
}
}
\ No newline at end of file
src/main/java/com/altimetrik/pmis/repository/AccountMetricsRepository.java
0 → 100644
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
repository
;
import
com.altimetrik.pmis.core.entity.AccountMetricEntity
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
java.util.List
;
public
interface
AccountMetricsRepository
extends
JpaRepository
<
AccountMetricEntity
,
Long
>
{
List
<
AccountMetricEntity
>
findByAccountIdAndIsActive
(
Long
accountId
,
boolean
isActive
);
}
src/main/java/com/altimetrik/pmis/repository/AccountRepository.java
View file @
cbcdba25
...
...
@@ -4,4 +4,5 @@ import com.altimetrik.pmis.core.entity.AccountEntity;
import
org.springframework.data.jpa.repository.JpaRepository
;
public
interface
AccountRepository
extends
JpaRepository
<
AccountEntity
,
Long
>
{
}
src/main/java/com/altimetrik/pmis/repository/IndicatorsRepository.java
View file @
cbcdba25
...
...
@@ -2,11 +2,15 @@ package com.altimetrik.pmis.repository;
import
com.altimetrik.pmis.core.entity.IndicatorEntity
;
import
com.altimetrik.pmis.core.enums.CategoryType
;
import
com.altimetrik.pmis.core.enums.ProjectType
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
java.util.List
;
import
java.util.Optional
;
public
interface
IndicatorsRepository
extends
JpaRepository
<
IndicatorEntity
,
Long
>
{
Optional
<
IndicatorEntity
>
findByNameAndCategoryCategoryNameAndCategoryType
(
String
name
,
String
categoryName
,
CategoryType
categoryType
);
Optional
<
IndicatorEntity
>
findByNameAndProjectTypeAndCategoryCategoryNameAndCategoryType
(
String
name
,
ProjectType
projectType
,
String
categoryName
,
CategoryType
categoryType
);
Optional
<
List
<
IndicatorEntity
>>
findByIdIn
(
List
<
Long
>
indicatorIds
);
}
src/main/java/com/altimetrik/pmis/repository/MetricsRepository.java
deleted
100644 → 0
View file @
82034db1
//package com.altimetrik.pmis.repository;
//
//import org.springframework.data.jpa.repository.JpaRepository;
//
//public interface MetricsRepository extends JpaRepository<MetricsEntity, Long> {
//}
src/main/java/com/altimetrik/pmis/repository/ProjectSummaryRepository.java
0 → 100644
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
repository
;
import
com.altimetrik.pmis.core.entity.ProjectSummaryEntity
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
java.time.LocalDate
;
import
java.util.List
;
import
java.util.Optional
;
public
interface
ProjectSummaryRepository
extends
JpaRepository
<
ProjectSummaryEntity
,
Long
>
{
Optional
<
List
<
ProjectSummaryEntity
>>
findByProjectAccountIdAndReportDate
(
Long
accountId
,
LocalDate
reportDate
);
}
src/main/java/com/altimetrik/pmis/service/MetricsService.java
View file @
cbcdba25
//package com.altimetrik.pmis.service;
//
//public interface MetricsService {
// Metrics save(Metrics metrics);
//}
package
com
.
altimetrik
.
pmis
.
service
;
import
com.altimetrik.pmis.model.Metric
;
public
interface
MetricsService
{
Metric
save
(
Metric
metric
);
Metric
getByAccountId
(
Long
accountId
);
}
src/main/java/com/altimetrik/pmis/service/ProjectService.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
service
;
import
com.altimetrik.pmis.model.CreateProjectSummaryRequest
;
import
com.altimetrik.pmis.model.Project
;
import
com.altimetrik.pmis.model.ProjectSummary
;
import
java.time.LocalDate
;
import
java.util.List
;
public
interface
ProjectService
{
...
...
@@ -10,4 +13,10 @@ public interface ProjectService {
Project
get
(
Long
id
);
List
<
Project
>
getByAccount
(
Long
accountId
);
List
<
ProjectSummary
>
createProjectSummary
(
CreateProjectSummaryRequest
createProjectSummaryRequest
);
List
<
ProjectSummary
>
getProjectSummaryByAccountIdAndReportDate
(
Long
accountId
,
LocalDate
reportDate
);
ProjectSummary
updateProjectSummary
(
ProjectSummary
projectSummary
);
}
src/main/java/com/altimetrik/pmis/service/impl/IndicatorServiceImpl.java
View file @
cbcdba25
...
...
@@ -31,7 +31,8 @@ public class IndicatorServiceImpl implements IndicatorService {
@Override
@Transactional
public
Indicator
save
(
Indicator
indicator
)
{
Optional
<
IndicatorEntity
>
indicatorEntityOptional
=
indicatorsRepository
.
findByNameAndCategoryCategoryNameAndCategoryType
(
indicator
.
getName
(),
indicator
.
getCategory
().
getCategoryName
(),
indicator
.
getCategory
().
getType
());
Optional
<
IndicatorEntity
>
indicatorEntityOptional
=
indicatorsRepository
.
findByNameAndProjectTypeAndCategoryCategoryNameAndCategoryType
(
indicator
.
getName
(),
indicator
.
getProjectType
(),
indicator
.
getCategory
().
getCategoryName
(),
indicator
.
getCategory
().
getType
());
if
(
indicatorEntityOptional
.
isPresent
())
{
return
indicatorMapper
.
entityToDomain
(
indicatorEntityOptional
.
get
());
}
...
...
src/main/java/com/altimetrik/pmis/service/impl/MetricsServiceImpl.java
View file @
cbcdba25
//package com.altimetrik.pmis.service.impl;
//
//import com.altimetrik.pmis.mapper.MetricsMapper;
//import com.altimetrik.pmis.model.Metrics;
//import com.altimetrik.pmis.repository.MetricsRepository;
//import com.altimetrik.pmis.service.MetricsService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//
//@Service
//public class MetricsServiceImpl implements MetricsService {
// private final MetricsRepository metricsRepository;
// private final MetricsMapper metricsMapper;
//
// @Autowired
// public MetricsServiceImpl(MetricsRepository metricsRepository) {
// this.metricsRepository = metricsRepository;
// this.metricsMapper = MetricsMapper.INSTANCE;
// }
//
//
// @Override
// public Metrics save(Metrics metrics) {
// return metricsMapper.entityToDomain(metricsRepository.saveAndFlush(metricsMapper.domainToEntity(metrics)));
// }
//}
package
com
.
altimetrik
.
pmis
.
service
.
impl
;
import
com.altimetrik.pmis.core.entity.AccountEntity
;
import
com.altimetrik.pmis.core.entity.AccountMetricEntity
;
import
com.altimetrik.pmis.core.entity.IndicatorEntity
;
import
com.altimetrik.pmis.mapper.MetricsMapper
;
import
com.altimetrik.pmis.model.Metric
;
import
com.altimetrik.pmis.model.MetricIndicator
;
import
com.altimetrik.pmis.repository.AccountMetricsRepository
;
import
com.altimetrik.pmis.repository.AccountRepository
;
import
com.altimetrik.pmis.repository.IndicatorsRepository
;
import
com.altimetrik.pmis.service.MetricsService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.Optional
;
@Service
public
class
MetricsServiceImpl
implements
MetricsService
{
private
final
AccountMetricsRepository
accountMetricsRepository
;
private
final
MetricsMapper
metricsMapper
;
private
final
AccountRepository
accountRepository
;
private
final
IndicatorsRepository
indicatorsRepository
;
@Autowired
public
MetricsServiceImpl
(
AccountMetricsRepository
metricsRepository
,
AccountRepository
accountRepository
,
IndicatorsRepository
indicatorsRepository
)
{
this
.
accountMetricsRepository
=
metricsRepository
;
this
.
accountRepository
=
accountRepository
;
this
.
indicatorsRepository
=
indicatorsRepository
;
this
.
metricsMapper
=
MetricsMapper
.
INSTANCE
;
}
@Override
public
Metric
save
(
Metric
metric
)
{
if
(
Objects
.
isNull
(
metric
)
||
CollectionUtils
.
isEmpty
(
metric
.
getMetricIndicators
()))
{
return
null
;
}
Optional
<
AccountEntity
>
accountEntityOptional
=
accountRepository
.
findById
(
metric
.
getAccountId
());
Optional
<
List
<
IndicatorEntity
>>
indicatorEntitiesOptional
=
indicatorsRepository
.
findByIdIn
(
metric
.
getMetricIndicators
().
stream
().
map
(
MetricIndicator:
:
getIndicatorId
).
toList
());
return
metricsMapper
.
entityToDomain
(
accountMetricsRepository
.
saveAllAndFlush
(
metricsMapper
.
domainToEntity
(
metric
,
accountEntityOptional
,
indicatorEntitiesOptional
)));
}
@Override
public
Metric
getByAccountId
(
Long
accountId
)
{
List
<
AccountMetricEntity
>
accountMetricEntities
=
accountMetricsRepository
.
findByAccountIdAndIsActive
(
accountId
,
true
);
return
metricsMapper
.
entityToDomain
(
accountMetricEntities
);
}
}
src/main/java/com/altimetrik/pmis/service/impl/ProjectServiceImpl.java
View file @
cbcdba25
package
com
.
altimetrik
.
pmis
.
service
.
impl
;
import
com.altimetrik.pmis.core.entity.ProjectEntity
;
import
com.altimetrik.pmis.core.entity.ProjectSummaryEntity
;
import
com.altimetrik.pmis.mapper.ProjectMapper
;
import
com.altimetrik.pmis.mapper.ProjectSummaryMapper
;
import
com.altimetrik.pmis.model.CreateProjectSummaryRequest
;
import
com.altimetrik.pmis.model.Project
;
import
com.altimetrik.pmis.model.ProjectSummary
;
import
com.altimetrik.pmis.repository.ProjectRepository
;
import
com.altimetrik.pmis.repository.ProjectSummaryRepository
;
import
com.altimetrik.pmis.service.AccountService
;
import
com.altimetrik.pmis.service.ProjectService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.time.LocalDate
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.stream.Collectors
;
@Service
public
class
ProjectServiceImpl
implements
ProjectService
{
...
...
@@ -19,10 +27,16 @@ public class ProjectServiceImpl implements ProjectService {
private
final
AccountService
accountService
;
private
final
ProjectMapper
projectMapper
;
private
final
ProjectSummaryRepository
projectSummaryRepository
;
private
final
ProjectSummaryMapper
projectSummaryMapper
;
@Autowired
public
ProjectServiceImpl
(
ProjectRepository
projectRepository
,
AccountService
accountService
)
{
public
ProjectServiceImpl
(
ProjectRepository
projectRepository
,
AccountService
accountService
,
ProjectSummaryRepository
projectSummaryRepository
)
{
this
.
projectRepository
=
projectRepository
;
this
.
accountService
=
accountService
;
this
.
projectSummaryRepository
=
projectSummaryRepository
;
this
.
projectSummaryMapper
=
ProjectSummaryMapper
.
INSTANCE
;
this
.
projectMapper
=
ProjectMapper
.
INSTANCE
;
}
...
...
@@ -45,4 +59,31 @@ public class ProjectServiceImpl implements ProjectService {
public
List
<
Project
>
getByAccount
(
Long
accountId
)
{
return
projectRepository
.
findByAccountId
(
accountId
).
stream
().
map
(
projectEntity
->
projectMapper
.
entityToDomain
(
projectEntity
)).
toList
();
}
@Override
public
List
<
ProjectSummary
>
createProjectSummary
(
CreateProjectSummaryRequest
createProjectSummaryRequest
)
{
Optional
<
List
<
ProjectSummaryEntity
>>
projectSummaryEntitiesOptional
=
projectSummaryRepository
.
findByProjectAccountIdAndReportDate
(
createProjectSummaryRequest
.
getAccountId
(),
createProjectSummaryRequest
.
getReportDate
());
if
(
projectSummaryEntitiesOptional
.
isPresent
()
&&
!
CollectionUtils
.
isEmpty
(
projectSummaryEntitiesOptional
.
get
()))
{
return
projectSummaryMapper
.
projectSummaryEntitiesToDomains
(
projectSummaryEntitiesOptional
.
get
());
}
List
<
ProjectEntity
>
projectEntities
=
projectRepository
.
findByAccountId
(
createProjectSummaryRequest
.
getAccountId
());
List
<
ProjectSummaryEntity
>
projectSummaryEntities
=
projectEntities
.
stream
().
map
(
projectEntity
->
{
return
ProjectSummaryEntity
.
builder
().
project
(
projectEntity
).
reportDate
(
createProjectSummaryRequest
.
getReportDate
()).
build
();
}).
collect
(
Collectors
.
toList
());
return
projectSummaryMapper
.
projectSummaryEntitiesToDomains
(
projectSummaryRepository
.
saveAllAndFlush
(
projectSummaryEntities
));
}
@Override
public
List
<
ProjectSummary
>
getProjectSummaryByAccountIdAndReportDate
(
Long
accountId
,
LocalDate
reportDate
)
{
Optional
<
List
<
ProjectSummaryEntity
>>
projectSummaryEntitiesOptional
=
projectSummaryRepository
.
findByProjectAccountIdAndReportDate
(
accountId
,
reportDate
);
return
projectSummaryEntitiesOptional
.
isPresent
()
?
projectSummaryMapper
.
projectSummaryEntitiesToDomains
(
projectSummaryEntitiesOptional
.
get
())
:
new
ArrayList
<>();
}
@Override
public
ProjectSummary
updateProjectSummary
(
ProjectSummary
projectSummary
)
{
return
projectSummaryMapper
.
projectSummaryEntityToDomain
(
projectSummaryRepository
.
saveAndFlush
(
projectSummaryMapper
.
mapProjectSummaryDomainToEntity
(
projectSummary
)));
}
}
src/test/java/com/altimetrik/ApplicationTests.java
View file @
cbcdba25
package
com
.
altimetrik
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.test.context.SpringBootTest
;
@SpringBootTest
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment