diff --git a/src/main/java/ru/nbch/credit_tracker/controller/SignalController.java b/src/main/java/ru/nbch/credit_tracker/controller/SignalController.java index e421748..77853a2 100644 --- a/src/main/java/ru/nbch/credit_tracker/controller/SignalController.java +++ b/src/main/java/ru/nbch/credit_tracker/controller/SignalController.java @@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import ru.nbch.credit_tracker.entities.request.active_packages.MonitoringActivePackagesRequest; import ru.nbch.credit_tracker.entities.response.active_packages.MonitoringActivePackagesResponse; +import ru.nbch.credit_tracker.entities.response.success.MonitoringPackageDeleteResponse; import ru.nbch.credit_tracker.facade.SignalFacade; @RestController @@ -24,10 +25,15 @@ public class SignalController { return signalFacade.setupMonitoring(file); } - @PostMapping(value = "active_packages", consumes = MediaType.APPLICATION_XML_VALUE, produces = MediaType.APPLICATION_XML_VALUE) + @PostMapping(value = "/active_packages", consumes = MediaType.APPLICATION_XML_VALUE, produces = MediaType.APPLICATION_XML_VALUE) public ResponseEntity findActivePackages(@RequestBody MonitoringActivePackagesRequest activePackagesRequest) { return signalFacade.findActivePackages(activePackagesRequest); } + @PostMapping(value = "/delete", params = {"username", "packageName"}, produces = MediaType.APPLICATION_XML_VALUE) + public ResponseEntity deletePackage(@RequestParam("username") String username, @RequestParam("packageName") String packageName) { + return signalFacade.deletePackage(username, packageName); + } + } diff --git a/src/main/java/ru/nbch/credit_tracker/entities/response/errors/MonitoringPackageDeleteError.java b/src/main/java/ru/nbch/credit_tracker/entities/response/errors/MonitoringPackageDeleteError.java new file mode 100644 index 0000000..21be161 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/entities/response/errors/MonitoringPackageDeleteError.java @@ -0,0 +1,25 @@ +package ru.nbch.credit_tracker.entities.response.errors; + +import jakarta.xml.bind.annotation.*; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "MonitoringPackageDeleteResponse", propOrder = { + "status", + "errorCode", + "errorText" +}) +@XmlRootElement(name = "MonitoringPackageDeleteResponse") +public class MonitoringPackageDeleteError implements CommonError { + + @XmlElement(name = "Status", required = true) + protected String status; + @XmlElement(name = "ErrorCode",required = true) + protected String errorCode; + @XmlElement(name = "ErrorText",required = true) + protected String errorText; + +} diff --git a/src/main/java/ru/nbch/credit_tracker/entities/response/success/MonitoringPackageDeleteResponse.java b/src/main/java/ru/nbch/credit_tracker/entities/response/success/MonitoringPackageDeleteResponse.java new file mode 100644 index 0000000..3dab92e --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/entities/response/success/MonitoringPackageDeleteResponse.java @@ -0,0 +1,24 @@ +package ru.nbch.credit_tracker.entities.response.success; + +import jakarta.xml.bind.annotation.*; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "MonitoringPackageDeleteResponse", propOrder = { + "packageName", + "status", + "deactivatedAt" +}) +@XmlRootElement(name = "MonitoringPackageDeleteResponse") +public class MonitoringPackageDeleteResponse { + + @XmlElement(name = "PackageName", required = true) + protected String packageName; + @XmlElement(name = "Status", required = true) + protected String status; + @XmlElement(name = "deactivated_at", required = true) + protected String deactivatedAt; +} diff --git a/src/main/java/ru/nbch/credit_tracker/enums/SignalError.java b/src/main/java/ru/nbch/credit_tracker/enums/SignalError.java index d9f129e..170e0ba 100644 --- a/src/main/java/ru/nbch/credit_tracker/enums/SignalError.java +++ b/src/main/java/ru/nbch/credit_tracker/enums/SignalError.java @@ -18,6 +18,8 @@ public enum SignalError { ERROR_013("013", "На стороне сервиса произошла ошибка, попробуйте повторить запрос позже или сообщите в техническую поддержку"), ERROR_015("015", "Клиент с указанным membercode не найден"), + ERROR_016("016", "Нет активного пакета с именем "), + ERROR_017("017", "При обработке запроса произошла ошибка. Повторите запрос позже или обратитесь в службу технической поддержки"), // TODO get rid of duplicate? ERROR_100("100", "Непредвиденная ошибка"); diff --git a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java index 846a8aa..a985ff7 100644 --- a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java +++ b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java @@ -12,6 +12,8 @@ import ru.nbch.credit_tracker.entities.request.monitoring_request.MonitoringRequ import ru.nbch.credit_tracker.entities.request.monitoring_request.Subject; import ru.nbch.credit_tracker.entities.response.active_packages.MonitoringActivePackagesResponse; import ru.nbch.credit_tracker.entities.response.errors.MonitoringActivePackagesError; +import ru.nbch.credit_tracker.entities.response.errors.MonitoringPackageDeleteError; +import ru.nbch.credit_tracker.entities.response.success.MonitoringPackageDeleteResponse; import ru.nbch.credit_tracker.entities.response.success.MonitoringResponse; import ru.nbch.credit_tracker.entities.signal_package.Signals; import ru.nbch.credit_tracker.enums.SignalError; @@ -280,4 +282,20 @@ public class SignalFacade { throw new SignalErrorException(SignalError.ERROR_013, null, new MonitoringActivePackagesError(), false); } } + + public ResponseEntity deletePackage(String username, String packageName) { + try { + if(!signalService.isPackageExists(username, packageName)) { + throw new SignalErrorException(SignalError.ERROR_016, packageName, new MonitoringPackageDeleteError(), true); + } + MonitoringPackageDeleteResponse response = signalService.deletePackage(username, packageName); + return ResponseEntity.ok(response); + } catch (Exception e) { + if (e instanceof SignalErrorException) { + throw (SignalErrorException) e; + } + log.error(e.getMessage(), e); + throw new SignalErrorException(SignalError.ERROR_017, null, new MonitoringPackageDeleteError(), false); + } + } } diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/signal/SignalMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/signal/SignalMapper.java index b5a5c3e..7d3b987 100644 --- a/src/main/java/ru/nbch/credit_tracker/mapper/signal/SignalMapper.java +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/SignalMapper.java @@ -14,6 +14,10 @@ public interface SignalMapper { boolean isPackageNotUnique(@Param("userId") String userId, @Param("packageName") String packageName); + boolean isPackageExists(@Param("userId") String userId, @Param("packageName") String packageName, @Param("status") String status); + + void deletePackage(@Param("userId") String userId, @Param("packageName") String packageName, @Param("status") String newStatus, @Param("previousStatus") String previousStatus, @Param("deactivatedAt") LocalDateTime deactivatedAt); + Integer registerPackage(@Param("request") MonitoringRequest request, @Param("creadedAt") LocalDateTime creadedAt, @Param("status") String status); void registerSubjects(@Param("subjects") List subjects, @Param("packageId") Integer packageId); @@ -28,5 +32,5 @@ public interface SignalMapper { SignalService.PackageData findPackageData(@Param("id") Integer id); - List findPackageDataList(@Param("userId") String userId); + List findPackageDataList(@Param("userId") String userId); } diff --git a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java index 82b7ff8..5bbc11f 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java @@ -9,6 +9,7 @@ import ru.nbch.credit_tracker.entities.request.monitoring_request.MonitoringRequ import ru.nbch.credit_tracker.entities.response.active_packages.MonitoringActivePackagesResponse; import ru.nbch.credit_tracker.entities.response.active_packages.Package; import ru.nbch.credit_tracker.entities.response.active_packages.Packages; +import ru.nbch.credit_tracker.entities.response.success.MonitoringPackageDeleteResponse; import ru.nbch.credit_tracker.entities.signal_package.Auth; import ru.nbch.credit_tracker.entities.signal_package.Person; import ru.nbch.credit_tracker.entities.signal_package.Signals; @@ -180,6 +181,21 @@ public class SignalService { return activePackages; } + public boolean isPackageExists(String username, String packageName) { + return mapper.isPackageExists(username.substring(0, 6), packageName, Status.ON_MONITORING.name()); + } + + public MonitoringPackageDeleteResponse deletePackage(String username, String packageName) { + LocalDateTime deactivatedAt = LocalDateTime.now(); + mapper.deletePackage(username.substring(0, 6), packageName, Status.DELETED.name(), Status.ON_MONITORING.name(), deactivatedAt); + + MonitoringPackageDeleteResponse deleteResponse = new MonitoringPackageDeleteResponse(); + deleteResponse.setStatus("Deleted"); + deleteResponse.setPackageName(packageName); + deleteResponse.setDeactivatedAt(deactivatedAt.toString()); + return deleteResponse; + } + @Getter @Setter public static class PackageData { diff --git a/src/main/resources/mybatis/mapper/signal/SignalMapper.xml b/src/main/resources/mybatis/mapper/signal/SignalMapper.xml index 5b5cf6c..b74d0f6 100644 --- a/src/main/resources/mybatis/mapper/signal/SignalMapper.xml +++ b/src/main/resources/mybatis/mapper/signal/SignalMapper.xml @@ -23,6 +23,18 @@ WHERE membercode IS NOT NULL AND LEFT(membercode, 6) = #{userId} AND package_name = #{packageName} + + + + UPDATE signals_user_packages + SET status = #{status}, deactivated_at = #{deactivatedAt} + WHERE membercode IS NOT NULL AND LEFT(membercode, 6) = #{userId} AND package_name = #{packageName} AND status = #{previousStatus} + +