diff --git a/bruno/propify/ProjectStatuses/Create new.bru b/bruno/propify/ProjectStatuses/Create new.bru
new file mode 100644
index 0000000..444294e
--- /dev/null
+++ b/bruno/propify/ProjectStatuses/Create new.bru
@@ -0,0 +1,31 @@
+meta {
+ name: Create new
+ type: http
+ seq: 3
+}
+
+post {
+ url: {{API_BASE_URL}}/api/{{API_VERSION}}/project-statuses
+ body: json
+ auth: bearer
+}
+
+auth:bearer {
+ token: {{BEARER_TOKEN}}
+}
+
+body:json {
+ {
+ "name": "Test Projekt 1",
+ "eventNumber": "123-456",
+ "description": "This is the first project",
+ "projectType": "energy_consulting_wg",
+ "status": "preparation",
+ "propertyId": "ff27cd1b-9eab-482c-8fd7-8093573efca2",
+ "amountRequested": "10000"
+ }
+}
+
+settings {
+ encodeUrl: true
+}
diff --git a/bruno/propify/ProjectStatuses/Delete one by ID.bru b/bruno/propify/ProjectStatuses/Delete one by ID.bru
new file mode 100644
index 0000000..0466a60
--- /dev/null
+++ b/bruno/propify/ProjectStatuses/Delete one by ID.bru
@@ -0,0 +1,31 @@
+meta {
+ name: Delete one by ID
+ type: http
+ seq: 4
+}
+
+delete {
+ url: API_BASE_URL}}/api/{{API_VERSION}}/project-statuses/...
+ body: json
+ auth: bearer
+}
+
+auth:bearer {
+ token: {{BEARER_TOKEN}}
+}
+
+body:json {
+ {
+ "name": "Mustername 1",
+ "street": "Musterstraße",
+ "houseNumber": "1",
+ "zipCode": "55123",
+ "city": "Musterstadt",
+ "country": "de",
+ "notes": "Lorem ipsum"
+ }
+}
+
+settings {
+ encodeUrl: true
+}
diff --git a/bruno/propify/ProjectStatuses/Get all.bru b/bruno/propify/ProjectStatuses/Get all.bru
new file mode 100644
index 0000000..9be5eea
--- /dev/null
+++ b/bruno/propify/ProjectStatuses/Get all.bru
@@ -0,0 +1,19 @@
+meta {
+ name: Get all
+ type: http
+ seq: 1
+}
+
+get {
+ url: {{API_BASE_URL}}/api/{{API_VERSION}}/project-statuses
+ body: none
+ auth: bearer
+}
+
+auth:bearer {
+ token: {{BEARER_TOKEN}}
+}
+
+settings {
+ encodeUrl: true
+}
diff --git a/bruno/propify/ProjectStatuses/Get one by ID.bru b/bruno/propify/ProjectStatuses/Get one by ID.bru
new file mode 100644
index 0000000..2a6cdda
--- /dev/null
+++ b/bruno/propify/ProjectStatuses/Get one by ID.bru
@@ -0,0 +1,19 @@
+meta {
+ name: Get one by ID
+ type: http
+ seq: 2
+}
+
+get {
+ url: {{API_BASE_URL}}/api/{{API_VERSION}}/project-statuses/...
+ body: none
+ auth: bearer
+}
+
+auth:bearer {
+ token: {{BEARER_TOKEN}}
+}
+
+settings {
+ encodeUrl: true
+}
diff --git a/bruno/propify/ProjectStatuses/folder.bru b/bruno/propify/ProjectStatuses/folder.bru
new file mode 100644
index 0000000..1dae466
--- /dev/null
+++ b/bruno/propify/ProjectStatuses/folder.bru
@@ -0,0 +1,8 @@
+meta {
+ name: ProjectStatuses
+ seq: 6
+}
+
+auth {
+ mode: inherit
+}
diff --git a/bruno/propify/ProjectTypes/Create new.bru b/bruno/propify/ProjectTypes/Create new.bru
new file mode 100644
index 0000000..12e7625
--- /dev/null
+++ b/bruno/propify/ProjectTypes/Create new.bru
@@ -0,0 +1,31 @@
+meta {
+ name: Create new
+ type: http
+ seq: 3
+}
+
+post {
+ url: {{API_BASE_URL}}/api/{{API_VERSION}}/project-types
+ body: json
+ auth: bearer
+}
+
+auth:bearer {
+ token: {{BEARER_TOKEN}}
+}
+
+body:json {
+ {
+ "name": "Test Projekt 1",
+ "eventNumber": "123-456",
+ "description": "This is the first project",
+ "projectType": "energy_consulting_wg",
+ "status": "preparation",
+ "propertyId": "ff27cd1b-9eab-482c-8fd7-8093573efca2",
+ "amountRequested": "10000"
+ }
+}
+
+settings {
+ encodeUrl: true
+}
diff --git a/bruno/propify/ProjectTypes/Delete one by ID.bru b/bruno/propify/ProjectTypes/Delete one by ID.bru
new file mode 100644
index 0000000..2adb96a
--- /dev/null
+++ b/bruno/propify/ProjectTypes/Delete one by ID.bru
@@ -0,0 +1,31 @@
+meta {
+ name: Delete one by ID
+ type: http
+ seq: 4
+}
+
+delete {
+ url: API_BASE_URL}}/api/{{API_VERSION}}/project-types/...
+ body: json
+ auth: bearer
+}
+
+auth:bearer {
+ token: {{BEARER_TOKEN}}
+}
+
+body:json {
+ {
+ "name": "Mustername 1",
+ "street": "Musterstraße",
+ "houseNumber": "1",
+ "zipCode": "55123",
+ "city": "Musterstadt",
+ "country": "de",
+ "notes": "Lorem ipsum"
+ }
+}
+
+settings {
+ encodeUrl: true
+}
diff --git a/bruno/propify/ProjectTypes/Get all.bru b/bruno/propify/ProjectTypes/Get all.bru
new file mode 100644
index 0000000..8f73361
--- /dev/null
+++ b/bruno/propify/ProjectTypes/Get all.bru
@@ -0,0 +1,19 @@
+meta {
+ name: Get all
+ type: http
+ seq: 1
+}
+
+get {
+ url: {{API_BASE_URL}}/api/{{API_VERSION}}/project-types
+ body: none
+ auth: bearer
+}
+
+auth:bearer {
+ token: {{BEARER_TOKEN}}
+}
+
+settings {
+ encodeUrl: true
+}
diff --git a/bruno/propify/ProjectTypes/Get one by ID.bru b/bruno/propify/ProjectTypes/Get one by ID.bru
new file mode 100644
index 0000000..e0dc63c
--- /dev/null
+++ b/bruno/propify/ProjectTypes/Get one by ID.bru
@@ -0,0 +1,19 @@
+meta {
+ name: Get one by ID
+ type: http
+ seq: 2
+}
+
+get {
+ url: {{API_BASE_URL}}/api/{{API_VERSION}}/project-types/...
+ body: none
+ auth: bearer
+}
+
+auth:bearer {
+ token: {{BEARER_TOKEN}}
+}
+
+settings {
+ encodeUrl: true
+}
diff --git a/bruno/propify/ProjectTypes/folder.bru b/bruno/propify/ProjectTypes/folder.bru
new file mode 100644
index 0000000..3fa568a
--- /dev/null
+++ b/bruno/propify/ProjectTypes/folder.bru
@@ -0,0 +1,8 @@
+meta {
+ name: ProjectTypes
+ seq: 5
+}
+
+auth {
+ mode: inherit
+}
diff --git a/pom.xml b/pom.xml
index 2a89485..6a87b03 100644
--- a/pom.xml
+++ b/pom.xml
@@ -98,6 +98,18 @@
compile
+
+ org.mapstruct
+ mapstruct
+ 1.6.0
+
+
+ org.mapstruct
+ mapstruct-processor
+ 1.6.0
+ provided
+
+
diff --git a/src/main/java/de/iwomm/propify_api/controller/ProjectController.java b/src/main/java/de/iwomm/propify_api/controller/ProjectController.java
index b9991a1..cccd9e6 100644
--- a/src/main/java/de/iwomm/propify_api/controller/ProjectController.java
+++ b/src/main/java/de/iwomm/propify_api/controller/ProjectController.java
@@ -5,7 +5,7 @@ import de.iwomm.propify_api.dto.ProjectDTO;
import de.iwomm.propify_api.dto.ProjectDetailsDTO;
import de.iwomm.propify_api.dto.ProjectStatsDTO;
import de.iwomm.propify_api.entity.Project;
-import de.iwomm.propify_api.mapper.ProjectMapper;
+import de.iwomm.propify_api.mapper.ProjectToDtoMapperImpl;
import de.iwomm.propify_api.service.ProjectService;
import jakarta.persistence.EntityNotFoundException;
import org.springframework.http.ResponseEntity;
@@ -21,11 +21,11 @@ import java.util.UUID;
@RequestMapping("/api/v1/projects")
public class ProjectController {
private final ProjectService projectService;
- private final ProjectMapper projectMapper;
+ private final ProjectToDtoMapperImpl projectToDtoMapper;
- public ProjectController(ProjectService projectService, ProjectMapper projectMapper) {
+ public ProjectController(ProjectService projectService, ProjectToDtoMapperImpl projectToDtoMapper) {
this.projectService = projectService;
- this.projectMapper = projectMapper;
+ this.projectToDtoMapper = projectToDtoMapper;
}
@GetMapping
@@ -42,7 +42,7 @@ public class ProjectController {
public ResponseEntity> getById(@PathVariable UUID id) {
try {
Project project = projectService.findById(id).orElseThrow(EntityNotFoundException::new);
- ProjectDetailsDTO projectDTO = this.projectMapper.projectToProjectDetailsDTO(project);
+ ProjectDetailsDTO projectDTO = this.projectToDtoMapper.projectToProjectDetailsDto(project); // this.projectMapper.projectToProjectDetailsDTO(project);
return ResponseEntity
.ok(projectDTO);
diff --git a/src/main/java/de/iwomm/propify_api/dto/ProjectTimelineEventDTO.java b/src/main/java/de/iwomm/propify_api/dto/ProjectTimelineEventDTO.java
index 1b39408..b17d7c4 100644
--- a/src/main/java/de/iwomm/propify_api/dto/ProjectTimelineEventDTO.java
+++ b/src/main/java/de/iwomm/propify_api/dto/ProjectTimelineEventDTO.java
@@ -6,7 +6,7 @@ import java.util.UUID;
public record ProjectTimelineEventDTO(
UUID id,
- ProjectTimelineEventTypeDTO projectEventType,
+ ProjectTimelineEventTypeDTO timelineEventType,
String title,
LocalDateTime date,
String description,
diff --git a/src/main/java/de/iwomm/propify_api/entity/ProjectTimelineEvent.java b/src/main/java/de/iwomm/propify_api/entity/ProjectTimelineEvent.java
index ad12c35..8e20141 100644
--- a/src/main/java/de/iwomm/propify_api/entity/ProjectTimelineEvent.java
+++ b/src/main/java/de/iwomm/propify_api/entity/ProjectTimelineEvent.java
@@ -21,7 +21,7 @@ public class ProjectTimelineEvent {
@ManyToOne
@JoinColumn(name = "project_timeline_event_type_id")
- ProjectTimelineEventType projectTimelineEventType;
+ ProjectTimelineEventType timelineEventType;
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "project_id", nullable = false)
@@ -43,22 +43,22 @@ public class ProjectTimelineEvent {
String title,
LocalDateTime date,
String description,
- ProjectTimelineEventType projectTimelineEventType,
+ ProjectTimelineEventType timelineEventType,
List documents
) {
this.title = title;
this.date = date;
this.description = description;
- this.projectTimelineEventType = projectTimelineEventType;
+ this.timelineEventType = timelineEventType;
this.documents = documents;
}
- public ProjectTimelineEventType getProjectTimelineEventType() {
- return projectTimelineEventType;
+ public ProjectTimelineEventType getTimelineEventType() {
+ return timelineEventType;
}
- public void setProjectTimelineEventType(ProjectTimelineEventType projectTimelineEventType) {
- this.projectTimelineEventType = projectTimelineEventType;
+ public void setTimelineEventType(ProjectTimelineEventType projectTimelineEventType) {
+ this.timelineEventType = projectTimelineEventType;
}
public void setProject(Project project) {
diff --git a/src/main/java/de/iwomm/propify_api/entity/ProjectType.java b/src/main/java/de/iwomm/propify_api/entity/ProjectType.java
index f5eeeb2..a588aaf 100644
--- a/src/main/java/de/iwomm/propify_api/entity/ProjectType.java
+++ b/src/main/java/de/iwomm/propify_api/entity/ProjectType.java
@@ -12,8 +12,10 @@ public class ProjectType {
@Column(nullable = false)
private UUID id;
+ @Column(nullable = false)
private String name;
+ @Column(nullable = false)
private int sortOrder;
public ProjectType() {
diff --git a/src/main/java/de/iwomm/propify_api/entity/Property.java b/src/main/java/de/iwomm/propify_api/entity/Property.java
index f960f6b..41140da 100644
--- a/src/main/java/de/iwomm/propify_api/entity/Property.java
+++ b/src/main/java/de/iwomm/propify_api/entity/Property.java
@@ -219,4 +219,8 @@ public class Property {
public void setFederalState(FederalState federalState) {
this.federalState = federalState;
}
+
+ public String getAddress() {
+ return this.street + " " + this.houseNumber + ", " + this.zipCode + " " + this.city;
+ }
}
diff --git a/src/main/java/de/iwomm/propify_api/mapper/ProjectMapper.java b/src/main/java/de/iwomm/propify_api/mapper/ProjectMapper.java
deleted file mode 100644
index 8977078..0000000
--- a/src/main/java/de/iwomm/propify_api/mapper/ProjectMapper.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package de.iwomm.propify_api.mapper;
-
-import de.iwomm.propify_api.dto.ProjectDetailsDTO;
-import de.iwomm.propify_api.dto.ProjectTimelineEventDTO;
-import de.iwomm.propify_api.entity.Project;
-import de.iwomm.propify_api.entity.Property;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@Service
-public class ProjectMapper {
-
- private final TimelineEventMapper timelineEventMapper;
-
- public ProjectMapper(TimelineEventMapper timelineEventMapper) {
- this.timelineEventMapper = timelineEventMapper;
- }
-
- /**
- * Maps Project -> ProjectDetailsDTO
- */
- public ProjectDetailsDTO projectToProjectDetailsDTO(Project project) {
- Property property = project.getProperty();
- String address = property.getStreet() + " " + property.getHouseNumber() + ", "
- + property.getZipCode() + " " + property.getCity();
-
- List timelineEvents = this.timelineEventMapper.projectTimelineEventToDTO(project.getTimelineEvents());
-
- ProjectDetailsDTO projectDetailsDTO = new ProjectDetailsDTO(
- project.getId(),
- project.getName(),
- project.getEventNumber(),
- project.getProjectStatus().getName(),
- project.getProjectType().getName(),
- project.getDescription(),
- project.getAmountRequested(),
- address,
- project.getStartDate(),
- project.getEndDate(),
- timelineEvents
- );
-
- return projectDetailsDTO;
- }
-}
diff --git a/src/main/java/de/iwomm/propify_api/mapper/ProjectTimelineEventToDtoMapper.java b/src/main/java/de/iwomm/propify_api/mapper/ProjectTimelineEventToDtoMapper.java
new file mode 100644
index 0000000..74b0226
--- /dev/null
+++ b/src/main/java/de/iwomm/propify_api/mapper/ProjectTimelineEventToDtoMapper.java
@@ -0,0 +1,15 @@
+package de.iwomm.propify_api.mapper;
+
+import de.iwomm.propify_api.dto.ProjectTimelineEventDTO;
+import de.iwomm.propify_api.entity.ProjectTimelineEvent;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+
+import java.util.List;
+
+@Mapper(componentModel = "spring", uses = { ProjectTimelineEventTypeDtoMapper.class })
+public interface ProjectTimelineEventToDtoMapper {
+ ProjectTimelineEventDTO toDto(ProjectTimelineEvent entity);
+
+ List toDtoList(List entities);
+}
diff --git a/src/main/java/de/iwomm/propify_api/mapper/ProjectTimelineEventTypeDtoMapper.java b/src/main/java/de/iwomm/propify_api/mapper/ProjectTimelineEventTypeDtoMapper.java
new file mode 100644
index 0000000..12dbb76
--- /dev/null
+++ b/src/main/java/de/iwomm/propify_api/mapper/ProjectTimelineEventTypeDtoMapper.java
@@ -0,0 +1,10 @@
+package de.iwomm.propify_api.mapper;
+
+import de.iwomm.propify_api.dto.ProjectTimelineEventTypeDTO;
+import de.iwomm.propify_api.entity.ProjectTimelineEventType;
+import org.mapstruct.Mapper;
+
+@Mapper(componentModel = "spring")
+public interface ProjectTimelineEventTypeDtoMapper {
+ ProjectTimelineEventTypeDTO toDto(ProjectTimelineEventType entity);
+}
\ No newline at end of file
diff --git a/src/main/java/de/iwomm/propify_api/mapper/ProjectToDtoMapper.java b/src/main/java/de/iwomm/propify_api/mapper/ProjectToDtoMapper.java
new file mode 100644
index 0000000..001d434
--- /dev/null
+++ b/src/main/java/de/iwomm/propify_api/mapper/ProjectToDtoMapper.java
@@ -0,0 +1,16 @@
+package de.iwomm.propify_api.mapper;
+
+import de.iwomm.propify_api.dto.ProjectDetailsDTO;
+import de.iwomm.propify_api.entity.Project;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+
+@Mapper(componentModel = "spring", uses = { ProjectTimelineEventToDtoMapper.class })
+public abstract class ProjectToDtoMapper {
+
+ @Mapping(target = "status", source = "projectStatus.name") // angenommen ProjectStatus hat getName()
+ @Mapping(target = "projectType", source = "projectType.name") // angenommen ProjectType hat getName()
+ @Mapping(target = "address", source = "property.address") // angenommen Property hat getAddress()
+ public abstract ProjectDetailsDTO projectToProjectDetailsDto(Project project);
+
+}
diff --git a/src/main/java/de/iwomm/propify_api/mapper/TimelineEventMapper.java b/src/main/java/de/iwomm/propify_api/mapper/TimelineEventMapper.java
deleted file mode 100644
index c7ab3d5..0000000
--- a/src/main/java/de/iwomm/propify_api/mapper/TimelineEventMapper.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package de.iwomm.propify_api.mapper;
-
-import de.iwomm.propify_api.dto.ProjectTimelineEventDTO;
-import de.iwomm.propify_api.dto.ProjectTimelineEventTypeDTO;
-import de.iwomm.propify_api.entity.ProjectTimelineEvent;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-@Service
-public class TimelineEventMapper {
-
- private final TimelineEventTypeMapper timelineEventTypeMapper;
-
- public TimelineEventMapper(TimelineEventTypeMapper timelineEventTypeMapper) {
- this.timelineEventTypeMapper = timelineEventTypeMapper;
- }
-
- /**
- * Maps List -> List
- */
- public List projectTimelineEventToDTO(List timelineEvents) {
- List timelineEventDTOs = new ArrayList<>();
-
- timelineEvents.forEach(timelineEvent -> {
- timelineEventDTOs.add(this.projectTimelineEventToDTO(timelineEvent));
- });
-
- return timelineEventDTOs;
- }
-
- /**
- * Maps ProjectTimelineEvent -> ProjectTimelineEventDTO
- */
- public ProjectTimelineEventDTO projectTimelineEventToDTO(ProjectTimelineEvent projectTimelineEvent) {
- return new ProjectTimelineEventDTO(
- projectTimelineEvent.getId(),
- this.timelineEventTypeMapper.projectTimelineEventTypeToDTO(projectTimelineEvent.getProjectTimelineEventType()),
- projectTimelineEvent.getTitle(),
- projectTimelineEvent.getDate(),
- projectTimelineEvent.getDescription(),
- projectTimelineEvent.getDocuments()
- );
- }
-}
diff --git a/src/main/java/de/iwomm/propify_api/mapper/TimelineEventTypeMapper.java b/src/main/java/de/iwomm/propify_api/mapper/TimelineEventTypeMapper.java
deleted file mode 100644
index b5b284e..0000000
--- a/src/main/java/de/iwomm/propify_api/mapper/TimelineEventTypeMapper.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package de.iwomm.propify_api.mapper;
-
-import de.iwomm.propify_api.dto.ProjectTimelineEventTypeDTO;
-import de.iwomm.propify_api.entity.ProjectTimelineEventType;
-import org.springframework.stereotype.Service;
-
-@Service
-public class TimelineEventTypeMapper {
-
- /**
- * Maps ProjectTimelineEventType -> ProjectTimelineEventTypeDTO
- */
- public ProjectTimelineEventTypeDTO projectTimelineEventTypeToDTO(ProjectTimelineEventType projectTimelineEventType) {
- return new ProjectTimelineEventTypeDTO(
- projectTimelineEventType.getId(),
- projectTimelineEventType.getName(),
- projectTimelineEventType.getColor(),
- projectTimelineEventType.getIcon()
- );
- }
-
-}