Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AYS-224 | Emergency Evacuation Application Update #341

Merged
merged 28 commits into from
Jul 17, 2024
Merged
Show file tree
Hide file tree
Changes from 27 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
69d58e0
AYS-224 EmergencyEvacuationApplicationController.java -> update metho…
Jul 9, 2024
bfab3cd
AYS-224 EmergencyEvacuationApplicationServiceImpl.java, EmergencyEvac…
Jul 9, 2024
29fea60
AYS-224 CREATE EmergencyEvacuationApplicationUpdateRequest.java
Jul 9, 2024
8bf8171
AYS-224 EmergencyEvacuationApplicationToEntityMapper.java -> Refactor…
Jul 9, 2024
5b143be
AYS-224 EmergencyEvacuationApplicationEntity.java -> Rename instituti…
Jul 9, 2024
83755d4
AYS-224 EmergencyEvacuationApplicationUpdateRequest.java -> Remove un…
moaydogdu Jul 9, 2024
9b1e42c
AYS-224 EmergencyEvacuationApplicationUpdateRequestBuilder.java created
cengzayhn Jul 14, 2024
18b0f0c
AYS-224 EmergencyEvacuationApplicationUpdateRequest.java -> setter ad…
cengzayhn Jul 14, 2024
5dbc470
AYS-224 EmergencyEvacuationApplicationServiceImplTest.java -> Tests f…
cengzayhn Jul 14, 2024
0d0e40d
AYS-224 EmergencyEvacuationApplicationControllerTest.java.java -> Tes…
cengzayhn Jul 14, 2024
5c278f5
Merge remote-tracking branch 'origin/main' into feature/AYS-224/emerg…
agitrubard Jul 14, 2024
b0459f4
AYS-224 | `EmergencyEvacuationApplicationServiceImpl.update()` Method…
agitrubard Jul 14, 2024
037eef9
AYS-224 | `EmergencyEvacuationApplicationServiceImpl.update()` Method…
agitrubard Jul 14, 2024
6ccfe97
AYS-224 | `EmergencyEvacuationApplicationServiceImplTest` Class Has B…
agitrubard Jul 14, 2024
83e3c58
AYS-224 | Emergency Evacuation Application Update Endpoint Has Been R…
agitrubard Jul 14, 2024
45fcd4f
AYS-224 | Permission of Emergency Evacuation Application Update Endpo…
agitrubard Jul 14, 2024
f0329cb
AYS-224 | Tests of Emergency Evacuation Application Update Endpoint H…
agitrubard Jul 14, 2024
de43fb6
AYS-224 | `givenValidIdAndUpdateRequest_whenApplicationUpdated_thenRe…
agitrubard Jul 14, 2024
c053566
AYS-224 | Validation of Emergency Evacuation Application ID Has Been …
agitrubard Jul 14, 2024
ac675ed
AYS-224 | Emergency Evacuation Application Update Flow Has Been Cover…
agitrubard Jul 14, 2024
ba0f410
AYS-224 Javadoc has been added into EmergencyEvacuationApplicationCon…
cengzayhn Jul 14, 2024
48fe925
AYS-224 Javadoc has been added into EmergencyEvacuationApplicationSer…
cengzayhn Jul 14, 2024
59e7e87
AYS-224 Javadoc has been added into EmergencyEvacuationApplicationUpd…
cengzayhn Jul 14, 2024
4184eb8
AYS-224 | EmergencyEvacuationApplicationUpdateRequestToDomainMapper.j…
cengzayhn Jul 15, 2024
687737b
AYS-224 | EmergencyEvacuationApplicationUpdateRequestToDomainMapper.j…
cengzayhn Jul 15, 2024
b6405c3
AYS-224 | EmergencyEvacuationApplicationUpdateRequestToDomainMapper i…
cengzayhn Jul 15, 2024
cb807cd
AYS-224 | Unused Method Has Been Removed
agitrubard Jul 17, 2024
d369a3e
AYS-224 | Unused Mapper Has Been Removed
agitrubard Jul 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.ays.emergency_application.model.mapper.EmergencyEvacuationApplicationToApplicationsResponseMapper;
import org.ays.emergency_application.model.request.EmergencyEvacuationApplicationListRequest;
import org.ays.emergency_application.model.request.EmergencyEvacuationApplicationRequest;
import org.ays.emergency_application.model.request.EmergencyEvacuationApplicationUpdateRequest;
import org.ays.emergency_application.model.response.EmergencyEvacuationApplicationResponse;
import org.ays.emergency_application.model.response.EmergencyEvacuationApplicationsResponse;
import org.ays.emergency_application.service.EmergencyEvacuationApplicationService;
Expand All @@ -19,6 +20,7 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
Expand Down Expand Up @@ -89,4 +91,27 @@ public AysResponse<Void> create(@RequestBody @Valid EmergencyEvacuationApplicati
return AysResponse.SUCCESS;
}


/**
* Updates an existing Emergency Evacuation Application.
* This method accepts a PUT request
* <p>
* This endpoint updates the Emergency Evacuation Application with the specified ID using the provided update request.
* The request body and path variable validated before processing.
* The user must have the authority 'application:evacuation:update' to access this endpoint.
* </p>
*
* @param id the unique identifier of the Emergency Evacuation Application to be updated
* @param updateRequest the request object containing the details to update the Emergency Evacuation Application
* @return a response indicating the success of the update operation
*/
@PutMapping("/emergency-evacuation-application/{id}")
@PreAuthorize("hasAuthority('application:evacuation:update')")
public AysResponse<Void> update(@PathVariable @UUID final String id,
@RequestBody @Valid final EmergencyEvacuationApplicationUpdateRequest updateRequest) {

emergencyEvacuationApplicationService.update(id, updateRequest);
return AysResponse.SUCCESS;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import org.ays.common.model.entity.BaseEntity;
import org.ays.institution.model.entity.InstitutionEntity;

Expand All @@ -25,7 +25,7 @@
@Entity
@Getter
@Setter
@Builder
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "AYS_EMERGENCY_EVACUATION_APPLICATION")
Expand Down Expand Up @@ -100,6 +100,6 @@ public class EmergencyEvacuationApplicationEntity extends BaseEntity {

@OneToOne
@JoinColumn(name = "INSTITUTION_ID", insertable = false, updatable = false)
private InstitutionEntity institutionEntity;
private InstitutionEntity institution;

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public interface EmergencyEvacuationApplicationToEntityMapper extends BaseMapper
@Mapping(target = "lineNumber", source = "phoneNumber.lineNumber")
@Mapping(target = "applicantCountryCode", source = "applicantPhoneNumber.countryCode")
@Mapping(target = "applicantLineNumber", source = "applicantPhoneNumber.lineNumber")
@Mapping(target = "institutionId", source = "institution.id")
EmergencyEvacuationApplicationEntity map(EmergencyEvacuationApplication application);

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.ays.emergency_application.model.mapper;

import org.ays.common.model.mapper.BaseMapper;
import org.ays.emergency_application.model.EmergencyEvacuationApplication;
import org.ays.emergency_application.model.request.EmergencyEvacuationApplicationUpdateRequest;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

/**
* {@link EmergencyEvacuationApplicationUpdateRequestToDomainMapper} is an interface that defines the
* mapping between an {@link EmergencyEvacuationApplicationUpdateRequest} and an {@link EmergencyEvacuationApplication}.
* This interface uses the MapStruct annotation @Mapper to generate an implementation of this interface at compile-time.
* <p>The class provides a static method {@code initialize()} that returns an instance of the generated mapper implementation.
* <p>The interface extends the MapStruct interface {@link BaseMapper}, which defines basic mapping methods.
* The interface adds no additional mapping methods, but simply defines the types to be used in the mapping process.
*/
@Mapper
public interface EmergencyEvacuationApplicationUpdateRequestToDomainMapper extends BaseMapper<EmergencyEvacuationApplicationUpdateRequest, EmergencyEvacuationApplication> {

/**
* Initializes the mapper.
*
* @return the initialized mapper object.
*/
static EmergencyEvacuationApplicationUpdateRequestToDomainMapper initialize() {
return Mappers.getMapper(EmergencyEvacuationApplicationUpdateRequestToDomainMapper.class);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.ays.emergency_application.model.request;

import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;
import org.ays.emergency_application.model.entity.EmergencyEvacuationApplicationStatus;
import org.hibernate.validator.constraints.Range;

/**
* A request object for updating an Emergency Evacuation Application.
* <p>
* This class contains the details necessary for updating an existing
* Emergency Evacuation Application.
* </p>
*/
@Getter
@Setter
public class EmergencyEvacuationApplicationUpdateRequest {

/**
* The number of seats available.
* Must be between 1 and 999.
*/
@NotNull
@Range(min = 1, max = 999)
private Integer seatingCount;

/**
* Indicates if there is a person with obstacles present.
*/
@NotNull
private Boolean hasObstaclePersonExist;

/**
* The current status of the Emergency Evacuation Application.
*/
@NotNull
private EmergencyEvacuationApplicationStatus status;

/**
* Additional notes regarding the application.
* The notes can have a maximum length of 1000 characters.
*/
@Size(max = 1000)
private String notes;

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.ays.emergency_application.model.EmergencyEvacuationApplication;
import org.ays.emergency_application.model.request.EmergencyEvacuationApplicationListRequest;
import org.ays.emergency_application.model.request.EmergencyEvacuationApplicationRequest;
import org.ays.emergency_application.model.request.EmergencyEvacuationApplicationUpdateRequest;

/**
* Emergency evacuation application service to perform emergency evacuation related operations
Expand Down Expand Up @@ -32,4 +33,10 @@ public interface EmergencyEvacuationApplicationService {
* @return The emergency evacuation application with the specified ID, or null if not found.
*/
EmergencyEvacuationApplication findById(String id);

// TODO : Add javadoc
void update(
String id,
EmergencyEvacuationApplicationUpdateRequest updateRequest
);
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
package org.ays.emergency_application.service.impl;

import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.ays.auth.model.AysIdentity;
import org.ays.common.model.AysPage;
import org.ays.common.model.AysPageable;
import org.ays.emergency_application.model.EmergencyEvacuationApplication;
import org.ays.emergency_application.model.filter.EmergencyEvacuationApplicationFilter;
import org.ays.emergency_application.model.mapper.EmergencyEvacuationApplicationRequestToDomainMapper;
import org.ays.emergency_application.model.mapper.EmergencyEvacuationApplicationUpdateRequestToDomainMapper;
import org.ays.emergency_application.model.request.EmergencyEvacuationApplicationListRequest;
import org.ays.emergency_application.model.request.EmergencyEvacuationApplicationRequest;
import org.ays.emergency_application.model.request.EmergencyEvacuationApplicationUpdateRequest;
import org.ays.emergency_application.port.EmergencyEvacuationApplicationReadPort;
import org.ays.emergency_application.port.EmergencyEvacuationApplicationSavePort;
import org.ays.emergency_application.service.EmergencyEvacuationApplicationService;
import org.ays.emergency_application.util.exception.EmergencyEvacuationApplicationNotExistException;
import org.ays.institution.model.Institution;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Optional;

/**
* This class implements the interface {@link EmergencyEvacuationApplicationService}
* It is annotated with {@code @Service} to indicate that it is a service component in the application.
Expand All @@ -28,9 +34,11 @@ class EmergencyEvacuationApplicationServiceImpl implements EmergencyEvacuationAp

private final EmergencyEvacuationApplicationReadPort emergencyEvacuationApplicationReadPort;
private final EmergencyEvacuationApplicationSavePort emergencyEvacuationApplicationSavePort;
private final AysIdentity identity;

private final EmergencyEvacuationApplicationUpdateRequestToDomainMapper applicationUpdateRequestToDomainMapper =
EmergencyEvacuationApplicationUpdateRequestToDomainMapper.initialize();

private final EmergencyEvacuationApplicationRequestToDomainMapper emergencyEvacuationApplicationRequestToDomainMapper = EmergencyEvacuationApplicationRequestToDomainMapper.initialize();

/**
* Retrieves a page of emergency evacuation applications based on the provided request parameters.
Expand Down Expand Up @@ -70,12 +78,44 @@ public EmergencyEvacuationApplication findById(final String id) {
@Transactional
public void create(final EmergencyEvacuationApplicationRequest emergencyEvacuationApplicationRequest) {

EmergencyEvacuationApplication application = emergencyEvacuationApplicationRequestToDomainMapper
EmergencyEvacuationApplication application = applicationUpdateRequestToDomainMapper
.map(emergencyEvacuationApplicationRequest);

application.pending();

emergencyEvacuationApplicationSavePort.save(application);
}

/**
* Updates an existing Emergency Evacuation Application with the provided details
*
* @param id the unique identifier of the Emergency Evacuation Application to be updated
* @param updateRequest the request object containing the details to update the Emergency Evacuation Application
* @throws EmergencyEvacuationApplicationNotExistException if the application with the specified ID does not exist
*/
@Override
@Transactional
public void update(final String id,
final EmergencyEvacuationApplicationUpdateRequest updateRequest) {

final EmergencyEvacuationApplication emergencyEvacuationApplication = emergencyEvacuationApplicationReadPort
.findById(id)
.orElseThrow(() -> new EmergencyEvacuationApplicationNotExistException(id));

emergencyEvacuationApplication.setInstitution(
Institution.builder()
.id(identity.getInstitutionId())
.build()
);
emergencyEvacuationApplication.setSeatingCount(updateRequest.getSeatingCount());
emergencyEvacuationApplication.setHasObstaclePersonExist(updateRequest.getHasObstaclePersonExist());
emergencyEvacuationApplication.setStatus(updateRequest.getStatus());

Optional.ofNullable(updateRequest.getNotes())
.filter(StringUtils::isNotBlank)
.ifPresent(emergencyEvacuationApplication::setNotes);

emergencyEvacuationApplicationSavePort.save(emergencyEvacuationApplication);
}

}
Loading
Loading