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() - ); - } - -}