[
  {
    "path": "Customer/.gitignore",
    "content": "HELP.md\ntarget/\n!.mvn/wrapper/maven-wrapper.jar\n!**/src/main/**\n!**/src/test/**\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\n\n### NetBeans ###\n/nbproject/private/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/\nbuild/\n\n### VS Code ###\n.vscode/\n"
  },
  {
    "path": "Customer/README.md",
    "content": "# Customer Microservice\n\nExample of Customer Microservice applying Hexagonal Architecture pattern, Domain Driven Design (DDD) and SOLID principles.\n\nThis example was implemented with Spring Boot, MongoDB Atlas. The microservices are deployed locally and the DB in the cloud.\n\n## MongoDB Atlas\n- Signup free at https://www.mongodb.com/cloud/atlas/signup \n- Create DATABASE and COLLECTION (Optional)\n- Create Database User\n- Add your IP Address (public) in IP Whitelist, Network Access\n\n![Screenshot](prtsc/Customer-1.png)\n\n![Screenshot](prtsc/Customer-1.1.png)\n\n## Configure your application.properties\n\n![Screenshot](prtsc/Customer-2.png)\n\n## Create Customer\n\n**Postman**\n\n![Screenshot](prtsc/Customer-3.png)\n\n![Screenshot](prtsc/Customer-3.1.png)\n\n![Screenshot](prtsc/Customer-3.2.png)\n\n**MongoDB Atlas**\n\n![Screenshot](prtsc/Customer-3.3.png)\n\n## Customer Login\n\n**Postman**\n\n![Screenshot](prtsc/Customer-4.png)\n\n\n"
  },
  {
    "path": "Customer/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <parent>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-parent</artifactId>\n        <version>2.3.0.RELEASE</version>\n        <relativePath/> <!-- lookup parent from repository -->\n    </parent>\n    <groupId>com.jmendoza.swa.hexagonal</groupId>\n    <artifactId>customer</artifactId>\n    <version>1.0</version>\n    <name>customer</name>\n    <description>Example of Hexagonal Architecture - Customers</description>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n            <exclusions>\n                <exclusion>\n                    <groupId>org.springframework.boot</groupId>\n                    <artifactId>spring-boot-starter-logging</artifactId>\n                </exclusion>\n                <exclusion>\n                    <groupId>org.springframework.boot</groupId>\n                    <artifactId>spring-boot-starter-log4j</artifactId>\n                </exclusion>\n            </exclusions>\n        </dependency>\n        <dependency>\n            <groupId>org.projectlombok</groupId>\n            <artifactId>lombok</artifactId>\n            <scope>provided</scope>\n        </dependency>\n        <dependency>\n            <groupId>javax.validation</groupId>\n            <artifactId>validation-api</artifactId>\n            <version>2.0.0.Final</version>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-data-mongodb</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-security</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-actuator-autoconfigure</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.apache.commons</groupId>\n            <artifactId>commons-lang3</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.modelmapper</groupId>\n            <artifactId>modelmapper</artifactId>\n            <version>2.3.5</version>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-log4j2</artifactId>\n            <version>2.2.6.RELEASE</version>\n        </dependency>\n        <dependency>\n            <groupId>com.lmax</groupId>\n            <artifactId>disruptor</artifactId>\n            <version>3.3.6</version>\n        </dependency>\n        <dependency>\n            <groupId>org.zalando</groupId>\n            <artifactId>logbook-spring-boot-starter</artifactId>\n            <version>2.1.0</version>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n            <exclusions>\n                <exclusion>\n                    <groupId>org.junit.vintage</groupId>\n                    <artifactId>junit-vintage-engine</artifactId>\n                </exclusion>\n            </exclusions>\n        </dependency>\n    </dependencies>\n\n    <build>\n        <plugins>\n            <plugin>\n                <groupId>org.springframework.boot</groupId>\n                <artifactId>spring-boot-maven-plugin</artifactId>\n            </plugin>\n        </plugins>\n    </build>\n\n</project>\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/CustomerApplication.java",
    "content": "package com.jmendoza.swa.hexagonal.customer;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication(exclude = {\n        org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,\n        org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class}\n)\npublic class CustomerApplication {\n\n    public static void main(String[] args) {\n        SpringApplication.run(CustomerApplication.class, args);\n    }\n\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/application/rest/controller/CustomerController.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.application.rest.controller;\n\nimport com.jmendoza.swa.hexagonal.customer.application.rest.response.CreateCustomerResponse;\nimport com.jmendoza.swa.hexagonal.customer.application.rest.response.CustomerLoginResponse;\nimport com.jmendoza.swa.hexagonal.customer.application.rest.response.ResponseMapper;\nimport com.jmendoza.swa.hexagonal.customer.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.customer.common.exception.ParameterNotFoundException;\nimport com.jmendoza.swa.hexagonal.customer.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.inbound.CreateCustomerUseCase;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.inbound.CustomerLoginUseCase;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.inbound.DeleteCustomerUseCase;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.inbound.UpdateCustomerUseCase;\nimport lombok.AllArgsConstructor;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.validation.Valid;\n\n@RestController\n@RequestMapping(\"/v1/customers\")\n@AllArgsConstructor\npublic class CustomerController {\n\n    private final CreateCustomerUseCase createCustomerUseCase;\n    private final CustomerLoginUseCase customerLoginUseCase;\n    private final DeleteCustomerUseCase deleteCustomerUseCase;\n    private final UpdateCustomerUseCase updateCustomerUseCase;\n\n    private final ResponseMapper responseMapper;\n\n    @PostMapping\n    public ResponseEntity<CreateCustomerResponse> createCustomer(@Valid @RequestBody Customer customer) throws GlobalException, ParameterNotFoundException {\n        createCustomerUseCase.createCustomer(customer);\n        return ResponseEntity.ok().body(CreateCustomerResponse.builder().id(customer.getId()).build());\n    }\n\n    @PostMapping(\"/login\")\n    public ResponseEntity<CustomerLoginResponse> customerLogin(@Valid @RequestBody Customer customer) throws ResourceNotFoundException, GlobalException, ParameterNotFoundException {\n        CustomerLoginResponse customerLoginResponse = responseMapper.convertCustomerToCustomerLoginResponse(customerLoginUseCase.customerLogin(customer.getEmail(), customer.getPassword()));\n        return ResponseEntity.ok().body(customerLoginResponse);\n    }\n\n    @DeleteMapping(\"/{id}\")\n    public ResponseEntity deleteCustomer(@PathVariable(value = \"id\") String id) throws ResourceNotFoundException {\n        deleteCustomerUseCase.deleteCustomer(id);\n        return ResponseEntity.noContent().build();\n    }\n\n    @PutMapping(\"/{id}\")\n    public ResponseEntity updateCustomer(@PathVariable(value = \"id\") String id,\n                                         @Valid @RequestBody Customer customer) throws ResourceNotFoundException {\n        updateCustomerUseCase.updateCustomer(id, customer);\n        return ResponseEntity.noContent().build();\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/application/rest/request/README.md",
    "content": "*In this directory you can add specialized requests, to only request minimum data, for example CreateUserRequest.*\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/application/rest/response/CreateCustomerResponse.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.application.rest.response;\n\nimport com.fasterxml.jackson.annotation.JsonInclude;\nimport lombok.Builder;\nimport lombok.Getter;\nimport lombok.Setter;\n\n@Getter\n@Setter\n@Builder\n@JsonInclude(JsonInclude.Include.NON_NULL)\npublic class CreateCustomerResponse {\n    private String id;\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/application/rest/response/CustomerLoginResponse.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.application.rest.response;\n\nimport com.fasterxml.jackson.annotation.JsonInclude;\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\nimport lombok.NoArgsConstructor;\nimport lombok.Setter;\n\n@Getter\n@Setter\n@NoArgsConstructor\n@AllArgsConstructor\n@JsonInclude(JsonInclude.Include.NON_NULL)\npublic class CustomerLoginResponse {\n    private String id;\n    private String firstName;\n    private String lastName;\n    private String email;\n    private String createdAt;\n    private String updatedAt;\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/application/rest/response/ResponseMapper.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.application.rest.response;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\nimport org.modelmapper.ModelMapper;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class ResponseMapper {\n\n    @Autowired\n    ModelMapper modelMapper;\n\n    public CustomerLoginResponse convertCustomerToCustomerLoginResponse(Customer customer) {\n        return modelMapper.map(customer, CustomerLoginResponse.class);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/application/soap/README.md",
    "content": "*In this directory you can add another type of adapter to access the domain, for example a CustomerController class to expose SOAP.*\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/common/config/CreateBean.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.common.config;\n\nimport org.modelmapper.ModelMapper;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\npublic class CreateBean {\n    @Bean\n    public ModelMapper modelMapper() {\n        return new ModelMapper();\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/common/constants/CustomerConstanst.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.common.constants;\n\npublic class CustomerConstanst {\n    public static final String CUSTOMER_NOT_FOUND = \"Customer not found :: \";\n    public static final String THIS_EMAIL_IS_ALREADY_REGISTERED = \"This email is already registered \";\n    public static final String THE_PASSWORD_IS_INCORRECT = \"The password is incorrect \";\n    public static final String REQUIRED_PARAMETER = \"Required parameter \";\n    public static final String IS_NOT_PRESENT = \" is not present\";\n\n    private CustomerConstanst() {\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/common/customannotations/UseCase.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.common.customannotations;\n\nimport org.springframework.core.annotation.AliasFor;\nimport org.springframework.stereotype.Component;\n\nimport java.lang.annotation.*;\n\n@Target({ElementType.TYPE})\n@Retention(RetentionPolicy.RUNTIME)\n@Documented\n@Component\npublic @interface UseCase {\n\n    @AliasFor(annotation = Component.class)\n    String value() default \"\";\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/common/exception/CustomExceptionHandler.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.common.exception;\n\nimport org.apache.logging.log4j.LogManager;\nimport org.apache.logging.log4j.Logger;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.ControllerAdvice;\nimport org.springframework.web.bind.annotation.ExceptionHandler;\nimport org.springframework.web.context.request.WebRequest;\n\nimport java.util.Date;\n\n@ControllerAdvice\npublic class CustomExceptionHandler {\n\n    private static final Logger loggerException = LogManager.getLogger(CustomExceptionHandler.class);\n\n    @ExceptionHandler(ResourceNotFoundException.class)\n    public ResponseEntity resourceNotFoundException(ResourceNotFoundException ex, WebRequest request) {\n        ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false));\n        loggerException.error(ex);\n        return new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND);\n    }\n\n    @ExceptionHandler({GlobalException.class})\n    public ResponseEntity globalExceptionHandler(GlobalException ex, WebRequest request) {\n        ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false));\n        loggerException.error(ex);\n        return new ResponseEntity<>(errorDetails, HttpStatus.INTERNAL_SERVER_ERROR);\n    }\n\n    @ExceptionHandler({ParameterNotFoundException.class})\n    public ResponseEntity parameterNotFoundExceptionHandler(ParameterNotFoundException ex, WebRequest request) {\n        ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false));\n        loggerException.error(ex);\n        return new ResponseEntity<>(errorDetails, HttpStatus.BAD_REQUEST);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/common/exception/ErrorDetails.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.common.exception;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\nimport java.util.Date;\n\n@Getter\n@AllArgsConstructor\npublic class ErrorDetails {\n    private Date timestamp;\n    private String message;\n    private String details;\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/common/exception/GlobalException.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.common.exception;\n\nimport org.springframework.http.HttpStatus;\nimport org.springframework.web.bind.annotation.ResponseStatus;\n\n@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)\npublic class GlobalException extends Exception {\n    private static final long serialVersionUID = 1L;\n\n    public GlobalException(String message) {\n        super(message);\n    }\n\n    public GlobalException(String message, Throwable cause) {\n        super(message, cause);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/common/exception/ParameterNotFoundException.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.common.exception;\n\nimport org.springframework.http.HttpStatus;\nimport org.springframework.web.bind.annotation.ResponseStatus;\n\n@ResponseStatus(value = HttpStatus.BAD_REQUEST)\npublic class ParameterNotFoundException extends Exception {\n\n    private static final long serialVersionUID = 1L;\n\n    public ParameterNotFoundException(String message) {\n        super(message);\n    }\n\n    public ParameterNotFoundException(String message, Throwable cause) {\n        super(message, cause);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/common/exception/ResourceNotFoundException.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.common.exception;\n\nimport org.springframework.http.HttpStatus;\nimport org.springframework.web.bind.annotation.ResponseStatus;\n\n@ResponseStatus(value = HttpStatus.NOT_FOUND)\npublic class ResourceNotFoundException extends Exception {\n\n    private static final long serialVersionUID = 1L;\n\n    public ResourceNotFoundException(String message) {\n        super(message);\n    }\n\n    public ResourceNotFoundException(String message, Throwable cause) {\n        super(message, cause);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/model/Customer.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.model;\n\nimport lombok.Getter;\nimport lombok.Setter;\nimport lombok.ToString;\n\n@Getter\n@Setter\n@ToString\npublic class Customer {\n    private String id;\n    private String firstName;\n    private String lastName;\n    private String email;\n    private String password;\n    private String createdAt;\n    private String updatedAt;\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/ports/inbound/CreateCustomerUseCase.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.ports.inbound;\n\nimport com.jmendoza.swa.hexagonal.customer.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.customer.common.exception.ParameterNotFoundException;\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\n\npublic interface CreateCustomerUseCase {\n    void createCustomer(Customer customer) throws GlobalException, ParameterNotFoundException;\n}"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/ports/inbound/CustomerLoginUseCase.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.ports.inbound;\n\nimport com.jmendoza.swa.hexagonal.customer.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.customer.common.exception.ParameterNotFoundException;\nimport com.jmendoza.swa.hexagonal.customer.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\n\npublic interface CustomerLoginUseCase {\n    Customer customerLogin(String email, String password) throws ResourceNotFoundException, GlobalException, ParameterNotFoundException;\n}"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/ports/inbound/DeleteCustomerUseCase.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.ports.inbound;\n\nimport com.jmendoza.swa.hexagonal.customer.common.exception.ResourceNotFoundException;\n\npublic interface DeleteCustomerUseCase {\n    void deleteCustomer(String id) throws ResourceNotFoundException;\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/ports/inbound/UpdateCustomerUseCase.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.ports.inbound;\n\nimport com.jmendoza.swa.hexagonal.customer.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\n\npublic interface UpdateCustomerUseCase {\n    void updateCustomer(String id, Customer customer) throws ResourceNotFoundException;\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/ports/outbound/CreateCustomerPort.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.ports.outbound;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\n\npublic interface CreateCustomerPort {\n    void createCustomer(Customer customer);\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/ports/outbound/DeleteCustomerPort.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.ports.outbound;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\n\npublic interface DeleteCustomerPort {\n    void deleteCustomer(Customer customer);\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/ports/outbound/ExistsCustomerPort.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.ports.outbound;\n\npublic interface ExistsCustomerPort {\n    boolean existsByEmail(String email);\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/ports/outbound/GetCustomerEmailPort.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.ports.outbound;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\n\nimport java.util.Optional;\n\npublic interface GetCustomerEmailPort {\n    Optional<Customer> getCustomerByEmail(String email);\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/ports/outbound/GetCustomerIdPort.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.ports.outbound;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\n\nimport java.util.Optional;\n\npublic interface GetCustomerIdPort {\n    Optional<Customer> getCustomerById(String id);\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/ports/outbound/PasswordEncodePort.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.ports.outbound;\n\npublic interface PasswordEncodePort {\n    String passwordEncoder(String password);\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/ports/outbound/PasswordMatchesPort.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.ports.outbound;\n\npublic interface PasswordMatchesPort {\n\n    boolean passwordMatchesPort(CharSequence rawPassword, String encodedPassword);\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/ports/outbound/UpdateCustomerPort.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.ports.outbound;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\n\npublic interface UpdateCustomerPort {\n    void updateCustomer(Customer customer);\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/services/CreateCustomerService.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.services;\n\nimport com.jmendoza.swa.hexagonal.customer.common.constants.CustomerConstanst;\nimport com.jmendoza.swa.hexagonal.customer.common.customannotations.UseCase;\nimport com.jmendoza.swa.hexagonal.customer.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.customer.common.exception.ParameterNotFoundException;\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.inbound.CreateCustomerUseCase;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.CreateCustomerPort;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.ExistsCustomerPort;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.PasswordEncodePort;\nimport lombok.AllArgsConstructor;\nimport org.apache.commons.lang3.StringUtils;\n\n@AllArgsConstructor\n@UseCase\npublic class CreateCustomerService implements CreateCustomerUseCase {\n\n    private CreateCustomerPort createCustomerPort;\n    private PasswordEncodePort passwordEncodePort;\n    private ExistsCustomerPort existsCustomerPort;\n\n    @Override\n    public void createCustomer(Customer customer) throws GlobalException, ParameterNotFoundException {\n\n        if (StringUtils.isBlank(customer.getFirstName()))\n            getMessageParameterNotFoundException(\"firstName\");\n        if (StringUtils.isBlank(customer.getLastName()))\n            getMessageParameterNotFoundException(\"lastName\");\n        if (StringUtils.isBlank(customer.getEmail()))\n            getMessageParameterNotFoundException(\"email\");\n        if (StringUtils.isBlank(customer.getPassword()))\n            getMessageParameterNotFoundException(\"password\");\n        if (StringUtils.isBlank(customer.getCreatedAt()))\n            getMessageParameterNotFoundException(\"createdAt\");\n\n        if (existsCustomerPort.existsByEmail(customer.getEmail()))\n            throw new GlobalException(CustomerConstanst.THIS_EMAIL_IS_ALREADY_REGISTERED);\n\n        customer.setPassword(passwordEncodePort.passwordEncoder(customer.getPassword()));\n        createCustomerPort.createCustomer(customer);\n    }\n\n    private void getMessageParameterNotFoundException(String parameter) throws ParameterNotFoundException {\n        throw new ParameterNotFoundException(CustomerConstanst.REQUIRED_PARAMETER + \"\\\"\" + parameter + \"\\\"\" + CustomerConstanst.IS_NOT_PRESENT);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/services/CustomerLoginService.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.services;\n\nimport com.jmendoza.swa.hexagonal.customer.common.constants.CustomerConstanst;\nimport com.jmendoza.swa.hexagonal.customer.common.customannotations.UseCase;\nimport com.jmendoza.swa.hexagonal.customer.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.customer.common.exception.ParameterNotFoundException;\nimport com.jmendoza.swa.hexagonal.customer.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.inbound.CustomerLoginUseCase;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.GetCustomerEmailPort;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.PasswordMatchesPort;\nimport lombok.AllArgsConstructor;\nimport org.apache.commons.lang3.StringUtils;\n\nimport java.util.Optional;\n\n@AllArgsConstructor\n@UseCase\npublic class CustomerLoginService implements CustomerLoginUseCase {\n\n    private GetCustomerEmailPort getCustomerEmailPort;\n    private PasswordMatchesPort passwordMatchesPort;\n\n    @Override\n    public Customer customerLogin(String email, String password) throws ResourceNotFoundException, GlobalException, ParameterNotFoundException {\n\n        if (StringUtils.isBlank(email))\n            getMessageParameterNotFoundException(\"email\");\n        if (StringUtils.isBlank(password))\n            getMessageParameterNotFoundException(\"password\");\n\n        Optional<Customer> customerOptional;\n        Customer customer = null;\n        customerOptional = Optional.ofNullable(getCustomerEmailPort.getCustomerByEmail(email).orElseThrow(() -> new ResourceNotFoundException(CustomerConstanst.CUSTOMER_NOT_FOUND + email)));\n        if (customerOptional.isPresent()) {\n            customer = customerOptional.get();\n            if (!passwordMatchesPort.passwordMatchesPort(password, customer.getPassword()))\n                throw new GlobalException(CustomerConstanst.THE_PASSWORD_IS_INCORRECT);\n\n            customer.setPassword(StringUtils.EMPTY);\n        }\n        return customer;\n    }\n\n    private void getMessageParameterNotFoundException(String parameter) throws ParameterNotFoundException {\n        throw new ParameterNotFoundException(CustomerConstanst.REQUIRED_PARAMETER + \"\\\"\" + parameter + \"\\\"\" + CustomerConstanst.IS_NOT_PRESENT);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/services/DeleteCustomerService.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.services;\n\nimport com.jmendoza.swa.hexagonal.customer.common.constants.CustomerConstanst;\nimport com.jmendoza.swa.hexagonal.customer.common.customannotations.UseCase;\nimport com.jmendoza.swa.hexagonal.customer.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.inbound.DeleteCustomerUseCase;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.DeleteCustomerPort;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.GetCustomerIdPort;\nimport lombok.AllArgsConstructor;\n\n@AllArgsConstructor\n@UseCase\npublic class DeleteCustomerService implements DeleteCustomerUseCase {\n\n    private GetCustomerIdPort getCustomerIdPort;\n    private DeleteCustomerPort deleteCustomerPort;\n\n    @Override\n    public void deleteCustomer(String id) throws ResourceNotFoundException {\n        Customer customer = getCustomerIdPort.getCustomerById(id)\n                .orElseThrow(() -> new ResourceNotFoundException(CustomerConstanst.CUSTOMER_NOT_FOUND + id));\n        deleteCustomerPort.deleteCustomer(customer);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/domain/services/UpdateCustomerService.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.domain.services;\n\nimport com.jmendoza.swa.hexagonal.customer.common.constants.CustomerConstanst;\nimport com.jmendoza.swa.hexagonal.customer.common.customannotations.UseCase;\nimport com.jmendoza.swa.hexagonal.customer.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.inbound.UpdateCustomerUseCase;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.GetCustomerIdPort;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.PasswordEncodePort;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.UpdateCustomerPort;\nimport lombok.AllArgsConstructor;\nimport org.apache.commons.lang3.StringUtils;\nimport org.modelmapper.Conditions;\nimport org.modelmapper.ModelMapper;\n\n@AllArgsConstructor\n@UseCase\npublic class UpdateCustomerService implements UpdateCustomerUseCase {\n\n    private GetCustomerIdPort getCustomerIdPort;\n    private UpdateCustomerPort updateCustomerPort;\n    private PasswordEncodePort passwordEncodePort;\n\n    private ModelMapper modelMapper;\n\n    @Override\n    public void updateCustomer(String id, Customer customer) throws ResourceNotFoundException {\n        Customer customer1 = getCustomerIdPort.getCustomerById(id)\n                .orElseThrow(() -> new ResourceNotFoundException(CustomerConstanst.CUSTOMER_NOT_FOUND + id));\n\n        if (!StringUtils.isBlank(customer.getPassword()))\n            customer.setPassword(passwordEncodePort.passwordEncoder(customer.getPassword()));\n\n        customer.setId(id);\n        modelMapper.getConfiguration().setPropertyCondition(Conditions.isNotNull());\n        modelMapper.map(customer, customer1);\n        updateCustomerPort.updateCustomer(customer1);\n    }\n}"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/infrastructure/databases/mongo/CreateCustomerAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.infrastructure.databases.mongo;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.CreateCustomerPort;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class CreateCustomerAdapter implements CreateCustomerPort {\n    @Autowired\n    private CustomerRepository customerRepository;\n\n    @Override\n    public void createCustomer(Customer customer) {\n        customerRepository.save(customer);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/infrastructure/databases/mongo/CustomerRepository.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.infrastructure.databases.mongo;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\nimport org.springframework.data.mongodb.repository.MongoRepository;\nimport org.springframework.stereotype.Repository;\n\nimport java.util.Optional;\n\n@Repository\npublic interface CustomerRepository extends MongoRepository<Customer, String> {\n\n    boolean existsByEmail(String email);\n\n    Optional<Customer> findByEmail(String email);\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/infrastructure/databases/mongo/DeleteCustomerAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.infrastructure.databases.mongo;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.DeleteCustomerPort;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class DeleteCustomerAdapter implements DeleteCustomerPort {\n\n    @Autowired\n    private CustomerRepository customerRepository;\n\n    @Override\n    public void deleteCustomer(Customer customer) {\n        customerRepository.delete(customer);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/infrastructure/databases/mongo/ExistsCustomerAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.infrastructure.databases.mongo;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.ExistsCustomerPort;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class ExistsCustomerAdapter implements ExistsCustomerPort {\n    @Autowired\n    private CustomerRepository customerRepository;\n\n    @Override\n    public boolean existsByEmail(String email) {\n        return customerRepository.existsByEmail(email);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/infrastructure/databases/mongo/GetCustomerEmailAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.infrastructure.databases.mongo;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.GetCustomerEmailPort;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\nimport java.util.Optional;\n\n@Component\npublic class GetCustomerEmailAdapter implements GetCustomerEmailPort {\n    @Autowired\n    private CustomerRepository customerRepository;\n\n    @Override\n    public Optional<Customer> getCustomerByEmail(String email) {\n        return customerRepository.findByEmail(email);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/infrastructure/databases/mongo/GetCustomerIdAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.infrastructure.databases.mongo;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.GetCustomerIdPort;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\nimport java.util.Optional;\n\n@Component\npublic class GetCustomerIdAdapter implements GetCustomerIdPort {\n\n    @Autowired\n    private CustomerRepository customerRepository;\n\n    @Override\n    public Optional<Customer> getCustomerById(String id) {\n        return customerRepository.findById(id);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/infrastructure/databases/mongo/UpdateCustomerAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.infrastructure.databases.mongo;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.model.Customer;\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.UpdateCustomerPort;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class UpdateCustomerAdapter implements UpdateCustomerPort {\n\n    @Autowired\n    private CustomerRepository customerRepository;\n\n    @Override\n    public void updateCustomer(Customer customer) {\n        customerRepository.save(customer);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/infrastructure/databases/postgresql/README.md",
    "content": "*In this directory you can add another type of DB adapter for example PostgreSQL.*\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/infrastructure/messagebroker/README.md",
    "content": "*In this directory you can add another type of adapter to send messages in a message broker, for example Kafka, RabbitMQ.*\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/infrastructure/security/PasswordEncodeAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.infrastructure.security;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.PasswordEncodePort;\nimport org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class PasswordEncodeAdapter implements PasswordEncodePort {\n\n    BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();\n\n    @Override\n    public String passwordEncoder(String password) {\n        return bCryptPasswordEncoder.encode(password);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/java/com/jmendoza/swa/hexagonal/customer/infrastructure/security/PasswordMatchesAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.customer.infrastructure.security;\n\nimport com.jmendoza.swa.hexagonal.customer.domain.ports.outbound.PasswordMatchesPort;\nimport org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class PasswordMatchesAdapter implements PasswordMatchesPort {\n\n    BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();\n\n    @Override\n    public boolean passwordMatchesPort(CharSequence rawPassword, String encodedPassword) {\n        return bCryptPasswordEncoder.matches(rawPassword, encodedPassword);\n    }\n}\n"
  },
  {
    "path": "Customer/src/main/resources/application.properties",
    "content": "# Application Server\nserver.port=3000\n\n# MongoDB Atlas\nspring.data.mongodb.uri=mongodb+srv://jmendoza:zuZYkSpMIpSGqgLD@cluster0-7rxkw.mongodb.net/customer?retryWrites=true&w=majority&connectTimeoutMS=60000\n\n# Logbook: HTTP request and response logging\nlogging.level.org.zalando.logbook = TRACE\n"
  },
  {
    "path": "Customer/src/main/resources/log4j2.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- Don't forget to set system property -Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector\n     to make all loggers asynchronous. -->\n\n<!-- No need to set system property \"log4j2.contextSelector\" to any value\n     when using <asyncLogger> or <asyncRoot>. -->\n\n<Configuration status=\"WARN\" monitorInterval=\"30\">\n    <Properties>\n        <Property name=\"LOG_PATTERN\">\n            [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [${hostName}] [%t] [%c{3}] ==> %m%n\n        </Property>\n    </Properties>\n    <Appenders>\n        <Console name=\"ConsoleAppender\" target=\"SYSTEM_OUT\" follow=\"true\">\n            <PatternLayout pattern=\"${LOG_PATTERN}\"/>\n        </Console>\n        <!-- Rolling File Appender -->\n        <RollingFile name=\"FileAppender\" fileName=\"logs/Customer.log\"\n                     filePattern=\"logs/Customer-%d{yyyy-MM-dd}-%i.log\">\n            <PatternLayout>\n                <Pattern>${LOG_PATTERN}</Pattern>\n            </PatternLayout>\n            <Policies>\n                <TimeBasedTriggeringPolicy interval=\"1\"/>\n                <SizeBasedTriggeringPolicy size=\"10MB\"/>\n            </Policies>\n            <DefaultRolloverStrategy max=\"10\"/>\n        </RollingFile>\n    </Appenders>\n    <Loggers>\n        <AsyncLogger name=\"com.jmendoza.swa.hexagonal.customer\" level=\"debug\" additivity=\"false\">\n            <AppenderRef ref=\"ConsoleAppender\"/>\n            <AppenderRef ref=\"FileAppender\"/>\n        </AsyncLogger>\n        <AsyncLogger name=\"org.hibernate\" level=\"info\" additivity=\"false\">\n            <AppenderRef ref=\"ConsoleAppender\"/>\n            <AppenderRef ref=\"FileAppender\"/>\n        </AsyncLogger>\n\n        <Root level=\"info\">\n            <AppenderRef ref=\"ConsoleAppender\"/>\n            <AppenderRef ref=\"FileAppender\"/>\n        </Root>\n    </Loggers>\n</Configuration>\n"
  },
  {
    "path": "Customer/src/test/java/com/jmendoza/swa/hexagonal/customer/CustomerApplicationTests.java",
    "content": "package com.jmendoza.swa.hexagonal.customer;\n\nimport org.junit.jupiter.api.Test;\nimport org.springframework.boot.test.context.SpringBootTest;\n\n@SpringBootTest\nclass CustomerApplicationTests {\n\n    @Test\n    void contextLoads() {\n    }\n\n}\n"
  },
  {
    "path": "Order/.gitignore",
    "content": "HELP.md\ntarget/\n!.mvn/wrapper/maven-wrapper.jar\n!**/src/main/**\n!**/src/test/**\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\n\n### NetBeans ###\n/nbproject/private/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/\nbuild/\n\n### VS Code ###\n.vscode/\n"
  },
  {
    "path": "Order/README.md",
    "content": "# Orders Microservice\n\nExample of Orders Microservice applying Hexagonal Architecture pattern, Domain Driven Design (DDD) and SOLID principles. I recommend using this Multiple Modules structure to decouple the code. In this way, part of the code can be migrated to another project in the future.\n\nThis example was implemented with Spring Boot, PostgreSQL. The microservices and the DB are deployed locally.\n\n### Start a PostgreSQL Server \n\n1. Start a PostgreSQL server instance with Docker Hub\n\n```shell\njmendoza@jmendoza-ThinkPad-T420:~$ docker run -d --name postgres -e POSTGRES_PASSWORD=root.jmtizure.k201 postgres\n```\n\n2. Start pgAdmin 4 (Container), is a GUI client for PostgreSQL\n```shell\njmendoza@jmendoza-ThinkPad-T420:~$ docker run --name pgadmin4 -p 5050:80 -e \"PGADMIN_DEFAULT_EMAIL=jmtizure@gmail.com\" -e \"PGADMIN_DEFAULT_PASSWORD=123456789\" -d  dpage/pgadmin4\n```\n\n![Screenshot](prtsc/Order-9.png)\n\n![Screenshot](prtsc/Order-5.png)\n\n3. Create a new \"customers\" database\n\n![Screenshot](prtsc/Order-6.png)\n\n4. Execute the following scripts in the public schema.\n\n![Screenshot](prtsc/Order-4.png)\n\n## Configure your application.properties\n\nFind the IP address of your postgres container\n\n```shell\njmendoza@jmendoza-ThinkPad-T420:~$ docker inspect postgres\n```\n\n![Screenshot](prtsc/Order-8.png)\n\n![Screenshot](prtsc/Order-7.png)\n\n## Create Order\n\n**Postman**\n\n![Screenshot](prtsc/Order-1.png)\n\n```shell\n[2020-06-03 22:35:27.350] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"ab783ac9bce46b82\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"POST\",\"uri\":\"http://localhost:3002/v1/orders\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"content-length\":[\"304\"],\"content-type\":[\"application/json\"],\"host\":[\"localhost:3002\"],\"origin\":[\"chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop\"],\"postman-token\":[\"32678e26-1a2d-450e-865d-5ea8429540ac\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]},\"body\":{\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-06-03T22:34:12\",\"orderProductList\":[{\"quantity\":\"2\",\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"quantity\":\"1\",\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}]}}\n[2020-06-03 22:35:27.513] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"ab783ac9bce46b82\",\"duration\":255,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Thu, 04 Jun 2020 02:35:27 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"31\"}}\n```\n\n**PostgreSQL**\n\n![Screenshot](prtsc/Order-2.png)\n\n![Screenshot](prtsc/Order-3.png)\n\n## Get Orders\n\n**Postman**\n\n![Screenshot](prtsc/Order-12.png)\n\n**PostgreSQL**\n\n![Screenshot](prtsc/Order-10.png)\n\n![Screenshot](prtsc/Order-11.png)\n\n```shell\n[2020-06-04 21:52:50.882] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-7] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"91d731033f99fbed\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/33\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"8fe08c78-dcb0-9f1e-a0a8-62f731d232a4\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 21:52:50.893] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-7] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"91d731033f99fbed\",\"duration\":11,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 01:52:50 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"33\",\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-06-03T22:34:12.000+00:00\",\"orderProductList\":[{\"orderProductId\":13,\"quantity\":2,\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"orderProductId\":14,\"quantity\":1,\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}],\"amountOrder\":4399.01}}\n```\n"
  },
  {
    "path": "Order/application/.gitignore",
    "content": "HELP.md\ntarget/\n!.mvn/wrapper/maven-wrapper.jar\n!**/src/main/**\n!**/src/test/**\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\n\n### NetBeans ###\n/nbproject/private/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/\nbuild/\n\n### VS Code ###\n.vscode/\n"
  },
  {
    "path": "Order/application/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <parent>\n        <groupId>com.jmendoza.swa.hexagonal</groupId>\n        <artifactId>order</artifactId>\n        <version>1.0</version>\n    </parent>\n\n    <artifactId>application</artifactId>\n    <version>1.0</version>\n    <packaging>jar</packaging>\n    <name>hexagonal-architecture-application</name>\n    <description>Example of Hexagonal Architecture - Application</description>\n\n    <dependencies>\n        <dependency>\n            <groupId>com.jmendoza.swa.hexagonal</groupId>\n            <artifactId>domain</artifactId>\n            <version>1.0</version>\n        </dependency>\n    </dependencies>\n\n</project>\n"
  },
  {
    "path": "Order/application/src/main/java/com/jmendoza/swa/hexagonal/application/rest/controller/OrderController.java",
    "content": "package com.jmendoza.swa.hexagonal.application.rest.controller;\n\nimport com.jmendoza.swa.hexagonal.application.rest.response.CreateOrderResponse;\nimport com.jmendoza.swa.hexagonal.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.common.exception.ParameterNotFoundException;\nimport com.jmendoza.swa.hexagonal.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.domain.model.Order;\nimport com.jmendoza.swa.hexagonal.domain.ports.inbound.CreateOrderUseCase;\nimport com.jmendoza.swa.hexagonal.domain.ports.inbound.GetOrderUseCase;\nimport lombok.AllArgsConstructor;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.validation.Valid;\n\n@RestController\n@RequestMapping(\"/v1/orders\")\n@AllArgsConstructor\npublic class OrderController {\n\n    private final CreateOrderUseCase createOrderUseCase;\n    private final GetOrderUseCase getOrderUseCase;\n\n    @PostMapping\n    public ResponseEntity<CreateOrderResponse> createOrder(@Valid @RequestBody Order order) throws ParameterNotFoundException, GlobalException {\n        createOrderUseCase.createOrder(order);\n        return ResponseEntity.ok().body(CreateOrderResponse.builder().orderId(order.getOrderId()).build());\n    }\n\n    @GetMapping(\"/{id}\")\n    public ResponseEntity<Order> getOrder(@PathVariable(value = \"id\") String id) throws ResourceNotFoundException, GlobalException {\n        return ResponseEntity.ok().body(getOrderUseCase.getOrder(id));\n    }\n}\n"
  },
  {
    "path": "Order/application/src/main/java/com/jmendoza/swa/hexagonal/application/rest/request/README.md",
    "content": "*In this directory you can add specialized requests, to only request minimum data, for example CreateOrderRequest.*\n"
  },
  {
    "path": "Order/application/src/main/java/com/jmendoza/swa/hexagonal/application/rest/response/CreateOrderResponse.java",
    "content": "package com.jmendoza.swa.hexagonal.application.rest.response;\n\nimport com.fasterxml.jackson.annotation.JsonInclude;\nimport lombok.Builder;\nimport lombok.Getter;\nimport lombok.Setter;\n\n@Getter\n@Setter\n@Builder\n@JsonInclude(JsonInclude.Include.NON_NULL)\npublic class CreateOrderResponse {\n    private String orderId;\n}\n"
  },
  {
    "path": "Order/application/src/main/java/com/jmendoza/swa/hexagonal/application/soap/README.md",
    "content": "*In this directory you can add another type of adapter to access the domain, for example a OrderController class to expose SOAP.*\n"
  },
  {
    "path": "Order/common/.gitignore",
    "content": "HELP.md\ntarget/\n!.mvn/wrapper/maven-wrapper.jar\n!**/src/main/**\n!**/src/test/**\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\n\n### NetBeans ###\n/nbproject/private/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/\nbuild/\n\n### VS Code ###\n.vscode/\n"
  },
  {
    "path": "Order/common/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <parent>\n        <groupId>com.jmendoza.swa.hexagonal</groupId>\n        <artifactId>order</artifactId>\n        <version>1.0</version>\n    </parent>\n\n    <artifactId>common</artifactId>\n    <version>1.0</version>\n    <packaging>jar</packaging>\n    <name>hexagonal-architecture-common</name>\n    <description>Example of Hexagonal Architecture - Common</description>\n\n</project>\n"
  },
  {
    "path": "Order/common/src/main/java/com/jmendoza/swa/hexagonal/common/constants/OrderConstanst.java",
    "content": "package com.jmendoza.swa.hexagonal.common.constants;\n\npublic class OrderConstanst {\n    public static final String ORDER_NOT_FOUND = \"Order not found :: \";\n    public static final String REQUIRED_PARAMETER = \"Required parameter \";\n    public static final String IS_NOT_PRESENT = \" is not present\";\n    public static final String ORDERS_NOT_FOUND = \"Orders not found\";\n\n    private OrderConstanst() {\n    }\n}\n"
  },
  {
    "path": "Order/common/src/main/java/com/jmendoza/swa/hexagonal/common/customannotations/UseCase.java",
    "content": "package com.jmendoza.swa.hexagonal.common.customannotations;\n\nimport org.springframework.core.annotation.AliasFor;\nimport org.springframework.stereotype.Component;\n\nimport java.lang.annotation.*;\n\n@Target({ElementType.TYPE})\n@Retention(RetentionPolicy.RUNTIME)\n@Documented\n@Component\npublic @interface UseCase {\n\n    @AliasFor(annotation = Component.class)\n    String value() default \"\";\n}\n"
  },
  {
    "path": "Order/common/src/main/java/com/jmendoza/swa/hexagonal/common/exception/CustomExceptionHandler.java",
    "content": "package com.jmendoza.swa.hexagonal.common.exception;\n\nimport org.apache.logging.log4j.LogManager;\nimport org.apache.logging.log4j.Logger;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.ControllerAdvice;\nimport org.springframework.web.bind.annotation.ExceptionHandler;\nimport org.springframework.web.context.request.WebRequest;\n\nimport java.util.Date;\n\n@ControllerAdvice\npublic class CustomExceptionHandler {\n\n    private static final Logger loggerException = LogManager.getLogger(CustomExceptionHandler.class);\n\n    @ExceptionHandler(ResourceNotFoundException.class)\n    public ResponseEntity resourceNotFoundException(ResourceNotFoundException ex, WebRequest request) {\n        ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false));\n        loggerException.error(ex);\n        return new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND);\n    }\n\n    @ExceptionHandler({GlobalException.class})\n    public ResponseEntity globalExceptionHandler(GlobalException ex, WebRequest request) {\n        ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false));\n        loggerException.error(ex);\n        return new ResponseEntity<>(errorDetails, HttpStatus.INTERNAL_SERVER_ERROR);\n    }\n\n    @ExceptionHandler({ParameterNotFoundException.class})\n    public ResponseEntity parameterNotFoundExceptionHandler(ParameterNotFoundException ex, WebRequest request) {\n        ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false));\n        loggerException.error(ex);\n        return new ResponseEntity<>(errorDetails, HttpStatus.BAD_REQUEST);\n    }\n}\n"
  },
  {
    "path": "Order/common/src/main/java/com/jmendoza/swa/hexagonal/common/exception/ErrorDetails.java",
    "content": "package com.jmendoza.swa.hexagonal.common.exception;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\nimport java.util.Date;\n\n@Getter\n@AllArgsConstructor\npublic class ErrorDetails {\n    private Date timestamp;\n    private String message;\n    private String details;\n}\n"
  },
  {
    "path": "Order/common/src/main/java/com/jmendoza/swa/hexagonal/common/exception/GlobalException.java",
    "content": "package com.jmendoza.swa.hexagonal.common.exception;\n\nimport org.springframework.http.HttpStatus;\nimport org.springframework.web.bind.annotation.ResponseStatus;\n\n@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)\npublic class GlobalException extends Exception {\n    private static final long serialVersionUID = 1L;\n\n    public GlobalException(String message) {\n        super(message);\n    }\n\n    public GlobalException(String message, Throwable cause) {\n        super(message, cause);\n    }\n}\n"
  },
  {
    "path": "Order/common/src/main/java/com/jmendoza/swa/hexagonal/common/exception/ParameterNotFoundException.java",
    "content": "package com.jmendoza.swa.hexagonal.common.exception;\n\nimport org.springframework.http.HttpStatus;\nimport org.springframework.web.bind.annotation.ResponseStatus;\n\n@ResponseStatus(value = HttpStatus.BAD_REQUEST)\npublic class ParameterNotFoundException extends Exception {\n\n    private static final long serialVersionUID = 1L;\n\n    public ParameterNotFoundException(String message) {\n        super(message);\n    }\n\n    public ParameterNotFoundException(String message, Throwable cause) {\n        super(message, cause);\n    }\n}\n"
  },
  {
    "path": "Order/common/src/main/java/com/jmendoza/swa/hexagonal/common/exception/ResourceNotFoundException.java",
    "content": "package com.jmendoza.swa.hexagonal.common.exception;\n\nimport org.springframework.http.HttpStatus;\nimport org.springframework.web.bind.annotation.ResponseStatus;\n\n@ResponseStatus(value = HttpStatus.NOT_FOUND)\npublic class ResourceNotFoundException extends Exception {\n\n    private static final long serialVersionUID = 1L;\n\n    public ResourceNotFoundException(String message) {\n        super(message);\n    }\n\n    public ResourceNotFoundException(String message, Throwable cause) {\n        super(message, cause);\n    }\n}\n"
  },
  {
    "path": "Order/configuration/.gitignore",
    "content": "HELP.md\ntarget/\n!.mvn/wrapper/maven-wrapper.jar\n!**/src/main/**\n!**/src/test/**\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\n\n### NetBeans ###\n/nbproject/private/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/\nbuild/\n\n### VS Code ###\n.vscode/\n"
  },
  {
    "path": "Order/configuration/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <parent>\n        <groupId>com.jmendoza.swa.hexagonal</groupId>\n        <artifactId>order</artifactId>\n        <version>1.0</version>\n    </parent>\n\n    <artifactId>configuration</artifactId>\n    <version>1.0</version>\n    <name>hexagonal-architecture-configuration</name>\n    <description>Example of Hexagonal Architecture - Configuration</description>\n\n    <dependencies>\n        <dependency>\n            <groupId>com.jmendoza.swa.hexagonal</groupId>\n            <artifactId>application</artifactId>\n            <version>1.0</version>\n        </dependency>\n        <dependency>\n            <groupId>com.jmendoza.swa.hexagonal</groupId>\n            <artifactId>infrastructure</artifactId>\n            <version>1.0</version>\n        </dependency>\n        <dependency>\n            <groupId>org.zalando</groupId>\n            <artifactId>logbook-spring-boot-starter</artifactId>\n            <version>2.1.0</version>\n        </dependency>\n    </dependencies>\n\n</project>\n"
  },
  {
    "path": "Order/configuration/src/main/java/com/jmendoza/swa/hexagonal/configuration/HexagonalArchitectureConfigurationApplication.java",
    "content": "package com.jmendoza.swa.hexagonal.configuration;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication(scanBasePackages = {\"com.jmendoza.swa.hexagonal.*\"})\npublic class HexagonalArchitectureConfigurationApplication {\n\n    public static void main(String[] args) {\n        SpringApplication.run(HexagonalArchitectureConfigurationApplication.class, args);\n    }\n\n}\n"
  },
  {
    "path": "Order/configuration/src/main/java/com/jmendoza/swa/hexagonal/configuration/db/DataSourceConfig.java",
    "content": "package com.jmendoza.swa.hexagonal.configuration.db;\n\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Primary;\nimport org.springframework.core.env.Environment;\nimport org.springframework.jdbc.datasource.DriverManagerDataSource;\n\nimport javax.sql.DataSource;\nimport java.util.Properties;\n\n@Configuration\npublic class DataSourceConfig {\n\n    @Bean\n    @Primary\n    @ConfigurationProperties(\"spring.datasource.tomcat\")\n    public DataSource getDataSource(Environment env) {\n        final DriverManagerDataSource dataSource = new DriverManagerDataSource();\n        final Properties properties = new Properties();\n\n        dataSource.setDriverClassName(env.getProperty(\"spring.datasource.driverClassName\"));\n        dataSource.setUrl(env.getProperty(\"spring.datasource.url\"));\n        dataSource.setUsername(env.getProperty(\"spring.datasource.username\"));\n        dataSource.setPassword(env.getProperty(\"spring.datasource.password\"));\n\n        properties.setProperty(\"initialSize\", env.getProperty(\"spring.datasource.tomcat.initial-size\"));\n        properties.setProperty(\"minIdle\", env.getProperty(\"spring.datasource.tomcat.min-idle\"));\n        properties.setProperty(\"maxActive\", env.getProperty(\"spring.datasource.tomcat.max-active\"));\n        properties.setProperty(\"maxIdle\", env.getProperty(\"spring.datasource.tomcat.max-idle\"));\n        properties.setProperty(\"minEvictableIdleTimeMillis\", env.getProperty(\"spring.datasource.tomcat.min-evictable-idle-time-millis\"));\n        properties.setProperty(\"maxWait\", env.getProperty(\"spring.datasource.tomcat.max-idle\"));\n\n        dataSource.setConnectionProperties(properties);\n\n        return dataSource;\n    }\n}\n\n\n"
  },
  {
    "path": "Order/configuration/src/main/resources/application.properties",
    "content": "## Server\nserver.port=3002\n\n## Spring DATASOURCE\nspring.datasource.driverClassName=org.postgresql.Driver\nspring.datasource.url=jdbc:postgresql://172.17.0.2:5432/customers\nspring.datasource.username=postgres\nspring.datasource.password=root.jmtizure.k201\n\nspring.datasource.tomcat.initial-size=15\nspring.datasource.tomcat.min-idle=15\nspring.datasource.tomcat.max-active=50\nspring.datasource.tomcat.max-idle=50\nspring.datasource.tomcat.min-evictable-idle-time-millis=60000\nspring.datasource.tomcat.max-wait=20000\n\n# Logbook: HTTP request and response logging\nlogging.level.org.zalando.logbook = TRACE\n"
  },
  {
    "path": "Order/configuration/src/main/resources/log4j2.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- Don't forget to set system property -Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector\n     to make all loggers asynchronous. -->\n\n<!-- No need to set system property \"log4j2.contextSelector\" to any value\n     when using <asyncLogger> or <asyncRoot>. -->\n\n<Configuration status=\"WARN\" monitorInterval=\"30\">\n    <Properties>\n        <Property name=\"LOG_PATTERN\">\n            [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [${hostName}] [%t] [%c{3}] ===> %m%n\n        </Property>\n    </Properties>\n    <Appenders>\n        <Console name=\"ConsoleAppender\" target=\"SYSTEM_OUT\" follow=\"true\">\n            <PatternLayout pattern=\"${LOG_PATTERN}\"/>\n        </Console>\n        <!-- Rolling File Appender -->\n        <RollingFile name=\"FileAppender\" fileName=\"logs/Order.log\"\n                     filePattern=\"logs/Order-%d{yyyy-MM-dd}-%i.log\">\n            <PatternLayout>\n                <Pattern>${LOG_PATTERN}</Pattern>\n            </PatternLayout>\n            <Policies>\n                <TimeBasedTriggeringPolicy interval=\"1\"/>\n                <SizeBasedTriggeringPolicy size=\"10MB\"/>\n            </Policies>\n            <DefaultRolloverStrategy max=\"10\"/>\n        </RollingFile>\n    </Appenders>\n    <Loggers>\n        <AsyncLogger name=\"com.jmendoza.swa.hexagonal.order\" level=\"debug\" additivity=\"false\">\n            <AppenderRef ref=\"ConsoleAppender\"/>\n            <AppenderRef ref=\"FileAppender\"/>\n        </AsyncLogger>\n        <AsyncLogger name=\"org.hibernate\" level=\"info\" additivity=\"false\">\n            <AppenderRef ref=\"ConsoleAppender\"/>\n            <AppenderRef ref=\"FileAppender\"/>\n        </AsyncLogger>\n\n        <Root level=\"info\">\n            <AppenderRef ref=\"ConsoleAppender\"/>\n            <AppenderRef ref=\"FileAppender\"/>\n        </Root>\n    </Loggers>\n</Configuration>\n"
  },
  {
    "path": "Order/domain/.gitignore",
    "content": "HELP.md\ntarget/\n!.mvn/wrapper/maven-wrapper.jar\n!**/src/main/**\n!**/src/test/**\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\n\n### NetBeans ###\n/nbproject/private/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/\nbuild/\n\n### VS Code ###\n.vscode/\n"
  },
  {
    "path": "Order/domain/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <parent>\n        <groupId>com.jmendoza.swa.hexagonal</groupId>\n        <artifactId>order</artifactId>\n        <version>1.0</version>\n    </parent>\n\n    <artifactId>domain</artifactId>\n    <version>1.0</version>\n    <packaging>jar</packaging>\n    <name>hexagonal-architecture-domain</name>\n    <description>Example of Hexagonal Architecture - Domain</description>\n\n    <!--The Domain can't have dependencies on any layer.-->\n    <dependencies>\n        <dependency>\n            <groupId>com.jmendoza.swa.hexagonal</groupId>\n            <artifactId>common</artifactId>\n            <version>1.0</version>\n        </dependency>\n    </dependencies>\n\n</project>\n"
  },
  {
    "path": "Order/domain/src/main/java/com/jmendoza/swa/hexagonal/domain/model/Order.java",
    "content": "package com.jmendoza.swa.hexagonal.domain.model;\n\nimport lombok.Getter;\nimport lombok.Setter;\nimport lombok.ToString;\n\nimport java.util.Date;\nimport java.util.List;\n\n@Getter\n@Setter\n@ToString\npublic class Order {\n    private String orderId;\n    private String customerId;\n    private Date createdAt;\n    private List<OrderProduct> orderProductList;\n    private Double amountOrder;\n\n    public Double getAmountOrder() {\n        return orderProductList.stream().mapToDouble(OrderProduct::getAmount).sum();\n    }\n}\n"
  },
  {
    "path": "Order/domain/src/main/java/com/jmendoza/swa/hexagonal/domain/model/OrderProduct.java",
    "content": "package com.jmendoza.swa.hexagonal.domain.model;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\nimport lombok.Setter;\nimport lombok.ToString;\n\nimport java.io.Serializable;\n\n@Getter\n@Setter\n@ToString\n@AllArgsConstructor\npublic class OrderProduct implements Serializable {\n\n    private static final long serialVersionUID = 1L;\n\n    private int orderProductId;\n    private int quantity;\n    private String productId;\n    private Double productPrice;\n\n    Double getAmount() {\n        return productPrice.doubleValue() * this.getQuantity();\n    }\n}\n"
  },
  {
    "path": "Order/domain/src/main/java/com/jmendoza/swa/hexagonal/domain/ports/inbound/CreateOrderUseCase.java",
    "content": "package com.jmendoza.swa.hexagonal.domain.ports.inbound;\n\nimport com.jmendoza.swa.hexagonal.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.common.exception.ParameterNotFoundException;\nimport com.jmendoza.swa.hexagonal.domain.model.Order;\n\npublic interface CreateOrderUseCase {\n    void createOrder(Order order) throws ParameterNotFoundException, GlobalException;\n}"
  },
  {
    "path": "Order/domain/src/main/java/com/jmendoza/swa/hexagonal/domain/ports/inbound/GetOrderUseCase.java",
    "content": "package com.jmendoza.swa.hexagonal.domain.ports.inbound;\n\nimport com.jmendoza.swa.hexagonal.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.domain.model.Order;\n\npublic interface GetOrderUseCase {\n    Order getOrder(String orderId) throws ResourceNotFoundException, GlobalException;\n}\n"
  },
  {
    "path": "Order/domain/src/main/java/com/jmendoza/swa/hexagonal/domain/ports/outbound/CreateOrderPort.java",
    "content": "package com.jmendoza.swa.hexagonal.domain.ports.outbound;\n\nimport com.jmendoza.swa.hexagonal.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.domain.model.Order;\n\npublic interface CreateOrderPort {\n    void createOrder(Order order) throws GlobalException;\n}\n"
  },
  {
    "path": "Order/domain/src/main/java/com/jmendoza/swa/hexagonal/domain/ports/outbound/GetOrderPort.java",
    "content": "package com.jmendoza.swa.hexagonal.domain.ports.outbound;\n\nimport com.jmendoza.swa.hexagonal.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.domain.model.Order;\n\npublic interface GetOrderPort {\n    Order getOrder(String orderId) throws GlobalException;\n}\n"
  },
  {
    "path": "Order/domain/src/main/java/com/jmendoza/swa/hexagonal/domain/services/CreateOrderService.java",
    "content": "package com.jmendoza.swa.hexagonal.domain.services;\n\nimport com.jmendoza.swa.hexagonal.common.constants.OrderConstanst;\nimport com.jmendoza.swa.hexagonal.common.customannotations.UseCase;\nimport com.jmendoza.swa.hexagonal.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.common.exception.ParameterNotFoundException;\nimport com.jmendoza.swa.hexagonal.domain.model.Order;\nimport com.jmendoza.swa.hexagonal.domain.ports.inbound.CreateOrderUseCase;\nimport com.jmendoza.swa.hexagonal.domain.ports.outbound.CreateOrderPort;\nimport lombok.AllArgsConstructor;\nimport org.apache.commons.lang3.StringUtils;\n\n@AllArgsConstructor\n@UseCase\npublic class CreateOrderService implements CreateOrderUseCase {\n\n    private CreateOrderPort createOrderPort;\n\n    @Override\n    public void createOrder(Order order) throws ParameterNotFoundException, GlobalException {\n        try {\n            if (StringUtils.isBlank(order.getCustomerId()))\n                getMessageParameterNotFoundException(\"customerId\");\n            if (order.getCreatedAt() == null)\n                getMessageParameterNotFoundException(\"createdAt\");\n            if (order.getOrderProductList() == null || order.getOrderProductList().isEmpty())\n                getMessageParameterNotFoundException(\"orderProductList\");\n\n            //TODO: pending validate orderProductList\n\n            createOrderPort.createOrder(order);\n        } catch (Exception e) {\n            throw new GlobalException(\"createOrder: \" + e.getMessage());\n        }\n    }\n\n    private void getMessageParameterNotFoundException(String parameter) throws ParameterNotFoundException {\n        throw new ParameterNotFoundException(OrderConstanst.REQUIRED_PARAMETER + \"\\\"\" + parameter + \"\\\"\" + OrderConstanst.IS_NOT_PRESENT);\n    }\n}\n"
  },
  {
    "path": "Order/domain/src/main/java/com/jmendoza/swa/hexagonal/domain/services/GetOrderService.java",
    "content": "package com.jmendoza.swa.hexagonal.domain.services;\n\nimport com.jmendoza.swa.hexagonal.common.constants.OrderConstanst;\nimport com.jmendoza.swa.hexagonal.common.customannotations.UseCase;\nimport com.jmendoza.swa.hexagonal.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.domain.model.Order;\nimport com.jmendoza.swa.hexagonal.domain.ports.inbound.GetOrderUseCase;\nimport com.jmendoza.swa.hexagonal.domain.ports.outbound.GetOrderPort;\nimport lombok.AllArgsConstructor;\n\n@AllArgsConstructor\n@UseCase\npublic class GetOrderService implements GetOrderUseCase {\n\n    private GetOrderPort getOrderPort;\n\n    @Override\n    public Order getOrder(String orderId) throws ResourceNotFoundException, GlobalException {\n        try {\n            final Order order = getOrderPort.getOrder(orderId);\n            if (order == null)\n                throw new ResourceNotFoundException(OrderConstanst.ORDER_NOT_FOUND + orderId);\n\n            return order;\n        } catch (Exception e) {\n            throw new GlobalException(\"getOrder: \" + e.getMessage());\n        }\n\n    }\n}\n"
  },
  {
    "path": "Order/infrastructure/.gitignore",
    "content": "HELP.md\ntarget/\n!.mvn/wrapper/maven-wrapper.jar\n!**/src/main/**\n!**/src/test/**\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\n\n### NetBeans ###\n/nbproject/private/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/\nbuild/\n\n### VS Code ###\n.vscode/\n"
  },
  {
    "path": "Order/infrastructure/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <parent>\n        <groupId>com.jmendoza.swa.hexagonal</groupId>\n        <artifactId>order</artifactId>\n        <version>1.0</version>\n    </parent>\n\n    <artifactId>infrastructure</artifactId>\n    <version>1.0</version>\n    <packaging>jar</packaging>\n    <name>hexagonal-architecture-infrastructure</name>\n    <description>Example of Hexagonal Architecture - Infrastructure</description>\n\n    <dependencies>\n        <dependency>\n            <groupId>com.jmendoza.swa.hexagonal</groupId>\n            <artifactId>domain</artifactId>\n            <version>1.0</version>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-data-jdbc</artifactId>\n            <exclusions>\n                <exclusion>\n                    <groupId>com.zaxxer</groupId>\n                    <artifactId>HikariCP</artifactId>\n                </exclusion>\n            </exclusions>\n        </dependency>\n        <dependency>\n            <groupId>org.postgresql</groupId>\n            <artifactId>postgresql</artifactId>\n        </dependency>\n    </dependencies>\n\n</project>\n"
  },
  {
    "path": "Order/infrastructure/src/main/java/com/jmendoza/swa/hexagonal/infrastracture/databases/mongo/README.md",
    "content": "*In this directory you can add another type of DB adapter for example Mongo.*\n"
  },
  {
    "path": "Order/infrastructure/src/main/java/com/jmendoza/swa/hexagonal/infrastracture/databases/postgresql/CreateOrderAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.infrastracture.databases.postgresql;\n\nimport com.google.gson.Gson;\nimport com.jmendoza.swa.hexagonal.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.domain.model.Order;\nimport com.jmendoza.swa.hexagonal.domain.ports.outbound.CreateOrderPort;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.jdbc.core.JdbcTemplate;\nimport org.springframework.stereotype.Component;\n\nimport javax.sql.DataSource;\nimport java.sql.CallableStatement;\nimport java.sql.Connection;\nimport java.sql.Types;\n\n@Component\npublic class CreateOrderAdapter implements CreateOrderPort {\n\n    private JdbcTemplate jdbcTemplate;\n\n    @Autowired\n    public CreateOrderAdapter(final DataSource dataSource) {\n        jdbcTemplate = new JdbcTemplate(dataSource);\n    }\n\n    @Override\n    public void createOrder(Order order) throws GlobalException {\n\n        final String procedureCall = \"{ ? = call create_order(?, ?, ?, ?)}\";\n\n        try (Connection connection = jdbcTemplate.getDataSource().getConnection();\n             CallableStatement callableStatement = connection.prepareCall(procedureCall)\n        ) {\n            Gson gson = new Gson();\n            String json = gson.toJson(order.getOrderProductList());\n\n            callableStatement.registerOutParameter(1, Types.BIGINT);\n            callableStatement.setString(2, order.getCustomerId());\n            callableStatement.setTimestamp(3, new java.sql.Timestamp(order.getCreatedAt().getTime()));\n            callableStatement.setDouble(4, order.getAmountOrder());\n            callableStatement.setString(5, json);\n\n            callableStatement.execute();\n\n            order.setOrderId(Long.toString(callableStatement.getLong(1)));\n        } catch (Exception e) {\n            throw new GlobalException(\"Exception createOrder: \" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "Order/infrastructure/src/main/java/com/jmendoza/swa/hexagonal/infrastracture/databases/postgresql/GetOrderAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.infrastracture.databases.postgresql;\n\nimport com.google.gson.Gson;\nimport com.jmendoza.swa.hexagonal.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.domain.model.Order;\nimport com.jmendoza.swa.hexagonal.domain.ports.outbound.GetOrderPort;\nimport org.postgresql.util.PGobject;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.jdbc.core.JdbcTemplate;\nimport org.springframework.stereotype.Component;\n\nimport javax.sql.DataSource;\nimport java.sql.CallableStatement;\nimport java.sql.Connection;\nimport java.sql.Types;\n\n@Component\npublic class GetOrderAdapter implements GetOrderPort {\n\n    private JdbcTemplate jdbcTemplate;\n\n    @Autowired\n    public GetOrderAdapter(final DataSource dataSource) {\n        jdbcTemplate = new JdbcTemplate(dataSource);\n    }\n\n    @Override\n    public Order getOrder(String orderId) throws GlobalException {\n\n        final String procedureCall = \"{ ? = call get_order(?)}\";\n        Order order = null;\n\n        try (Connection connection = jdbcTemplate.getDataSource().getConnection();\n             CallableStatement callableStatement = connection.prepareCall(procedureCall)\n        ) {\n            PGobject pGobject;\n\n            callableStatement.registerOutParameter(1, Types.OTHER);\n            callableStatement.setLong(2, Long.parseLong(orderId));\n            callableStatement.execute();\n\n            pGobject = (PGobject) callableStatement.getObject(1);\n            if (pGobject != null) {\n                Gson gson = new Gson();\n                order = gson.fromJson(pGobject.toString(), Order.class);\n            }\n\n        } catch (Exception e) {\n            throw new GlobalException(\"Exception getOrder: \" + e.getMessage());\n        }\n        return order;\n    }\n}\n"
  },
  {
    "path": "Order/infrastructure/src/main/java/com/jmendoza/swa/hexagonal/infrastracture/messagebroker/README.md",
    "content": "*In this directory you can add another type of adapter to send messages in a message broker, for example Kafka, RabbitMQ.*\n"
  },
  {
    "path": "Order/logs/Order-2020-06-05-1.log",
    "content": "[2020-06-05 23:59:49.755] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.configuration.HexagonalArchitectureConfigurationApplication] | Starting HexagonalArchitectureConfigurationApplication on jmendoza-ThinkPad-T420 with PID 12245 (/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order/configuration/target/classes started by jmendoza in /home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order)\n[2020-06-05 23:59:49.773] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.configuration.HexagonalArchitectureConfigurationApplication] | No active profile set, falling back to default profiles: default\n[2020-06-05 23:59:50.885] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Bootstrapping Spring Data JDBC repositories in DEFAULT mode.\n[2020-06-05 23:59:50.905] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Finished Spring Data repository scanning in 16ms. Found 0 JDBC repository interfaces.\n[2020-06-05 23:59:51.469] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat initialized with port(s): 3002 (http)\n[2020-06-05 23:59:51.479] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Initializing ProtocolHandler [\"http-nio-3002\"]\n[2020-06-05 23:59:51.480] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardService] | Starting service [Tomcat]\n[2020-06-05 23:59:51.481] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardEngine] | Starting Servlet engine: [Apache Tomcat/9.0.35]\n[2020-06-05 23:59:51.592] [INFO] [jmendoza-ThinkPad-T420] [main] [[Tomcat].[localhost].[/]] | Initializing Spring embedded WebApplicationContext\n[2020-06-05 23:59:51.593] [INFO] [jmendoza-ThinkPad-T420] [main] [web.context.ContextLoader] | Root WebApplicationContext: initialization completed in 1550 ms\n[2020-06-05 23:59:51.938] [INFO] [jmendoza-ThinkPad-T420] [main] [scheduling.concurrent.ThreadPoolTaskExecutor] | Initializing ExecutorService 'applicationTaskExecutor'\n[2020-06-05 23:59:52.237] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Starting...\n[2020-06-05 23:59:52.439] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Start completed.\n[2020-06-05 23:59:52.615] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Starting ProtocolHandler [\"http-nio-3002\"]\n[2020-06-05 23:59:52.692] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat started on port(s): 3002 (http) with context path ''\n[2020-06-05 23:59:52.712] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.configuration.HexagonalArchitectureConfigurationApplication] | Started HexagonalArchitectureConfigurationApplication in 3.799 seconds (JVM running for 5.472)\n"
  },
  {
    "path": "Order/logs/Order.log",
    "content": "[2020-09-18 18:46:56.843] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.configuration.HexagonalArchitectureConfigurationApplication] | Starting HexagonalArchitectureConfigurationApplication on jmendoza-ThinkPad-T420 with PID 31880 (/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order/configuration/target/classes started by jmendoza in /home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order)\n[2020-09-18 18:46:57.023] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.configuration.HexagonalArchitectureConfigurationApplication] | No active profile set, falling back to default profiles: default\n[2020-09-18 18:46:58.392] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Bootstrapping Spring Data JDBC repositories in DEFAULT mode.\n[2020-09-18 18:46:58.425] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Finished Spring Data repository scanning in 26ms. Found 0 JDBC repository interfaces.\n[2020-09-18 18:46:59.341] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat initialized with port(s): 3002 (http)\n[2020-09-18 18:46:59.366] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Initializing ProtocolHandler [\"http-nio-3002\"]\n[2020-09-18 18:46:59.367] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardService] | Starting service [Tomcat]\n[2020-09-18 18:46:59.368] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardEngine] | Starting Servlet engine: [Apache Tomcat/9.0.35]\n[2020-09-18 18:46:59.564] [INFO] [jmendoza-ThinkPad-T420] [main] [[Tomcat].[localhost].[/]] | Initializing Spring embedded WebApplicationContext\n[2020-09-18 18:46:59.565] [INFO] [jmendoza-ThinkPad-T420] [main] [web.context.ContextLoader] | Root WebApplicationContext: initialization completed in 2475 ms\n[2020-09-18 18:46:59.889] [WARN] [jmendoza-ThinkPad-T420] [main] [servlet.context.AnnotationConfigServletWebServerApplicationContext] | Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderController' defined in file [/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order/application/target/classes/com/jmendoza/swa/hexagonal/application/rest/controller/OrderController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'createOrderService' defined in file [/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order/domain/target/classes/com/jmendoza/swa/hexagonal/domain/services/CreateOrderService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.jmendoza.swa.hexagonal.domain.ports.outbound.CreateOrderPort' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}\n[2020-09-18 18:46:59.895] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardService] | Stopping service [Tomcat]\n[2020-09-18 18:46:59.929] [INFO] [jmendoza-ThinkPad-T420] [main] [autoconfigure.logging.ConditionEvaluationReportLoggingListener] | \n\nError starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.\n[2020-09-18 18:47:00.165] [ERROR] [jmendoza-ThinkPad-T420] [main] [boot.diagnostics.LoggingFailureAnalysisReporter] | \n\n***************************\nAPPLICATION FAILED TO START\n***************************\n\nDescription:\n\nParameter 0 of constructor in com.jmendoza.swa.hexagonal.domain.services.CreateOrderService required a bean of type 'com.jmendoza.swa.hexagonal.domain.ports.outbound.CreateOrderPort' that could not be found.\n\n\nAction:\n\nConsider defining a bean of type 'com.jmendoza.swa.hexagonal.domain.ports.outbound.CreateOrderPort' in your configuration.\n\n[2020-09-18 18:47:00.168] [WARN] [jmendoza-ThinkPad-T420] [main] [springframework.boot.SpringApplication] | Unable to close ApplicationContext\norg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': Initialization of bean failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' available\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:409) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:245) ~[spring-context-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:197) ~[spring-context-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:134) ~[spring-context-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:403) ~[spring-context-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:360) ~[spring-context-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.boot.availability.AvailabilityChangeEvent.publish(AvailabilityChangeEvent.java:81) ~[spring-boot-2.3.0.RELEASE.jar:2.3.0.RELEASE]\n\tat org.springframework.boot.availability.AvailabilityChangeEvent.publish(AvailabilityChangeEvent.java:67) ~[spring-boot-2.3.0.RELEASE.jar:2.3.0.RELEASE]\n\tat org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.doClose(ServletWebServerApplicationContext.java:167) ~[spring-boot-2.3.0.RELEASE.jar:2.3.0.RELEASE]\n\tat org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:978) ~[spring-context-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:814) [spring-boot-2.3.0.RELEASE.jar:2.3.0.RELEASE]\n\tat org.springframework.boot.SpringApplication.run(SpringApplication.java:325) [spring-boot-2.3.0.RELEASE.jar:2.3.0.RELEASE]\n\tat org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) [spring-boot-2.3.0.RELEASE.jar:2.3.0.RELEASE]\n\tat org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.3.0.RELEASE.jar:2.3.0.RELEASE]\n\tat com.jmendoza.swa.hexagonal.configuration.HexagonalArchitectureConfigurationApplication.main(HexagonalArchitectureConfigurationApplication.java:10) [classes/:?]\nCaused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': Initialization of bean failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' available\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:409) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.aop.framework.autoproxy.BeanFactoryAdvisorRetrievalHelper.findAdvisorBeans(BeanFactoryAdvisorRetrievalHelper.java:91) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findCandidateAdvisors(AbstractAdvisorAutoProxyCreator.java:109) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:94) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:76) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:347) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:299) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:431) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\t... 28 more\nCaused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' available\n\tat org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:814) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1282) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:297) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor.postProcessBeforeInitialization(ConfigurationClassPostProcessor.java:456) ~[spring-context-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:416) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:409) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.aop.framework.autoproxy.BeanFactoryAdvisorRetrievalHelper.findAdvisorBeans(BeanFactoryAdvisorRetrievalHelper.java:91) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findCandidateAdvisors(AbstractAdvisorAutoProxyCreator.java:109) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:94) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:76) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:347) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:299) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:431) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\tat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]\n\t... 28 more\n[2020-09-18 18:48:24.419] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.configuration.HexagonalArchitectureConfigurationApplication] | Starting HexagonalArchitectureConfigurationApplication on jmendoza-ThinkPad-T420 with PID 32302 (/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order/configuration/target/classes started by jmendoza in /home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order)\n[2020-09-18 18:48:24.437] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.configuration.HexagonalArchitectureConfigurationApplication] | No active profile set, falling back to default profiles: default\n[2020-09-18 18:48:25.832] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Bootstrapping Spring Data JDBC repositories in DEFAULT mode.\n[2020-09-18 18:48:25.859] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Finished Spring Data repository scanning in 21ms. Found 0 JDBC repository interfaces.\n[2020-09-18 18:48:26.638] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat initialized with port(s): 3002 (http)\n[2020-09-18 18:48:26.652] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Initializing ProtocolHandler [\"http-nio-3002\"]\n[2020-09-18 18:48:26.653] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardService] | Starting service [Tomcat]\n[2020-09-18 18:48:26.669] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardEngine] | Starting Servlet engine: [Apache Tomcat/9.0.35]\n[2020-09-18 18:48:26.773] [INFO] [jmendoza-ThinkPad-T420] [main] [[Tomcat].[localhost].[/]] | Initializing Spring embedded WebApplicationContext\n[2020-09-18 18:48:26.774] [INFO] [jmendoza-ThinkPad-T420] [main] [web.context.ContextLoader] | Root WebApplicationContext: initialization completed in 2003 ms\n[2020-09-18 18:48:27.296] [INFO] [jmendoza-ThinkPad-T420] [main] [scheduling.concurrent.ThreadPoolTaskExecutor] | Initializing ExecutorService 'applicationTaskExecutor'\n[2020-09-18 18:48:27.655] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Starting...\n[2020-09-18 18:48:27.963] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Start completed.\n[2020-09-18 18:48:28.195] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Starting ProtocolHandler [\"http-nio-3002\"]\n[2020-09-18 18:48:28.279] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat started on port(s): 3002 (http) with context path ''\n[2020-09-18 18:48:28.293] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.configuration.HexagonalArchitectureConfigurationApplication] | Started HexagonalArchitectureConfigurationApplication in 4.93 seconds (JVM running for 6.902)\n[2020-09-18 18:53:33.328] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [scheduling.concurrent.ThreadPoolTaskExecutor] | Shutting down ExecutorService 'applicationTaskExecutor'\n[2020-09-18 18:53:33.330] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Shutdown initiated...\n[2020-09-18 18:53:33.343] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Shutdown completed.\n[2020-09-18 18:53:59.925] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.configuration.HexagonalArchitectureConfigurationApplication] ===> Starting HexagonalArchitectureConfigurationApplication on jmendoza-ThinkPad-T420 with PID 32731 (/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order/configuration/target/classes started by jmendoza in /home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order)\n[2020-09-18 18:53:59.973] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.configuration.HexagonalArchitectureConfigurationApplication] ===> No active profile set, falling back to default profiles: default\n[2020-09-18 18:54:01.235] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] ===> Bootstrapping Spring Data JDBC repositories in DEFAULT mode.\n[2020-09-18 18:54:01.262] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] ===> Finished Spring Data repository scanning in 22ms. Found 0 JDBC repository interfaces.\n[2020-09-18 18:54:02.009] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] ===> Tomcat initialized with port(s): 3002 (http)\n[2020-09-18 18:54:02.022] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] ===> Initializing ProtocolHandler [\"http-nio-3002\"]\n[2020-09-18 18:54:02.023] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardService] ===> Starting service [Tomcat]\n[2020-09-18 18:54:02.023] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardEngine] ===> Starting Servlet engine: [Apache Tomcat/9.0.35]\n[2020-09-18 18:54:02.115] [INFO] [jmendoza-ThinkPad-T420] [main] [[Tomcat].[localhost].[/]] ===> Initializing Spring embedded WebApplicationContext\n[2020-09-18 18:54:02.115] [INFO] [jmendoza-ThinkPad-T420] [main] [web.context.ContextLoader] ===> Root WebApplicationContext: initialization completed in 1863 ms\n[2020-09-18 18:54:02.541] [INFO] [jmendoza-ThinkPad-T420] [main] [scheduling.concurrent.ThreadPoolTaskExecutor] ===> Initializing ExecutorService 'applicationTaskExecutor'\n[2020-09-18 18:54:02.780] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] ===> HikariPool-1 - Starting...\n[2020-09-18 18:54:02.994] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] ===> HikariPool-1 - Start completed.\n[2020-09-18 18:54:03.139] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] ===> Starting ProtocolHandler [\"http-nio-3002\"]\n[2020-09-18 18:54:03.174] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] ===> Tomcat started on port(s): 3002 (http) with context path ''\n[2020-09-18 18:54:03.189] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.configuration.HexagonalArchitectureConfigurationApplication] ===> Started HexagonalArchitectureConfigurationApplication in 3.973 seconds (JVM running for 5.737)\n[2020-09-18 18:55:19.058] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [[Tomcat].[localhost].[/]] ===> Initializing Spring DispatcherServlet 'dispatcherServlet'\n[2020-09-18 18:55:19.059] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] ===> Initializing Servlet 'dispatcherServlet'\n[2020-09-18 18:55:19.109] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] ===> Completed initialization in 49 ms\n[2020-09-18 18:55:19.415] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] ===> {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"e7f998e53c885f2d\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"POST\",\"uri\":\"http://localhost:3002/v1/orders\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"content-length\":[\"304\"],\"content-type\":[\"application/json\"],\"host\":[\"localhost:3002\"],\"origin\":[\"chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop\"],\"postman-token\":[\"ac8ea573-8463-712c-1cd5-8c575789dbc3\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36\"]},\"body\":{\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-09-18T00:10:12\",\"orderProductList\":[{\"quantity\":\"2\",\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"quantity\":\"1\",\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}]}}\n[2020-09-18 18:55:19.876] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] ===> {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"e7f998e53c885f2d\",\"duration\":682,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 18 Sep 2020 22:55:19 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"36\"}}\n[2020-09-18 18:55:43.478] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-2] [zalando.logbook.Logbook] ===> {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"90a2cd79829db3ea\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/36\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"31da7306-62b6-22f8-37e0-2a251f892506\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36\"]}}\n[2020-09-18 18:55:43.526] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-2] [zalando.logbook.Logbook] ===> {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"90a2cd79829db3ea\",\"duration\":48,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 18 Sep 2020 22:55:43 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"36\",\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-09-18T00:10:12.000+00:00\",\"orderProductList\":[{\"orderProductId\":19,\"quantity\":2,\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"orderProductId\":20,\"quantity\":1,\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}],\"amountOrder\":4399.01}}\n[2020-09-18 18:55:49.901] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-3] [zalando.logbook.Logbook] ===> {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"9e2e64d736239f87\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/37\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"f9b7108d-6dd7-a3a8-acf5-57fed7be75f8\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36\"]}}\n[2020-09-18 18:55:49.924] [ERROR] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-3] [common.exception.CustomExceptionHandler] ===> com.jmendoza.swa.hexagonal.common.exception.GlobalException: getOrder: Order not found :: 37\n[2020-09-18 18:55:49.930] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-3] [zalando.logbook.Logbook] ===> {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"9e2e64d736239f87\",\"duration\":30,\"protocol\":\"HTTP/1.1\",\"status\":500,\"headers\":{\"Connection\":[\"close\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 18 Sep 2020 22:55:49 GMT\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"timestamp\":\"2020-09-18T22:55:49.924+00:00\",\"message\":\"getOrder: Order not found :: 37\",\"details\":\"uri=/v1/orders/37\"}}\n[2020-09-18 18:55:57.137] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-4] [zalando.logbook.Logbook] ===> {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"8646799f85278cc7\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/36\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"676e731d-bfde-122b-485a-c0d11ebfca11\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36\"]}}\n[2020-09-18 18:55:57.145] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-4] [zalando.logbook.Logbook] ===> {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"8646799f85278cc7\",\"duration\":9,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 18 Sep 2020 22:55:57 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"36\",\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-09-18T00:10:12.000+00:00\",\"orderProductList\":[{\"orderProductId\":19,\"quantity\":2,\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"orderProductId\":20,\"quantity\":1,\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}],\"amountOrder\":4399.01}}\n[2020-09-18 18:57:04.151] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [scheduling.concurrent.ThreadPoolTaskExecutor] ===> Shutting down ExecutorService 'applicationTaskExecutor'\n[2020-09-18 18:57:04.153] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] ===> HikariPool-1 - Shutdown initiated...\n[2020-09-18 18:57:04.179] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] ===> HikariPool-1 - Shutdown completed.\n[2020-09-18 19:12:00.790] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.configuration.HexagonalArchitectureConfigurationApplication] ===> Starting HexagonalArchitectureConfigurationApplication on jmendoza-ThinkPad-T420 with PID 1942 (/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order/configuration/target/classes started by jmendoza in /home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order)\n[2020-09-18 19:12:00.804] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.configuration.HexagonalArchitectureConfigurationApplication] ===> No active profile set, falling back to default profiles: default\n[2020-09-18 19:12:01.880] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] ===> Bootstrapping Spring Data JDBC repositories in DEFAULT mode.\n[2020-09-18 19:12:01.899] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] ===> Finished Spring Data repository scanning in 14ms. Found 0 JDBC repository interfaces.\n[2020-09-18 19:12:02.490] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] ===> Tomcat initialized with port(s): 3002 (http)\n[2020-09-18 19:12:02.501] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] ===> Initializing ProtocolHandler [\"http-nio-3002\"]\n[2020-09-18 19:12:02.502] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardService] ===> Starting service [Tomcat]\n[2020-09-18 19:12:02.502] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardEngine] ===> Starting Servlet engine: [Apache Tomcat/9.0.35]\n[2020-09-18 19:12:02.601] [INFO] [jmendoza-ThinkPad-T420] [main] [[Tomcat].[localhost].[/]] ===> Initializing Spring embedded WebApplicationContext\n[2020-09-18 19:12:02.601] [INFO] [jmendoza-ThinkPad-T420] [main] [web.context.ContextLoader] ===> Root WebApplicationContext: initialization completed in 1564 ms\n[2020-09-18 19:12:02.948] [INFO] [jmendoza-ThinkPad-T420] [main] [scheduling.concurrent.ThreadPoolTaskExecutor] ===> Initializing ExecutorService 'applicationTaskExecutor'\n[2020-09-18 19:12:03.469] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] ===> Starting ProtocolHandler [\"http-nio-3002\"]\n[2020-09-18 19:12:03.488] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] ===> Tomcat started on port(s): 3002 (http) with context path ''\n[2020-09-18 19:12:03.500] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.configuration.HexagonalArchitectureConfigurationApplication] ===> Started HexagonalArchitectureConfigurationApplication in 3.643 seconds (JVM running for 5.417)\n[2020-09-18 19:12:41.175] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [[Tomcat].[localhost].[/]] ===> Initializing Spring DispatcherServlet 'dispatcherServlet'\n[2020-09-18 19:12:41.176] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] ===> Initializing Servlet 'dispatcherServlet'\n[2020-09-18 19:12:41.192] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] ===> Completed initialization in 16 ms\n[2020-09-18 19:12:41.344] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] ===> {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"808a493284b4f071\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/36\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"169d375b-96ac-4c72-0fc0-6b9afe8dfc58\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36\"]}}\n[2020-09-18 19:12:41.495] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] ===> {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"808a493284b4f071\",\"duration\":259,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 18 Sep 2020 23:12:41 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"36\",\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-09-18T00:10:12.000+00:00\",\"orderProductList\":[{\"orderProductId\":19,\"quantity\":2,\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"orderProductId\":20,\"quantity\":1,\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}],\"amountOrder\":4399.01}}\n[2020-09-18 19:12:56.461] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-2] [zalando.logbook.Logbook] ===> {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"b611a2d00884de84\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"POST\",\"uri\":\"http://localhost:3002/v1/orders\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"content-length\":[\"304\"],\"content-type\":[\"application/json\"],\"host\":[\"localhost:3002\"],\"origin\":[\"chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop\"],\"postman-token\":[\"d55bc226-c078-a37b-cad2-19222f8bc47b\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36\"]},\"body\":{\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-09-18T00:30:12\",\"orderProductList\":[{\"quantity\":\"2\",\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"quantity\":\"1\",\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}]}}\n[2020-09-18 19:12:56.552] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-2] [zalando.logbook.Logbook] ===> {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"b611a2d00884de84\",\"duration\":93,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 18 Sep 2020 23:12:56 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"37\"}}\n[2020-09-18 19:13:03.370] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-3] [zalando.logbook.Logbook] ===> {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"88a9e0808f9cc457\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/37\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"cefcfe7f-4d3a-b730-02c7-851e5b2ba822\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36\"]}}\n[2020-09-18 19:13:03.388] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-3] [zalando.logbook.Logbook] ===> {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"88a9e0808f9cc457\",\"duration\":18,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 18 Sep 2020 23:13:03 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"37\",\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-09-18T00:30:12.000+00:00\",\"orderProductList\":[{\"orderProductId\":21,\"quantity\":2,\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"orderProductId\":22,\"quantity\":1,\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}],\"amountOrder\":4399.01}}\n[2020-09-18 19:13:06.905] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-4] [zalando.logbook.Logbook] ===> {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"820cbaa656edc6c7\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/37\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"ab49a767-8eba-61f4-557a-e999b2b4c07d\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36\"]}}\n[2020-09-18 19:13:06.923] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-4] [zalando.logbook.Logbook] ===> {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"820cbaa656edc6c7\",\"duration\":19,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 18 Sep 2020 23:13:06 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"37\",\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-09-18T00:30:12.000+00:00\",\"orderProductList\":[{\"orderProductId\":21,\"quantity\":2,\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"orderProductId\":22,\"quantity\":1,\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}],\"amountOrder\":4399.01}}\n[2020-09-18 19:13:11.071] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [scheduling.concurrent.ThreadPoolTaskExecutor] ===> Shutting down ExecutorService 'applicationTaskExecutor'\n"
  },
  {
    "path": "Order/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <parent>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-parent</artifactId>\n        <version>2.3.0.RELEASE</version>\n        <relativePath/> <!-- lookup parent from repository -->\n    </parent>\n\n    <groupId>com.jmendoza.swa.hexagonal</groupId>\n    <artifactId>order</artifactId>\n    <version>1.0</version>\n    <packaging>pom</packaging>\n    <name>hexagonal-architecture-order</name>\n    <description>Example of Hexagonal Architecture - Orders</description>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <modules>\n        <module>application</module>\n        <module>common</module>\n        <module>configuration</module>\n        <module>domain</module>\n        <module>infrastructure</module>\n    </modules>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n            <exclusions>\n                <exclusion>\n                    <groupId>org.springframework.boot</groupId>\n                    <artifactId>spring-boot-starter-logging</artifactId>\n                </exclusion>\n                <exclusion>\n                    <groupId>org.springframework.boot</groupId>\n                    <artifactId>spring-boot-starter-log4j</artifactId>\n                </exclusion>\n            </exclusions>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-log4j2</artifactId>\n            <version>2.2.6.RELEASE</version>\n        </dependency>\n        <dependency>\n            <groupId>com.lmax</groupId>\n            <artifactId>disruptor</artifactId>\n            <version>3.3.6</version>\n        </dependency>\n        <dependency>\n            <groupId>org.projectlombok</groupId>\n            <artifactId>lombok</artifactId>\n            <version>1.18.12</version>\n            <scope>provided</scope>\n        </dependency>\n        <dependency>\n            <groupId>javax.validation</groupId>\n            <artifactId>validation-api</artifactId>\n            <version>2.0.0.Final</version>\n        </dependency>\n        <dependency>\n            <groupId>org.apache.commons</groupId>\n            <artifactId>commons-lang3</artifactId>\n            <version>3.10</version>\n        </dependency>\n        <dependency>\n            <groupId>org.modelmapper</groupId>\n            <artifactId>modelmapper</artifactId>\n            <version>2.3.5</version>\n        </dependency>\n        <dependency>\n            <groupId>com.google.code.gson</groupId>\n            <artifactId>gson</artifactId>\n            <version>2.8.9</version>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n            <exclusions>\n                <exclusion>\n                    <groupId>org.junit.vintage</groupId>\n                    <artifactId>junit-vintage-engine</artifactId>\n                </exclusion>\n            </exclusions>\n        </dependency>\n    </dependencies>\n\n</project>\n"
  },
  {
    "path": "Order/postgresql/1-create_table_orders.sql",
    "content": "-- Table: public.ORDERS\n\n-- DROP TABLE public.\"ORDERS\";\n\nCREATE TABLE public.\"ORDERS\"\n(\n    order_id bigint NOT NULL,\n    customer_id character varying COLLATE pg_catalog.\"default\" NOT NULL,\n    created_at timestamp with time zone NOT NULL,\n    amount_order double precision NOT NULL,\n    CONSTRAINT \"ORDERS_pkey\" PRIMARY KEY (order_id)\n)\n\n    TABLESPACE pg_default;\n\nALTER TABLE public.\"ORDERS\"\n    OWNER to postgres;\n\nGRANT ALL ON TABLE public.\"ORDERS\" TO postgres;"
  },
  {
    "path": "Order/postgresql/2-create_sequence_order_id.sql",
    "content": "-- SEQUENCE: public.order_id_seq\n\n-- DROP SEQUENCE public.order_id_seq;\n\nCREATE SEQUENCE public.order_id_seq\n    INCREMENT 1\n    START 1\n    MINVALUE 1\n    MAXVALUE 9223372036854775807\n    CACHE 1;\n\nALTER SEQUENCE public.order_id_seq\n    OWNER TO postgres;\n\nGRANT ALL ON SEQUENCE public.order_id_seq TO postgres;"
  },
  {
    "path": "Order/postgresql/3-create_function_create_order.sql",
    "content": "-- FUNCTION: public.create_order(character varying, timestamp with time zone, double precision, text)\n\n-- DROP FUNCTION public.create_order(character varying, timestamp with time zone, double precision, text);\n\nCREATE OR REPLACE FUNCTION public.create_order(\n\tp_customer_id character varying,\n\tp_created_at timestamp with time zone,\n\tp_amount_order double precision,\n\tp_order_product text)\n    RETURNS bigint\n    LANGUAGE 'plpgsql'\n\n    COST 100\n    VOLATILE\n\nAS $BODY$\nDECLARE\n    p_order_id bigint;\n    p_order_product_id bigint;\n\tp_json json;\nBEGIN\n    p_order_id := nextval('order_id_seq');\n    INSERT INTO public.\"ORDERS\"(\n        order_id, customer_id, created_at, amount_order)\n    VALUES (p_order_id, p_customer_id, p_created_at, p_amount_order);\n\n\tFOR p_json IN SELECT * FROM json_array_elements(p_order_product::json)\n  \tLOOP\n\t    p_order_product_id := nextval('order_product_id_seq');\n            INSERT INTO public.\"ORDERS_PRODUCTS\"(\n                order_product_id, quantity, product_id, product_price, order_id)\n            VALUES (p_order_product_id, CAST (p_json->>'quantity' AS bigint) , p_json->>'productId', CAST(p_json->>'productPrice' AS double precision), p_order_id);\n  \tEND LOOP;\n\n    RETURN p_order_id;\n\nEND;\n$BODY$;\n\nALTER FUNCTION public.create_order(character varying, timestamp with time zone, double precision, text)\n    OWNER TO postgres;\n"
  },
  {
    "path": "Order/postgresql/4-create_table_order_product.sql",
    "content": "-- Table: public.ORDERS_PRODUCTS\n\n-- DROP TABLE public.\"ORDERS_PRODUCTS\";\n\nCREATE TABLE public.\"ORDERS_PRODUCTS\"\n(\n    order_product_id bigint NOT NULL,\n    quantity bigint NOT NULL,\n    product_id character varying COLLATE pg_catalog.\"default\" NOT NULL,\n    product_price double precision NOT NULL,\n    order_id bigint NOT NULL,\n    CONSTRAINT \"ORDERS_PRODUCTS_pkey\" PRIMARY KEY (order_product_id),\n    CONSTRAINT order_id_fk FOREIGN KEY (order_id)\n        REFERENCES public.\"ORDERS\" (order_id) MATCH SIMPLE\n        ON UPDATE NO ACTION\n        ON DELETE NO ACTION\n        NOT VALID\n)\n\n    TABLESPACE pg_default;\n\nALTER TABLE public.\"ORDERS_PRODUCTS\"\n    OWNER to postgres;\n\nGRANT ALL ON TABLE public.\"ORDERS_PRODUCTS\" TO postgres;"
  },
  {
    "path": "Order/postgresql/5-create_order_product_id_seq.sql",
    "content": "-- SEQUENCE: public.order_product_id_seq\n\n-- DROP SEQUENCE public.order_product_id_seq;\n\nCREATE SEQUENCE public.order_product_id_seq\n    INCREMENT 1\n    START 1\n    MINVALUE 1\n    MAXVALUE 9223372036854775807\n    CACHE 1;\n\nALTER SEQUENCE public.order_product_id_seq\n    OWNER TO postgres;\n\nGRANT ALL ON SEQUENCE public.order_product_id_seq TO postgres;"
  },
  {
    "path": "Order/postgresql/6-create_function_get_order.sql",
    "content": "-- FUNCTION: public.get_order(bigint)\n\n-- DROP FUNCTION public.get_order(bigint);\n\nCREATE OR REPLACE FUNCTION public.get_order(\n    p_order_id bigint)\n    RETURNS json\n    LANGUAGE 'plpgsql'\n\n    COST 100\n    VOLATILE\n\nAS $BODY$\nDECLARE\n    json_op json;\n    json_result json;\nBEGIN\n\n    json_op:= (SELECT\n                   json_agg(\n                           json_build_object(\n                                   'orderProductId',OP.order_product_id,\n                                   'quantity', OP.quantity,\n                                   'productId',OP.product_id,\n                                   'productPrice',OP.product_price))\n               FROM public.\"ORDERS_PRODUCTS\" AS OP\n               WHERE OP.order_id = p_order_id);\n\n    json_result:= (SELECT\n                       json_build_object(\n                               'orderId', O.order_id,\n                               'customerId', O.customer_id,\n                               'createdAt', O.created_at,\n                               'orderProductList',json_op,\n                               'amountOrder', O.amount_order)\n                   FROM public.\"ORDERS\" AS O\n                   WHERE O.order_id = p_order_id);\n\n    RETURN json_result;\n\nEND;\n$BODY$;\n\nALTER FUNCTION public.get_order(bigint)\n    OWNER TO postgres;\n\nGRANT EXECUTE ON FUNCTION public.get_order(bigint) TO postgres;\n\nGRANT EXECUTE ON FUNCTION public.get_order(bigint) TO PUBLIC;\n\n"
  },
  {
    "path": "Product/.gitignore",
    "content": "HELP.md\ntarget/\n!.mvn/wrapper/maven-wrapper.jar\n!**/src/main/**\n!**/src/test/**\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\n\n### NetBeans ###\n/nbproject/private/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/\nbuild/\n\n### VS Code ###\n.vscode/\n"
  },
  {
    "path": "Product/README.md",
    "content": "# Products Microservice\n\nExample of Products Microservice applying Hexagonal Architecture pattern, Domain Driven Design (DDD) and SOLID principles.\n\nThis example was implemented with Spring Boot, MongoDB Atlas. The microservices are deployed locally and the DB in the cloud.\n\n## MongoDB Atlas\n- Signup free at https://www.mongodb.com/cloud/atlas/signup \n- Create DATABASE and COLLECTION (Optional)\n- Create Database User\n- Add your IP Address (public) in IP Whitelist, Network Access\n\n![Screenshot](prtsc/Product-1.png)\n\n## Configure your application.properties\n\n![Screenshot](prtsc/Product-2.png)\n\n## Create Products\n\n**Postman**\n\n![Screenshot](prtsc/Product-3.png)\n\n![Screenshot](prtsc/Product-3.1.png)\n\n\n**MongoDB Atlas**\n\n![Screenshot](prtsc/Product-3.2.png)\n\n## Get Products\n\n**Postman**\n\n![Screenshot](prtsc/Product-4.png)\n\n"
  },
  {
    "path": "Product/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <parent>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-parent</artifactId>\n        <version>2.3.0.RELEASE</version>\n        <relativePath/> <!-- lookup parent from repository -->\n    </parent>\n    <groupId>com.jmendoza.swa.hexagonal</groupId>\n    <artifactId>product</artifactId>\n    <version>1.0</version>\n    <name>product</name>\n    <description>Example of Hexagonal Architecture - Products</description>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n            <exclusions>\n                <exclusion>\n                    <groupId>org.springframework.boot</groupId>\n                    <artifactId>spring-boot-starter-logging</artifactId>\n                </exclusion>\n                <exclusion>\n                    <groupId>org.springframework.boot</groupId>\n                    <artifactId>spring-boot-starter-log4j</artifactId>\n                </exclusion>\n            </exclusions>\n        </dependency>\n        <dependency>\n            <groupId>org.projectlombok</groupId>\n            <artifactId>lombok</artifactId>\n            <scope>provided</scope>\n        </dependency>\n        <dependency>\n            <groupId>javax.validation</groupId>\n            <artifactId>validation-api</artifactId>\n            <version>2.0.0.Final</version>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-data-mongodb</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-actuator-autoconfigure</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.apache.commons</groupId>\n            <artifactId>commons-lang3</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.modelmapper</groupId>\n            <artifactId>modelmapper</artifactId>\n            <version>2.3.5</version>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-log4j2</artifactId>\n            <version>2.2.6.RELEASE</version>\n        </dependency>\n        <dependency>\n            <groupId>com.lmax</groupId>\n            <artifactId>disruptor</artifactId>\n            <version>3.3.6</version>\n        </dependency>\n        <dependency>\n            <groupId>org.zalando</groupId>\n            <artifactId>logbook-spring-boot-starter</artifactId>\n            <version>2.1.0</version>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n            <exclusions>\n                <exclusion>\n                    <groupId>org.junit.vintage</groupId>\n                    <artifactId>junit-vintage-engine</artifactId>\n                </exclusion>\n            </exclusions>\n        </dependency>\n    </dependencies>\n\n    <build>\n        <plugins>\n            <plugin>\n                <groupId>org.springframework.boot</groupId>\n                <artifactId>spring-boot-maven-plugin</artifactId>\n            </plugin>\n        </plugins>\n    </build>\n\n</project>\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/ProductApplication.java",
    "content": "package com.jmendoza.swa.hexagonal.product;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication\npublic class ProductApplication {\n\n    public static void main(String[] args) {\n        SpringApplication.run(ProductApplication.class, args);\n    }\n\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/application/rest/controller/ProductController.java",
    "content": "package com.jmendoza.swa.hexagonal.product.application.rest.controller;\n\nimport com.jmendoza.swa.hexagonal.product.application.rest.response.CreateProductResponse;\nimport com.jmendoza.swa.hexagonal.product.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.product.common.exception.ParameterNotFoundException;\nimport com.jmendoza.swa.hexagonal.product.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.inbound.CreateProductUseCase;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.inbound.DeleteProductUseCase;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.inbound.GetProductUseCase;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.inbound.GetProductsUseCase;\nimport lombok.AllArgsConstructor;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.validation.Valid;\nimport java.util.List;\n\n@RestController\n@RequestMapping(\"/v1/products\")\n@AllArgsConstructor\npublic class ProductController {\n\n    private final CreateProductUseCase createProductUseCase;\n    private final DeleteProductUseCase deleteProductUseCase;\n    private final GetProductsUseCase getProductsUseCase;\n    private final GetProductUseCase getProductUseCase;\n\n    @PostMapping\n    public ResponseEntity<CreateProductResponse> createProduct(@Valid @RequestBody Product product) throws GlobalException, ParameterNotFoundException {\n        createProductUseCase.createProduct(product);\n        return ResponseEntity.ok().body(CreateProductResponse.builder().id(product.getId()).build());\n    }\n\n    @DeleteMapping(\"/{id}\")\n    public ResponseEntity deleteCustomer(@PathVariable(value = \"id\") String id) throws ResourceNotFoundException {\n        deleteProductUseCase.deleteProduct(id);\n        return ResponseEntity.noContent().build();\n    }\n\n    @GetMapping\n    public ResponseEntity<List<Product>> getProducts() throws ResourceNotFoundException {\n        List<Product> productList = getProductsUseCase.getProducts();\n        return ResponseEntity.ok().body(productList);\n    }\n\n    @GetMapping(\"/{id}\")\n    public ResponseEntity<Product> getProduct(@PathVariable(value = \"id\") String id) throws ResourceNotFoundException {\n        Product product = getProductUseCase.getProduct(id);\n        return ResponseEntity.ok().body(product);\n    }\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/application/rest/request/README.md",
    "content": "*In this directory you can add specialized requests, to only request minimum data, for example CreateProductRequest.*\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/application/rest/response/CreateProductResponse.java",
    "content": "package com.jmendoza.swa.hexagonal.product.application.rest.response;\n\nimport com.fasterxml.jackson.annotation.JsonInclude;\nimport lombok.Builder;\nimport lombok.Getter;\nimport lombok.Setter;\n\n@Getter\n@Setter\n@Builder\n@JsonInclude(JsonInclude.Include.NON_NULL)\npublic class CreateProductResponse {\n    private String id;\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/application/soap/README.md",
    "content": "*In this directory you can add another type of adapter to access the domain, for example a ProductController class to expose SOAP.*\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/common/config/README.md",
    "content": "*In this directory you can add settings for the infrastructure layer or the application layer.*\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/common/constants/ProductConstanst.java",
    "content": "package com.jmendoza.swa.hexagonal.product.common.constants;\n\npublic class ProductConstanst {\n    public static final String PRODUCT_NOT_FOUND = \"Product not found :: \";\n    public static final String REQUIRED_PARAMETER = \"Required parameter \";\n    public static final String IS_NOT_PRESENT = \" is not present\";\n    public static final double D_2 = 0.0;\n    public static final int INT = 0;\n    public static final String THIS_PRODUCT_IS_ALREADY_REGISTERED = \"This Product is already registered \";\n    public static final String PRODUCTS_NOT_FOUND = \"Products not found\";\n\n    private ProductConstanst() {\n    }\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/common/customannotations/UseCase.java",
    "content": "package com.jmendoza.swa.hexagonal.product.common.customannotations;\n\nimport org.springframework.core.annotation.AliasFor;\nimport org.springframework.stereotype.Component;\n\nimport java.lang.annotation.*;\n\n@Target({ElementType.TYPE})\n@Retention(RetentionPolicy.RUNTIME)\n@Documented\n@Component\npublic @interface UseCase {\n\n    @AliasFor(annotation = Component.class)\n    String value() default \"\";\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/common/exception/CustomExceptionHandler.java",
    "content": "package com.jmendoza.swa.hexagonal.product.common.exception;\n\nimport org.apache.logging.log4j.LogManager;\nimport org.apache.logging.log4j.Logger;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.ControllerAdvice;\nimport org.springframework.web.bind.annotation.ExceptionHandler;\nimport org.springframework.web.context.request.WebRequest;\n\nimport java.util.Date;\n\n@ControllerAdvice\npublic class CustomExceptionHandler {\n\n    private static final Logger loggerException = LogManager.getLogger(CustomExceptionHandler.class);\n\n    @ExceptionHandler(ResourceNotFoundException.class)\n    public ResponseEntity resourceNotFoundException(ResourceNotFoundException ex, WebRequest request) {\n        ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false));\n        loggerException.error(ex);\n        return new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND);\n    }\n\n    @ExceptionHandler({GlobalException.class})\n    public ResponseEntity globalExceptionHandler(GlobalException ex, WebRequest request) {\n        ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false));\n        loggerException.error(ex);\n        return new ResponseEntity<>(errorDetails, HttpStatus.INTERNAL_SERVER_ERROR);\n    }\n\n    @ExceptionHandler({ParameterNotFoundException.class})\n    public ResponseEntity parameterNotFoundExceptionHandler(ParameterNotFoundException ex, WebRequest request) {\n        ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false));\n        loggerException.error(ex);\n        return new ResponseEntity<>(errorDetails, HttpStatus.BAD_REQUEST);\n    }\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/common/exception/ErrorDetails.java",
    "content": "package com.jmendoza.swa.hexagonal.product.common.exception;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\nimport java.util.Date;\n\n@Getter\n@AllArgsConstructor\npublic class ErrorDetails {\n    private Date timestamp;\n    private String message;\n    private String details;\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/common/exception/GlobalException.java",
    "content": "package com.jmendoza.swa.hexagonal.product.common.exception;\n\nimport org.springframework.http.HttpStatus;\nimport org.springframework.web.bind.annotation.ResponseStatus;\n\n@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)\npublic class GlobalException extends Exception {\n    private static final long serialVersionUID = 1L;\n\n    public GlobalException(String message) {\n        super(message);\n    }\n\n    public GlobalException(String message, Throwable cause) {\n        super(message, cause);\n    }\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/common/exception/ParameterNotFoundException.java",
    "content": "package com.jmendoza.swa.hexagonal.product.common.exception;\n\nimport org.springframework.http.HttpStatus;\nimport org.springframework.web.bind.annotation.ResponseStatus;\n\n@ResponseStatus(value = HttpStatus.BAD_REQUEST)\npublic class ParameterNotFoundException extends Exception {\n\n    private static final long serialVersionUID = 1L;\n\n    public ParameterNotFoundException(String message) {\n        super(message);\n    }\n\n    public ParameterNotFoundException(String message, Throwable cause) {\n        super(message, cause);\n    }\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/common/exception/ResourceNotFoundException.java",
    "content": "package com.jmendoza.swa.hexagonal.product.common.exception;\n\nimport org.springframework.http.HttpStatus;\nimport org.springframework.web.bind.annotation.ResponseStatus;\n\n@ResponseStatus(value = HttpStatus.NOT_FOUND)\npublic class ResourceNotFoundException extends Exception {\n\n    private static final long serialVersionUID = 1L;\n\n    public ResourceNotFoundException(String message) {\n        super(message);\n    }\n\n    public ResourceNotFoundException(String message, Throwable cause) {\n        super(message, cause);\n    }\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/domain/model/Product.java",
    "content": "package com.jmendoza.swa.hexagonal.product.domain.model;\n\nimport lombok.Getter;\nimport lombok.Setter;\nimport lombok.ToString;\n\n@Getter\n@Setter\n@ToString\npublic class Product {\n    private String id;\n    private String productName;\n    private String productDescription;\n    private Double price;\n    private String createdAt;\n    private String serialNumber;\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/domain/ports/inbound/CreateProductUseCase.java",
    "content": "package com.jmendoza.swa.hexagonal.product.domain.ports.inbound;\n\nimport com.jmendoza.swa.hexagonal.product.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.product.common.exception.ParameterNotFoundException;\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\n\npublic interface CreateProductUseCase {\n    void createProduct(Product product) throws ParameterNotFoundException, GlobalException;\n}"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/domain/ports/inbound/DeleteProductUseCase.java",
    "content": "package com.jmendoza.swa.hexagonal.product.domain.ports.inbound;\n\nimport com.jmendoza.swa.hexagonal.product.common.exception.ResourceNotFoundException;\n\npublic interface DeleteProductUseCase {\n    void deleteProduct(String id) throws ResourceNotFoundException;\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/domain/ports/inbound/GetProductUseCase.java",
    "content": "package com.jmendoza.swa.hexagonal.product.domain.ports.inbound;\n\nimport com.jmendoza.swa.hexagonal.product.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\n\npublic interface GetProductUseCase {\n\n    Product getProduct(String id) throws ResourceNotFoundException;\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/domain/ports/inbound/GetProductsUseCase.java",
    "content": "package com.jmendoza.swa.hexagonal.product.domain.ports.inbound;\n\nimport com.jmendoza.swa.hexagonal.product.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\n\nimport java.util.List;\n\npublic interface GetProductsUseCase {\n    List<Product> getProducts() throws ResourceNotFoundException;\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/domain/ports/outbound/CreateProductPort.java",
    "content": "package com.jmendoza.swa.hexagonal.product.domain.ports.outbound;\n\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\n\npublic interface CreateProductPort {\n    void createProduct(Product product);\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/domain/ports/outbound/DeleteProductPort.java",
    "content": "package com.jmendoza.swa.hexagonal.product.domain.ports.outbound;\n\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\n\npublic interface DeleteProductPort {\n    void deleteProduct(Product product);\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/domain/ports/outbound/ExistsProductPort.java",
    "content": "package com.jmendoza.swa.hexagonal.product.domain.ports.outbound;\n\npublic interface ExistsProductPort {\n    boolean existsBySerialNumber(String serialNumber);\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/domain/ports/outbound/GetProductIdPort.java",
    "content": "package com.jmendoza.swa.hexagonal.product.domain.ports.outbound;\n\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\n\nimport java.util.Optional;\n\npublic interface GetProductIdPort {\n    Optional<Product> getProductById(String id);\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/domain/ports/outbound/GetProductsPort.java",
    "content": "package com.jmendoza.swa.hexagonal.product.domain.ports.outbound;\n\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\n\nimport java.util.List;\n\npublic interface GetProductsPort {\n    List<Product> getProducts();\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/domain/services/CreateProductService.java",
    "content": "package com.jmendoza.swa.hexagonal.product.domain.services;\n\nimport com.jmendoza.swa.hexagonal.product.common.constants.ProductConstanst;\nimport com.jmendoza.swa.hexagonal.product.common.customannotations.UseCase;\nimport com.jmendoza.swa.hexagonal.product.common.exception.GlobalException;\nimport com.jmendoza.swa.hexagonal.product.common.exception.ParameterNotFoundException;\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.inbound.CreateProductUseCase;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.outbound.CreateProductPort;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.outbound.ExistsProductPort;\nimport lombok.AllArgsConstructor;\nimport org.apache.commons.lang3.StringUtils;\n\n@AllArgsConstructor\n@UseCase\npublic class CreateProductService implements CreateProductUseCase {\n\n    private CreateProductPort createProductPort;\n    private ExistsProductPort existsProductPort;\n\n    @Override\n    public void createProduct(Product product) throws ParameterNotFoundException, GlobalException {\n\n        if (StringUtils.isBlank(product.getProductName()))\n            getMessageParameterNotFoundException(\"productName\");\n        if (StringUtils.isBlank(product.getProductDescription()))\n            getMessageParameterNotFoundException(\"productDescription\");\n        if (product.getPrice() == null || Double.compare(product.getPrice(), ProductConstanst.D_2) <= ProductConstanst.INT)\n            getMessageParameterNotFoundException(\"price\");\n        if (StringUtils.isBlank(product.getCreatedAt()))\n            getMessageParameterNotFoundException(\"createdAt\");\n        if (StringUtils.isBlank(product.getSerialNumber()))\n            getMessageParameterNotFoundException(\"serialNumber\");\n\n        if (existsProductPort.existsBySerialNumber(product.getSerialNumber()))\n            throw new GlobalException(ProductConstanst.THIS_PRODUCT_IS_ALREADY_REGISTERED);\n\n        createProductPort.createProduct(product);\n    }\n\n    private void getMessageParameterNotFoundException(String parameter) throws ParameterNotFoundException {\n        throw new ParameterNotFoundException(ProductConstanst.REQUIRED_PARAMETER + \"\\\"\" + parameter + \"\\\"\" + ProductConstanst.IS_NOT_PRESENT);\n    }\n}"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/domain/services/DeleteProductService.java",
    "content": "package com.jmendoza.swa.hexagonal.product.domain.services;\n\nimport com.jmendoza.swa.hexagonal.product.common.constants.ProductConstanst;\nimport com.jmendoza.swa.hexagonal.product.common.customannotations.UseCase;\nimport com.jmendoza.swa.hexagonal.product.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.inbound.DeleteProductUseCase;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.outbound.DeleteProductPort;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.outbound.GetProductIdPort;\nimport lombok.AllArgsConstructor;\n\n@AllArgsConstructor\n@UseCase\npublic class DeleteProductService implements DeleteProductUseCase {\n\n    private GetProductIdPort getProductIdPort;\n    private DeleteProductPort deleteProductPort;\n\n    @Override\n    public void deleteProduct(String id) throws ResourceNotFoundException {\n        Product product = getProductIdPort.getProductById(id)\n                .orElseThrow(() -> new ResourceNotFoundException(ProductConstanst.PRODUCT_NOT_FOUND + id));\n        deleteProductPort.deleteProduct(product);\n    }\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/domain/services/GetProductService.java",
    "content": "package com.jmendoza.swa.hexagonal.product.domain.services;\n\nimport com.jmendoza.swa.hexagonal.product.common.constants.ProductConstanst;\nimport com.jmendoza.swa.hexagonal.product.common.customannotations.UseCase;\nimport com.jmendoza.swa.hexagonal.product.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.inbound.GetProductUseCase;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.outbound.GetProductIdPort;\nimport lombok.AllArgsConstructor;\n\n@AllArgsConstructor\n@UseCase\npublic class GetProductService implements GetProductUseCase {\n\n    private GetProductIdPort getProductIdPort;\n\n    @Override\n    public Product getProduct(String id) throws ResourceNotFoundException {\n        return getProductIdPort.getProductById(id)\n                .orElseThrow(() -> new ResourceNotFoundException(ProductConstanst.PRODUCT_NOT_FOUND + id));\n    }\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/domain/services/GetProductsService.java",
    "content": "package com.jmendoza.swa.hexagonal.product.domain.services;\n\nimport com.jmendoza.swa.hexagonal.product.common.constants.ProductConstanst;\nimport com.jmendoza.swa.hexagonal.product.common.customannotations.UseCase;\nimport com.jmendoza.swa.hexagonal.product.common.exception.ResourceNotFoundException;\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.inbound.GetProductsUseCase;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.outbound.GetProductsPort;\nimport lombok.AllArgsConstructor;\n\nimport java.util.List;\n\n@AllArgsConstructor\n@UseCase\npublic class GetProductsService implements GetProductsUseCase {\n\n    private GetProductsPort getProductsPort;\n\n    @Override\n    public List<Product> getProducts() throws ResourceNotFoundException {\n\n        List<Product> productList = getProductsPort.getProducts();\n        if (productList.isEmpty())\n            throw new ResourceNotFoundException(ProductConstanst.PRODUCTS_NOT_FOUND);\n\n        return productList;\n    }\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/infrastructure/databases/mongo/CreateProductAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.product.infrastructure.databases.mongo;\n\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.outbound.CreateProductPort;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class CreateProductAdapter implements CreateProductPort {\n    @Autowired\n    private ProductRepository productRepository;\n\n    @Override\n    public void createProduct(Product product) {\n        productRepository.save(product);\n    }\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/infrastructure/databases/mongo/DeleteProductAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.product.infrastructure.databases.mongo;\n\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.outbound.DeleteProductPort;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class DeleteProductAdapter implements DeleteProductPort {\n    @Autowired\n    private ProductRepository productRepository;\n\n    @Override\n    public void deleteProduct(Product product) {\n        productRepository.delete(product);\n    }\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/infrastructure/databases/mongo/ExistsProductAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.product.infrastructure.databases.mongo;\n\nimport com.jmendoza.swa.hexagonal.product.domain.ports.outbound.ExistsProductPort;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class ExistsProductAdapter implements ExistsProductPort {\n\n    @Autowired\n    private ProductRepository productRepository;\n\n    @Override\n    public boolean existsBySerialNumber(String serialNumber) {\n        return productRepository.existsBySerialNumber(serialNumber);\n    }\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/infrastructure/databases/mongo/GetProductIdAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.product.infrastructure.databases.mongo;\n\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.outbound.GetProductIdPort;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\nimport java.util.Optional;\n\n@Component\npublic class GetProductIdAdapter implements GetProductIdPort {\n\n    @Autowired\n    private ProductRepository productRepository;\n\n    @Override\n    public Optional<Product> getProductById(String id) {\n        return productRepository.findById(id);\n    }\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/infrastructure/databases/mongo/GetProductsAdapter.java",
    "content": "package com.jmendoza.swa.hexagonal.product.infrastructure.databases.mongo;\n\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\nimport com.jmendoza.swa.hexagonal.product.domain.ports.outbound.GetProductsPort;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\nimport java.util.List;\n\n@Component\npublic class GetProductsAdapter implements GetProductsPort {\n\n    @Autowired\n    private ProductRepository productRepository;\n\n    @Override\n    public List<Product> getProducts() {\n        return productRepository.findAll();\n    }\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/infrastructure/databases/mongo/ProductRepository.java",
    "content": "package com.jmendoza.swa.hexagonal.product.infrastructure.databases.mongo;\n\nimport com.jmendoza.swa.hexagonal.product.domain.model.Product;\nimport org.springframework.data.mongodb.repository.MongoRepository;\nimport org.springframework.stereotype.Repository;\n\n@Repository\npublic interface ProductRepository extends MongoRepository<Product, String> {\n    boolean existsBySerialNumber(String serialNumber);\n}\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/infrastructure/databases/postgresql/README.md",
    "content": "*In this directory you can add another type of DB adapter for example PostgreSQL.*\n"
  },
  {
    "path": "Product/src/main/java/com/jmendoza/swa/hexagonal/product/infrastructure/messagebroker/README.md",
    "content": "*In this directory you can add another type of adapter to send messages in a message broker, for example Kafka, RabbitMQ.*\n"
  },
  {
    "path": "Product/src/main/resources/application.properties",
    "content": "# Application Server\nserver.port=3001\n\n# MongoDB Atlas\nspring.data.mongodb.uri=mongodb+srv://jmendoza:zuZYkSpMIpSGqgLD@cluster0-7rxkw.mongodb.net/product?retryWrites=true&w=majority&maxIdleTimeMS=600000&connectTimeoutMS=60000\n\n# Logbook: HTTP request and response logging\nlogging.level.org.zalando.logbook = TRACE\n"
  },
  {
    "path": "Product/src/main/resources/log4j2.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- Don't forget to set system property -Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector\n     to make all loggers asynchronous. -->\n\n<!-- No need to set system property \"log4j2.contextSelector\" to any value\n     when using <asyncLogger> or <asyncRoot>. -->\n\n<Configuration status=\"WARN\" monitorInterval=\"30\">\n    <Properties>\n        <Property name=\"LOG_PATTERN\">\n            [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [${hostName}] [%t] [%c{3}] ==> %m%n\n        </Property>\n    </Properties>\n    <Appenders>\n        <Console name=\"ConsoleAppender\" target=\"SYSTEM_OUT\" follow=\"true\">\n            <PatternLayout pattern=\"${LOG_PATTERN}\"/>\n        </Console>\n        <!-- Rolling File Appender -->\n        <RollingFile name=\"FileAppender\" fileName=\"logs/Product.log\"\n                     filePattern=\"logs/Product-%d{yyyy-MM-dd}-%i.log\">\n            <PatternLayout>\n                <Pattern>${LOG_PATTERN}</Pattern>\n            </PatternLayout>\n            <Policies>\n                <TimeBasedTriggeringPolicy interval=\"1\"/>\n                <SizeBasedTriggeringPolicy size=\"10MB\"/>\n            </Policies>\n            <DefaultRolloverStrategy max=\"10\"/>\n        </RollingFile>\n    </Appenders>\n    <Loggers>\n        <AsyncLogger name=\"com.jmendoza.swa.hexagonal.product\" level=\"debug\" additivity=\"false\">\n            <AppenderRef ref=\"ConsoleAppender\"/>\n            <AppenderRef ref=\"FileAppender\"/>\n        </AsyncLogger>\n        <AsyncLogger name=\"org.hibernate\" level=\"info\" additivity=\"false\">\n            <AppenderRef ref=\"ConsoleAppender\"/>\n            <AppenderRef ref=\"FileAppender\"/>\n        </AsyncLogger>\n\n        <Root level=\"info\">\n            <AppenderRef ref=\"ConsoleAppender\"/>\n            <AppenderRef ref=\"FileAppender\"/>\n        </Root>\n    </Loggers>\n</Configuration>\n"
  },
  {
    "path": "Product/src/test/java/com/jmendoza/swa/hexagonal/product/ProductApplicationTests.java",
    "content": "package com.jmendoza.swa.hexagonal.product;\n\nimport org.junit.jupiter.api.Test;\nimport org.springframework.boot.test.context.SpringBootTest;\n\n@SpringBootTest\nclass ProductApplicationTests {\n\n    @Test\n    void contextLoads() {\n    }\n\n}\n"
  },
  {
    "path": "README.md",
    "content": "# Hexagonal-Architecture-DDD\n\nPorts and Adapters or also known as Hexagonal Architecture, is a popular architecture invented by Alistair Cockburn in 2005.\n\nExample of how to use Hexagonal Architecture and the basic of Domain Driven Design (DDD) \n\nThis example is made with Spring Boot, MongoDB, PostgreSQL\n\n## Domain Driven Design (DDD)\n\nDomain-Driven Design is an approach to software development that centers the development on programming a domain model that has a rich understanding of the processes and rules of a domain.\n\nBounded Context is a central pattern in Domain-Driven Design. It is the focus of DDD's strategic design section which is all about dealing with large models and teams. DDD deals with large models by dividing them into different Bounded Contexts and being explicit about their interrelationships.\n\n![Screenshot](prtsc/Hexa-Arch-DDD-1.png)\n\n*Reference:*\n- https://martinfowler.com/tags/domain%20driven%20design.html\n\n## Hexagonal Architecture\n\nThe hexagonal architecture, or ports and adapters architecture, is an architectural pattern used in software design. It aims at creating loosely coupled application components that can be easily connected to their software environment by means of ports and adapters. This makes components exchangeable at any level and facilitates test automation.\n\nThe business logic interacts with other components through ports and adapters. This way, we can change the underlying technologies without having to modify the application core.\n\n**The hexagonal architecture is based on three principles and techniques:**\n\n1. Explicitly separate Application, Domain, and Infrastructure\n2. Dependencies are going from Application and Infrastructure to the Domain\n3. We isolate the boundaries by using Ports and Adapters\n\nNote: The words Application, Domain and Infrastructure do not come from the original article but from the frequent use of hexagonal architecture by Domain-Driven Design practitioners. \n\n![Screenshot](prtsc/Hexa-Arch-DDD-2.png)\n\n**Note: A port in Java is an interface. An adapter is one implementation of that interface.**\n\n### Domain Layer, in the center\n\n- The domain layer represents the inside of the application and provides ports to interact with application use cases (business logic).\n\n- This is the part that we want to isolate from both left and right sides. It contains all the code that concerns and implements business logic (use cases).\n \n- Because domain objects have no dependencies on other layers of the application, changes in other layers don’t affect them.\n\n### Application Layer, on the left\n\n- The application layer provides different adapters for outside entities to interact with the domain through the port.\n\n- This is the side through which the user or external programs will interact with the application. It contains the code that allows these interactions. Typically, your user interface code, your HTTP routes for an API, your JSON serializations to programs that consume your application are here.\n\n### Infrastructure Layer, on the right\n\n- Provide adapters and server-side logic to interact with the application from the right side. Server-side entities, such as a database or other run-time devices, use these adapters to interact with the domain.\n\n- It contains essential infrastructure details such as the code that interacts with your database, makes calls to the file system, or code that handles HTTP calls to other applications on which you depend for example.\n\n*Reference:*\n- https://en.wikipedia.org/wiki/Hexagonal_architecture_(software)\n- https://dzone.com/articles/hexagonal-architecture-in-java-2\n- https://blog.octo.com/en/hexagonal-architecture-three-principles-and-an-implementation-example/#principles\n\n## Microservices Architecture\n\n![Screenshot](prtsc/Hexagonal-Architecture-Microservices.jpg)\n\nIn our example we will use the basic architecture above without API Gateway. Customer, Product, Order do not necessarily have to be in different databases, it depends on the bounded context. The main objective is to highlight the use of Hexagonal Architecture in the microservices code. \n\nAll microservices are implemented with Spring Boot, however microservices can be implemented with different technologies.\n"
  },
  {
    "path": "logs/Customer.log",
    "content": "[2020-06-05 19:35:13.967] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.customer.CustomerApplication] | Starting CustomerApplication on jmendoza-ThinkPad-T420 with PID 21851 (/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Customer/target/classes started by jmendoza in /home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD)\n[2020-06-05 19:35:13.985] [DEBUG] [jmendoza-ThinkPad-T420] [main] [hexagonal.customer.CustomerApplication] | Running with Spring Boot v2.3.0.RELEASE, Spring v5.2.6.RELEASE\n[2020-06-05 19:35:13.987] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.customer.CustomerApplication] | No active profile set, falling back to default profiles: default\n[2020-06-05 19:35:16.606] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.\n[2020-06-05 19:35:16.751] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Finished Spring Data repository scanning in 138ms. Found 1 MongoDB repository interfaces.\n[2020-06-05 19:35:19.121] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat initialized with port(s): 3000 (http)\n[2020-06-05 19:35:19.135] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Initializing ProtocolHandler [\"http-nio-3000\"]\n[2020-06-05 19:35:19.135] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardService] | Starting service [Tomcat]\n[2020-06-05 19:35:19.136] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardEngine] | Starting Servlet engine: [Apache Tomcat/9.0.35]\n[2020-06-05 19:35:19.312] [INFO] [jmendoza-ThinkPad-T420] [main] [[Tomcat].[localhost].[/]] | Initializing Spring embedded WebApplicationContext\n[2020-06-05 19:35:19.312] [INFO] [jmendoza-ThinkPad-T420] [main] [web.context.ContextLoader] | Root WebApplicationContext: initialization completed in 5088 ms\n[2020-06-05 19:35:20.056] [INFO] [jmendoza-ThinkPad-T420] [main] [mongodb.driver.cluster] | Cluster created with settings {hosts=[127.0.0.1:27017], srvHost=cluster0-7rxkw.mongodb.net, mode=MULTIPLE, requiredClusterType=REPLICA_SET, serverSelectionTimeout='30000 ms', requiredReplicaSetName='Cluster0-shard-0'}\n[2020-06-05 19:35:20.156] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad6b8dfc52759bdfbc2af', description='null'}-srv-cluster0-7rxkw.mongodb.net] [mongodb.driver.cluster] | Adding discovered server cluster0-shard-00-00-7rxkw.mongodb.net:27017 to client view of cluster\n[2020-06-05 19:35:20.207] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad6b8dfc52759bdfbc2af', description='null'}-srv-cluster0-7rxkw.mongodb.net] [mongodb.driver.cluster] | Adding discovered server cluster0-shard-00-01-7rxkw.mongodb.net:27017 to client view of cluster\n[2020-06-05 19:35:20.209] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad6b8dfc52759bdfbc2af', description='null'}-srv-cluster0-7rxkw.mongodb.net] [mongodb.driver.cluster] | Adding discovered server cluster0-shard-00-02-7rxkw.mongodb.net:27017 to client view of cluster\n[2020-06-05 19:35:21.354] [INFO] [jmendoza-ThinkPad-T420] [main] [scheduling.concurrent.ThreadPoolTaskExecutor] | Initializing ExecutorService 'applicationTaskExecutor'\n[2020-06-05 19:35:21.686] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad6b8dfc52759bdfbc2af', description='null'}-cluster0-shard-00-02-7rxkw.mongodb.net:27017] [mongodb.driver.connection] | Opened connection [connectionId{localValue:3, serverValue:117268}] to cluster0-shard-00-02-7rxkw.mongodb.net:27017\n[2020-06-05 19:35:21.732] [INFO] [jmendoza-ThinkPad-T420] [main] [endpoint.web.EndpointLinksResolver] | Exposing 2 endpoint(s) beneath base path '/actuator'\n[2020-06-05 19:35:21.770] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Starting ProtocolHandler [\"http-nio-3000\"]\n[2020-06-05 19:35:21.810] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat started on port(s): 3000 (http) with context path ''\n[2020-06-05 19:35:21.827] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.customer.CustomerApplication] | Started CustomerApplication in 8.835 seconds (JVM running for 12.734)\n[2020-06-05 19:35:21.881] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad6b8dfc52759bdfbc2af', description='null'}-cluster0-shard-00-02-7rxkw.mongodb.net:27017] [mongodb.driver.cluster] | Monitor thread successfully connected to server with description ServerDescription{address=cluster0-shard-00-02-7rxkw.mongodb.net:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=8, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=192045575, setName='Cluster0-shard-0', canonicalAddress=cluster0-shard-00-02-7rxkw.mongodb.net:27017, hosts=[cluster0-shard-00-02-7rxkw.mongodb.net:27017, cluster0-shard-00-01-7rxkw.mongodb.net:27017, cluster0-shard-00-00-7rxkw.mongodb.net:27017], passives=[], arbiters=[], primary='cluster0-shard-00-01-7rxkw.mongodb.net:27017', tagSet=TagSet{[Tag{name='nodeType', value='ELECTABLE'}, Tag{name='provider', value='AWS'}, Tag{name='region', value='US_EAST_1'}]}, electionId=null, setVersion=4, lastWriteDate=Fri Jun 05 19:35:02 VET 2020, lastUpdateTimeNanos=16852466771751}\n[2020-06-05 19:35:22.285] [INFO] [jmendoza-ThinkPad-T420] [RMI TCP Connection(5)-127.0.0.1] [[Tomcat].[localhost].[/]] | Initializing Spring DispatcherServlet 'dispatcherServlet'\n[2020-06-05 19:35:22.286] [INFO] [jmendoza-ThinkPad-T420] [RMI TCP Connection(5)-127.0.0.1] [web.servlet.DispatcherServlet] | Initializing Servlet 'dispatcherServlet'\n[2020-06-05 19:35:22.294] [INFO] [jmendoza-ThinkPad-T420] [RMI TCP Connection(5)-127.0.0.1] [web.servlet.DispatcherServlet] | Completed initialization in 8 ms\n[2020-06-05 19:35:22.386] [INFO] [jmendoza-ThinkPad-T420] [RMI TCP Connection(4)-127.0.0.1] [mongodb.driver.cluster] | No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description ClusterDescription{type=REPLICA_SET, connectionMode=MULTIPLE, serverDescriptions=[ServerDescription{address=cluster0-shard-00-00-7rxkw.mongodb.net:27017, type=UNKNOWN, state=CONNECTING}, ServerDescription{address=cluster0-shard-00-01-7rxkw.mongodb.net:27017, type=UNKNOWN, state=CONNECTING}, ServerDescription{address=cluster0-shard-00-02-7rxkw.mongodb.net:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=8, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=192045575, setName='Cluster0-shard-0', canonicalAddress=cluster0-shard-00-02-7rxkw.mongodb.net:27017, hosts=[cluster0-shard-00-02-7rxkw.mongodb.net:27017, cluster0-shard-00-01-7rxkw.mongodb.net:27017, cluster0-shard-00-00-7rxkw.mongodb.net:27017], passives=[], arbiters=[], primary='cluster0-shard-00-01-7rxkw.mongodb.net:27017', tagSet=TagSet{[Tag{name='nodeType', value='ELECTABLE'}, Tag{name='provider', value='AWS'}, Tag{name='region', value='US_EAST_1'}]}, electionId=null, setVersion=4, lastWriteDate=Fri Jun 05 19:35:02 VET 2020, lastUpdateTimeNanos=16852466771751}]}. Waiting for 30000 ms before timing out\n[2020-06-05 19:35:22.552] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad6b8dfc52759bdfbc2af', description='null'}-cluster0-shard-00-01-7rxkw.mongodb.net:27017] [mongodb.driver.connection] | Opened connection [connectionId{localValue:2, serverValue:137759}] to cluster0-shard-00-01-7rxkw.mongodb.net:27017\n[2020-06-05 19:35:22.699] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad6b8dfc52759bdfbc2af', description='null'}-cluster0-shard-00-00-7rxkw.mongodb.net:27017] [mongodb.driver.connection] | Opened connection [connectionId{localValue:1, serverValue:112761}] to cluster0-shard-00-00-7rxkw.mongodb.net:27017\n[2020-06-05 19:35:22.735] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad6b8dfc52759bdfbc2af', description='null'}-cluster0-shard-00-01-7rxkw.mongodb.net:27017] [mongodb.driver.cluster] | Monitor thread successfully connected to server with description ServerDescription{address=cluster0-shard-00-01-7rxkw.mongodb.net:27017, type=REPLICA_SET_PRIMARY, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=8, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=182361086, setName='Cluster0-shard-0', canonicalAddress=cluster0-shard-00-01-7rxkw.mongodb.net:27017, hosts=[cluster0-shard-00-02-7rxkw.mongodb.net:27017, cluster0-shard-00-01-7rxkw.mongodb.net:27017, cluster0-shard-00-00-7rxkw.mongodb.net:27017], passives=[], arbiters=[], primary='cluster0-shard-00-01-7rxkw.mongodb.net:27017', tagSet=TagSet{[Tag{name='nodeType', value='ELECTABLE'}, Tag{name='provider', value='AWS'}, Tag{name='region', value='US_EAST_1'}]}, electionId=7fffffff0000000000000027, setVersion=4, lastWriteDate=Fri Jun 05 19:35:03 VET 2020, lastUpdateTimeNanos=16853322260844}\n[2020-06-05 19:35:22.736] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad6b8dfc52759bdfbc2af', description='null'}-cluster0-shard-00-01-7rxkw.mongodb.net:27017] [mongodb.driver.cluster] | Setting max election id to 7fffffff0000000000000027 from replica set primary cluster0-shard-00-01-7rxkw.mongodb.net:27017\n[2020-06-05 19:35:22.736] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad6b8dfc52759bdfbc2af', description='null'}-cluster0-shard-00-01-7rxkw.mongodb.net:27017] [mongodb.driver.cluster] | Setting max set version to 4 from replica set primary cluster0-shard-00-01-7rxkw.mongodb.net:27017\n[2020-06-05 19:35:22.736] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad6b8dfc52759bdfbc2af', description='null'}-cluster0-shard-00-01-7rxkw.mongodb.net:27017] [mongodb.driver.cluster] | Discovered replica set primary cluster0-shard-00-01-7rxkw.mongodb.net:27017\n[2020-06-05 19:35:22.881] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad6b8dfc52759bdfbc2af', description='null'}-cluster0-shard-00-00-7rxkw.mongodb.net:27017] [mongodb.driver.cluster] | Monitor thread successfully connected to server with description ServerDescription{address=cluster0-shard-00-00-7rxkw.mongodb.net:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=8, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=181270372, setName='Cluster0-shard-0', canonicalAddress=cluster0-shard-00-00-7rxkw.mongodb.net:27017, hosts=[cluster0-shard-00-02-7rxkw.mongodb.net:27017, cluster0-shard-00-01-7rxkw.mongodb.net:27017, cluster0-shard-00-00-7rxkw.mongodb.net:27017], passives=[], arbiters=[], primary='cluster0-shard-00-01-7rxkw.mongodb.net:27017', tagSet=TagSet{[Tag{name='nodeType', value='ELECTABLE'}, Tag{name='provider', value='AWS'}, Tag{name='region', value='US_EAST_1'}]}, electionId=null, setVersion=4, lastWriteDate=Fri Jun 05 19:35:04 VET 2020, lastUpdateTimeNanos=16853467593939}\n[2020-06-05 19:35:24.120] [INFO] [jmendoza-ThinkPad-T420] [RMI TCP Connection(4)-127.0.0.1] [mongodb.driver.connection] | Opened connection [connectionId{localValue:4, serverValue:137759}] to cluster0-shard-00-01-7rxkw.mongodb.net:27017\n[2020-06-05 19:35:42.449] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3000-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"ed06e08d93d52b31\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"POST\",\"uri\":\"http://localhost:3000/v1/customers/login\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"content-length\":[\"65\"],\"content-type\":[\"application/json\"],\"host\":[\"localhost:3000\"],\"origin\":[\"chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop\"],\"postman-token\":[\"6b0758a1-1971-c17a-0e71-452421211679\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]},\"body\":{\"email\":\"jmendoza@gmail.com\",\"password\":\"123456789\"}}\n[2020-06-05 19:35:43.389] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3000-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"ed06e08d93d52b31\",\"duration\":1012,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 23:35:43 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"id\":\"5ed047dda2923f1ac2c64463\",\"firstName\":\"Jonathan\",\"lastName\":\"Mendoza\",\"email\":\"jmendoza@gmail.com\",\"createdAt\":\"2020-05-28T19:15:07\"}}\n[2020-06-05 19:35:53.372] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [scheduling.concurrent.ThreadPoolTaskExecutor] | Shutting down ExecutorService 'applicationTaskExecutor'\n[2020-06-05 19:35:53.566] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [mongodb.driver.connection] | Closed connection [connectionId{localValue:4, serverValue:137759}] to cluster0-shard-00-01-7rxkw.mongodb.net:27017 because the pool has been closed.\n"
  },
  {
    "path": "logs/Order.log",
    "content": "[2020-06-04 20:02:21.856] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Starting OrderApplication on jmendoza-ThinkPad-T420 with PID 409 (/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order/target/classes started by jmendoza in /home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD)\n[2020-06-04 20:02:21.864] [DEBUG] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Running with Spring Boot v2.3.0.RELEASE, Spring v5.2.6.RELEASE\n[2020-06-04 20:02:21.865] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | No active profile set, falling back to default profiles: default\n[2020-06-04 20:02:23.473] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Bootstrapping Spring Data JDBC repositories in DEFAULT mode.\n[2020-06-04 20:02:23.512] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Finished Spring Data repository scanning in 32ms. Found 0 JDBC repository interfaces.\n[2020-06-04 20:02:24.391] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat initialized with port(s): 3002 (http)\n[2020-06-04 20:02:24.416] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Initializing ProtocolHandler [\"http-nio-3002\"]\n[2020-06-04 20:02:24.418] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardService] | Starting service [Tomcat]\n[2020-06-04 20:02:24.419] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardEngine] | Starting Servlet engine: [Apache Tomcat/9.0.35]\n[2020-06-04 20:02:24.520] [INFO] [jmendoza-ThinkPad-T420] [main] [[Tomcat].[localhost].[/]] | Initializing Spring embedded WebApplicationContext\n[2020-06-04 20:02:24.520] [INFO] [jmendoza-ThinkPad-T420] [main] [web.context.ContextLoader] | Root WebApplicationContext: initialization completed in 2463 ms\n[2020-06-04 20:02:25.181] [INFO] [jmendoza-ThinkPad-T420] [main] [scheduling.concurrent.ThreadPoolTaskExecutor] | Initializing ExecutorService 'applicationTaskExecutor'\n[2020-06-04 20:02:25.470] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Starting...\n[2020-06-04 20:02:25.718] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Start completed.\n[2020-06-04 20:02:25.869] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Starting ProtocolHandler [\"http-nio-3002\"]\n[2020-06-04 20:02:25.954] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat started on port(s): 3002 (http) with context path ''\n[2020-06-04 20:02:25.986] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Started OrderApplication in 4.937 seconds (JVM running for 8.358)\n[2020-06-04 20:02:40.615] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [[Tomcat].[localhost].[/]] | Initializing Spring DispatcherServlet 'dispatcherServlet'\n[2020-06-04 20:02:40.615] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] | Initializing Servlet 'dispatcherServlet'\n[2020-06-04 20:02:40.623] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] | Completed initialization in 8 ms\n[2020-06-04 20:02:40.978] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"b794ba38ddd228dc\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/32\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"5af5b78f-62a6-d224-fb1a-13c7c657372d\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 20:02:41.087] [ERROR] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [common.exception.CustomExceptionHandler] | com.jmendoza.swa.hexagonal.order.common.exception.GlobalException: Exception getOrder: A CallableStatement function was executed and the out parameter 1 was of type java.sql.Types=1111 however type java.sql.Types=12 was registered.\n[2020-06-04 20:02:41.132] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"b794ba38ddd228dc\",\"duration\":363,\"protocol\":\"HTTP/1.1\",\"status\":500,\"headers\":{\"Connection\":[\"close\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 00:02:41 GMT\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"timestamp\":\"2020-06-05T00:02:41.087+00:00\",\"message\":\"Exception getOrder: A CallableStatement function was executed and the out parameter 1 was of type java.sql.Types=1111 however type java.sql.Types=12 was registered.\",\"details\":\"uri=/v1/orders/32\"}}\n[2020-06-04 20:02:50.032] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [scheduling.concurrent.ThreadPoolTaskExecutor] | Shutting down ExecutorService 'applicationTaskExecutor'\n[2020-06-04 20:02:50.033] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Shutdown initiated...\n[2020-06-04 20:02:50.047] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Shutdown completed.\n[2020-06-04 20:04:10.045] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Starting OrderApplication on jmendoza-ThinkPad-T420 with PID 819 (/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order/target/classes started by jmendoza in /home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD)\n[2020-06-04 20:04:10.060] [DEBUG] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Running with Spring Boot v2.3.0.RELEASE, Spring v5.2.6.RELEASE\n[2020-06-04 20:04:10.062] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | No active profile set, falling back to default profiles: default\n[2020-06-04 20:04:11.159] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Bootstrapping Spring Data JDBC repositories in DEFAULT mode.\n[2020-06-04 20:04:11.182] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Finished Spring Data repository scanning in 19ms. Found 0 JDBC repository interfaces.\n[2020-06-04 20:04:11.701] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat initialized with port(s): 3002 (http)\n[2020-06-04 20:04:11.710] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Initializing ProtocolHandler [\"http-nio-3002\"]\n[2020-06-04 20:04:11.711] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardService] | Starting service [Tomcat]\n[2020-06-04 20:04:11.711] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardEngine] | Starting Servlet engine: [Apache Tomcat/9.0.35]\n[2020-06-04 20:04:11.775] [INFO] [jmendoza-ThinkPad-T420] [main] [[Tomcat].[localhost].[/]] | Initializing Spring embedded WebApplicationContext\n[2020-06-04 20:04:11.775] [INFO] [jmendoza-ThinkPad-T420] [main] [web.context.ContextLoader] | Root WebApplicationContext: initialization completed in 1451 ms\n[2020-06-04 20:04:12.152] [INFO] [jmendoza-ThinkPad-T420] [main] [scheduling.concurrent.ThreadPoolTaskExecutor] | Initializing ExecutorService 'applicationTaskExecutor'\n[2020-06-04 20:04:12.351] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Starting...\n[2020-06-04 20:04:12.591] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Start completed.\n[2020-06-04 20:04:12.690] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Starting ProtocolHandler [\"http-nio-3002\"]\n[2020-06-04 20:04:12.710] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat started on port(s): 3002 (http) with context path ''\n[2020-06-04 20:04:12.724] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Started OrderApplication in 3.421 seconds (JVM running for 4.688)\n[2020-06-04 20:04:17.992] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [[Tomcat].[localhost].[/]] | Initializing Spring DispatcherServlet 'dispatcherServlet'\n[2020-06-04 20:04:17.993] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] | Initializing Servlet 'dispatcherServlet'\n[2020-06-04 20:04:17.999] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] | Completed initialization in 6 ms\n[2020-06-04 20:04:18.095] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"ac45c9810ba66cf8\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/32\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"4f02cf7c-d700-bf82-d111-92dc8e5fa7eb\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 20:04:18.153] [ERROR] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [common.exception.CustomExceptionHandler] | com.jmendoza.swa.hexagonal.order.common.exception.GlobalException: Exception getOrder: Parameter of type java.sql.Types=1111 was registered, but call to getString (sqltype=java.sql.Types=12) was made.\n[2020-06-04 20:04:18.542] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"ac45c9810ba66cf8\",\"duration\":171,\"protocol\":\"HTTP/1.1\",\"status\":500,\"headers\":{\"Connection\":[\"close\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 00:04:18 GMT\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"timestamp\":\"2020-06-05T00:04:18.152+00:00\",\"message\":\"Exception getOrder: Parameter of type java.sql.Types=1111 was registered, but call to getString (sqltype=java.sql.Types=12) was made.\",\"details\":\"uri=/v1/orders/32\"}}\n[2020-06-04 20:04:55.651] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [scheduling.concurrent.ThreadPoolTaskExecutor] | Shutting down ExecutorService 'applicationTaskExecutor'\n[2020-06-04 20:04:55.652] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Shutdown initiated...\n[2020-06-04 20:04:55.663] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Shutdown completed.\n[2020-06-04 20:05:03.044] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Starting OrderApplication on jmendoza-ThinkPad-T420 with PID 1159 (/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order/target/classes started by jmendoza in /home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD)\n[2020-06-04 20:05:03.065] [DEBUG] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Running with Spring Boot v2.3.0.RELEASE, Spring v5.2.6.RELEASE\n[2020-06-04 20:05:03.067] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | No active profile set, falling back to default profiles: default\n[2020-06-04 20:05:04.090] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Bootstrapping Spring Data JDBC repositories in DEFAULT mode.\n[2020-06-04 20:05:04.109] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Finished Spring Data repository scanning in 15ms. Found 0 JDBC repository interfaces.\n[2020-06-04 20:05:04.609] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat initialized with port(s): 3002 (http)\n[2020-06-04 20:05:04.617] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Initializing ProtocolHandler [\"http-nio-3002\"]\n[2020-06-04 20:05:04.617] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardService] | Starting service [Tomcat]\n[2020-06-04 20:05:04.618] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardEngine] | Starting Servlet engine: [Apache Tomcat/9.0.35]\n[2020-06-04 20:05:04.682] [INFO] [jmendoza-ThinkPad-T420] [main] [[Tomcat].[localhost].[/]] | Initializing Spring embedded WebApplicationContext\n[2020-06-04 20:05:04.683] [INFO] [jmendoza-ThinkPad-T420] [main] [web.context.ContextLoader] | Root WebApplicationContext: initialization completed in 1316 ms\n[2020-06-04 20:05:05.074] [INFO] [jmendoza-ThinkPad-T420] [main] [scheduling.concurrent.ThreadPoolTaskExecutor] | Initializing ExecutorService 'applicationTaskExecutor'\n[2020-06-04 20:05:05.276] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Starting...\n[2020-06-04 20:05:05.492] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Start completed.\n[2020-06-04 20:05:05.598] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Starting ProtocolHandler [\"http-nio-3002\"]\n[2020-06-04 20:05:05.620] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat started on port(s): 3002 (http) with context path ''\n[2020-06-04 20:05:05.636] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Started OrderApplication in 3.398 seconds (JVM running for 4.858)\n[2020-06-04 20:05:08.534] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [[Tomcat].[localhost].[/]] | Initializing Spring DispatcherServlet 'dispatcherServlet'\n[2020-06-04 20:05:08.534] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] | Initializing Servlet 'dispatcherServlet'\n[2020-06-04 20:05:08.540] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] | Completed initialization in 6 ms\n[2020-06-04 20:05:08.652] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"85d360aaac8267a6\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/32\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"0a643db2-2092-9c1d-f686-65f537f617cc\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 20:05:08.711] [ERROR] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [common.exception.CustomExceptionHandler] | com.jmendoza.swa.hexagonal.order.common.exception.GlobalException: Exception getOrder: org.postgresql.util.PGobject cannot be cast to java.lang.String\n[2020-06-04 20:05:08.782] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"85d360aaac8267a6\",\"duration\":213,\"protocol\":\"HTTP/1.1\",\"status\":500,\"headers\":{\"Connection\":[\"close\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 00:05:08 GMT\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"timestamp\":\"2020-06-05T00:05:08.711+00:00\",\"message\":\"Exception getOrder: org.postgresql.util.PGobject cannot be cast to java.lang.String\",\"details\":\"uri=/v1/orders/32\"}}\n[2020-06-04 20:08:41.141] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [scheduling.concurrent.ThreadPoolTaskExecutor] | Shutting down ExecutorService 'applicationTaskExecutor'\n[2020-06-04 20:08:41.142] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Shutdown initiated...\n[2020-06-04 20:08:41.158] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Shutdown completed.\n[2020-06-04 20:11:08.629] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Starting OrderApplication on jmendoza-ThinkPad-T420 with PID 1850 (/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order/target/classes started by jmendoza in /home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD)\n[2020-06-04 20:11:08.658] [DEBUG] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Running with Spring Boot v2.3.0.RELEASE, Spring v5.2.6.RELEASE\n[2020-06-04 20:11:08.660] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | No active profile set, falling back to default profiles: default\n[2020-06-04 20:11:10.394] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Bootstrapping Spring Data JDBC repositories in DEFAULT mode.\n[2020-06-04 20:11:10.423] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Finished Spring Data repository scanning in 24ms. Found 0 JDBC repository interfaces.\n[2020-06-04 20:11:10.931] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat initialized with port(s): 3002 (http)\n[2020-06-04 20:11:10.943] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Initializing ProtocolHandler [\"http-nio-3002\"]\n[2020-06-04 20:11:10.944] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardService] | Starting service [Tomcat]\n[2020-06-04 20:11:10.944] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardEngine] | Starting Servlet engine: [Apache Tomcat/9.0.35]\n[2020-06-04 20:11:11.062] [INFO] [jmendoza-ThinkPad-T420] [main] [[Tomcat].[localhost].[/]] | Initializing Spring embedded WebApplicationContext\n[2020-06-04 20:11:11.062] [INFO] [jmendoza-ThinkPad-T420] [main] [web.context.ContextLoader] | Root WebApplicationContext: initialization completed in 1896 ms\n[2020-06-04 20:11:11.485] [INFO] [jmendoza-ThinkPad-T420] [main] [scheduling.concurrent.ThreadPoolTaskExecutor] | Initializing ExecutorService 'applicationTaskExecutor'\n[2020-06-04 20:11:11.707] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Starting...\n[2020-06-04 20:11:11.898] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Start completed.\n[2020-06-04 20:11:12.008] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Starting ProtocolHandler [\"http-nio-3002\"]\n[2020-06-04 20:11:12.032] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat started on port(s): 3002 (http) with context path ''\n[2020-06-04 20:11:12.048] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Started OrderApplication in 4.446 seconds (JVM running for 6.484)\n[2020-06-04 20:11:25.194] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [[Tomcat].[localhost].[/]] | Initializing Spring DispatcherServlet 'dispatcherServlet'\n[2020-06-04 20:11:25.195] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] | Initializing Servlet 'dispatcherServlet'\n[2020-06-04 20:11:25.201] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] | Completed initialization in 6 ms\n[2020-06-04 20:11:25.317] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"b6d74fdd6d7648bd\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/32\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"1c66c399-d19f-bda7-3f81-d5f71c7f5424\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 20:11:25.458] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"b6d74fdd6d7648bd\",\"duration\":231,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 00:11:25 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"32\",\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-06-03T22:34:12.000+00:00\",\"orderProductList\":[{\"orderProductId\":11,\"quantity\":2,\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"orderProductId\":12,\"quantity\":1,\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}],\"amountOrder\":4399.01}}\n[2020-06-04 20:11:44.501] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-2] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"fb6706bd1c788601\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/32\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"65858cae-6e02-6a24-9bdc-57cf53c2c827\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 20:11:44.518] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-2] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"fb6706bd1c788601\",\"duration\":14,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 00:11:44 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"32\",\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-06-03T22:34:12.000+00:00\",\"orderProductList\":[{\"orderProductId\":11,\"quantity\":2,\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"orderProductId\":12,\"quantity\":1,\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}],\"amountOrder\":4399.01}}\n[2020-06-04 20:11:49.030] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-3] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"fb872655e36edfee\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/31\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"faf6afdd-41e5-2178-282d-b9a29bc4add2\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 20:11:49.037] [ERROR] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-3] [common.exception.CustomExceptionHandler] | com.jmendoza.swa.hexagonal.order.common.exception.ResourceNotFoundException: Order not found :: \n[2020-06-04 20:11:49.043] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-3] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"fb872655e36edfee\",\"duration\":13,\"protocol\":\"HTTP/1.1\",\"status\":404,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 00:11:49 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"timestamp\":\"2020-06-05T00:11:49.037+00:00\",\"message\":\"Order not found :: \",\"details\":\"uri=/v1/orders/31\"}}\n[2020-06-04 20:11:58.288] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [scheduling.concurrent.ThreadPoolTaskExecutor] | Shutting down ExecutorService 'applicationTaskExecutor'\n[2020-06-04 20:11:58.289] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Shutdown initiated...\n[2020-06-04 20:11:58.309] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Shutdown completed.\n[2020-06-04 20:13:24.942] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Starting OrderApplication on jmendoza-ThinkPad-T420 with PID 2292 (/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order/target/classes started by jmendoza in /home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD)\n[2020-06-04 20:13:24.967] [DEBUG] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Running with Spring Boot v2.3.0.RELEASE, Spring v5.2.6.RELEASE\n[2020-06-04 20:13:24.969] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | No active profile set, falling back to default profiles: default\n[2020-06-04 20:13:26.050] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Bootstrapping Spring Data JDBC repositories in DEFAULT mode.\n[2020-06-04 20:13:26.075] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Finished Spring Data repository scanning in 20ms. Found 0 JDBC repository interfaces.\n[2020-06-04 20:13:26.617] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat initialized with port(s): 3002 (http)\n[2020-06-04 20:13:26.625] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Initializing ProtocolHandler [\"http-nio-3002\"]\n[2020-06-04 20:13:26.626] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardService] | Starting service [Tomcat]\n[2020-06-04 20:13:26.626] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardEngine] | Starting Servlet engine: [Apache Tomcat/9.0.35]\n[2020-06-04 20:13:26.726] [INFO] [jmendoza-ThinkPad-T420] [main] [[Tomcat].[localhost].[/]] | Initializing Spring embedded WebApplicationContext\n[2020-06-04 20:13:26.726] [INFO] [jmendoza-ThinkPad-T420] [main] [web.context.ContextLoader] | Root WebApplicationContext: initialization completed in 1457 ms\n[2020-06-04 20:13:27.101] [INFO] [jmendoza-ThinkPad-T420] [main] [scheduling.concurrent.ThreadPoolTaskExecutor] | Initializing ExecutorService 'applicationTaskExecutor'\n[2020-06-04 20:13:27.299] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Starting...\n[2020-06-04 20:13:27.501] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Start completed.\n[2020-06-04 20:13:27.605] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Starting ProtocolHandler [\"http-nio-3002\"]\n[2020-06-04 20:13:27.629] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat started on port(s): 3002 (http) with context path ''\n[2020-06-04 20:13:27.645] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Started OrderApplication in 3.365 seconds (JVM running for 4.721)\n[2020-06-04 20:13:35.581] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [[Tomcat].[localhost].[/]] | Initializing Spring DispatcherServlet 'dispatcherServlet'\n[2020-06-04 20:13:35.582] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] | Initializing Servlet 'dispatcherServlet'\n[2020-06-04 20:13:35.587] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] | Completed initialization in 5 ms\n[2020-06-04 20:13:35.678] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"f4818004a78278e0\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/31\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"064e6ae9-779f-f8fc-3974-9e43c6d71b65\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 20:13:35.743] [ERROR] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [common.exception.CustomExceptionHandler] | com.jmendoza.swa.hexagonal.order.common.exception.ResourceNotFoundException: Order not found :: 31\n[2020-06-04 20:13:35.810] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"f4818004a78278e0\",\"duration\":198,\"protocol\":\"HTTP/1.1\",\"status\":404,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 00:13:35 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"timestamp\":\"2020-06-05T00:13:35.743+00:00\",\"message\":\"Order not found :: 31\",\"details\":\"uri=/v1/orders/31\"}}\n[2020-06-04 20:13:37.932] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-2] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"c6303a24a1c99990\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/31\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"6b796afa-0cf0-2a39-f4f5-2ccc54aee7e6\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 20:13:37.935] [ERROR] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-2] [common.exception.CustomExceptionHandler] | com.jmendoza.swa.hexagonal.order.common.exception.ResourceNotFoundException: Order not found :: 31\n[2020-06-04 20:13:37.938] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-2] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"c6303a24a1c99990\",\"duration\":6,\"protocol\":\"HTTP/1.1\",\"status\":404,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 00:13:37 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"timestamp\":\"2020-06-05T00:13:37.935+00:00\",\"message\":\"Order not found :: 31\",\"details\":\"uri=/v1/orders/31\"}}\n[2020-06-04 20:13:41.838] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-3] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"fcc29c548360e70e\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/32\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"e6c8b468-0fe1-242a-c460-dbcb2cd865d3\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 20:13:41.876] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-3] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"fcc29c548360e70e\",\"duration\":37,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 00:13:41 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"32\",\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-06-03T22:34:12.000+00:00\",\"orderProductList\":[{\"orderProductId\":11,\"quantity\":2,\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"orderProductId\":12,\"quantity\":1,\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}],\"amountOrder\":4399.01}}\n[2020-06-04 20:30:53.889] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [scheduling.concurrent.ThreadPoolTaskExecutor] | Shutting down ExecutorService 'applicationTaskExecutor'\n[2020-06-04 20:30:53.891] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Shutdown initiated...\n[2020-06-04 20:30:53.907] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Shutdown completed.\n[2020-06-04 21:50:39.915] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Starting OrderApplication on jmendoza-ThinkPad-T420 with PID 5896 (/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Order/target/classes started by jmendoza in /home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD)\n[2020-06-04 21:50:39.930] [DEBUG] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Running with Spring Boot v2.3.0.RELEASE, Spring v5.2.6.RELEASE\n[2020-06-04 21:50:39.933] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | No active profile set, falling back to default profiles: default\n[2020-06-04 21:50:41.156] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Bootstrapping Spring Data JDBC repositories in DEFAULT mode.\n[2020-06-04 21:50:41.176] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Finished Spring Data repository scanning in 16ms. Found 0 JDBC repository interfaces.\n[2020-06-04 21:50:41.699] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat initialized with port(s): 3002 (http)\n[2020-06-04 21:50:41.707] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Initializing ProtocolHandler [\"http-nio-3002\"]\n[2020-06-04 21:50:41.708] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardService] | Starting service [Tomcat]\n[2020-06-04 21:50:41.708] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardEngine] | Starting Servlet engine: [Apache Tomcat/9.0.35]\n[2020-06-04 21:50:41.776] [INFO] [jmendoza-ThinkPad-T420] [main] [[Tomcat].[localhost].[/]] | Initializing Spring embedded WebApplicationContext\n[2020-06-04 21:50:41.776] [INFO] [jmendoza-ThinkPad-T420] [main] [web.context.ContextLoader] | Root WebApplicationContext: initialization completed in 1476 ms\n[2020-06-04 21:50:42.157] [INFO] [jmendoza-ThinkPad-T420] [main] [scheduling.concurrent.ThreadPoolTaskExecutor] | Initializing ExecutorService 'applicationTaskExecutor'\n[2020-06-04 21:50:42.373] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Starting...\n[2020-06-04 21:50:42.600] [INFO] [jmendoza-ThinkPad-T420] [main] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Start completed.\n[2020-06-04 21:50:42.728] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Starting ProtocolHandler [\"http-nio-3002\"]\n[2020-06-04 21:50:42.749] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat started on port(s): 3002 (http) with context path ''\n[2020-06-04 21:50:42.764] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.order.OrderApplication] | Started OrderApplication in 3.499 seconds (JVM running for 4.985)\n[2020-06-04 21:51:06.364] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [[Tomcat].[localhost].[/]] | Initializing Spring DispatcherServlet 'dispatcherServlet'\n[2020-06-04 21:51:06.364] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] | Initializing Servlet 'dispatcherServlet'\n[2020-06-04 21:51:06.371] [INFO] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [web.servlet.DispatcherServlet] | Completed initialization in 6 ms\n[2020-06-04 21:51:06.479] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"fb387fb517754f48\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/32\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"615c4f24-a656-5eba-fe95-2a4a1176aaf6\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 21:51:06.532] [ERROR] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [common.exception.CustomExceptionHandler] | com.jmendoza.swa.hexagonal.order.common.exception.ResourceNotFoundException: Order not found :: 32\n[2020-06-04 21:51:06.582] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"fb387fb517754f48\",\"duration\":183,\"protocol\":\"HTTP/1.1\",\"status\":404,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 01:51:06 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"timestamp\":\"2020-06-05T01:51:06.532+00:00\",\"message\":\"Order not found :: 32\",\"details\":\"uri=/v1/orders/32\"}}\n[2020-06-04 21:51:11.286] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-2] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"fc6edd7555539c30\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"POST\",\"uri\":\"http://localhost:3002/v1/orders\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"content-length\":[\"304\"],\"content-type\":[\"application/json\"],\"host\":[\"localhost:3002\"],\"origin\":[\"chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop\"],\"postman-token\":[\"aa4102b7-1236-18b3-f6fc-2c0a36137803\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]},\"body\":{\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-06-03T22:34:12\",\"orderProductList\":[{\"quantity\":\"2\",\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"quantity\":\"1\",\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}]}}\n[2020-06-04 21:51:11.681] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-2] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"fc6edd7555539c30\",\"duration\":397,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 01:51:11 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"33\"}}\n[2020-06-04 21:51:20.571] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-3] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"dbd6a343cb852579\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/33\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"fa67b397-4200-3742-8b49-675adf447072\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 21:51:20.598] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-3] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"dbd6a343cb852579\",\"duration\":26,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 01:51:20 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"33\",\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-06-03T22:34:12.000+00:00\",\"orderProductList\":[{\"orderProductId\":13,\"quantity\":2,\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"orderProductId\":14,\"quantity\":1,\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}],\"amountOrder\":4399.01}}\n[2020-06-04 21:51:25.473] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-4] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"ab6b8bdac38d4d01\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/34\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"c3e44873-607b-80dd-7221-cb471cfcd3a0\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 21:51:25.483] [ERROR] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-4] [common.exception.CustomExceptionHandler] | com.jmendoza.swa.hexagonal.order.common.exception.ResourceNotFoundException: Order not found :: 34\n[2020-06-04 21:51:25.489] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-4] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"ab6b8bdac38d4d01\",\"duration\":14,\"protocol\":\"HTTP/1.1\",\"status\":404,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 01:51:25 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"timestamp\":\"2020-06-05T01:51:25.483+00:00\",\"message\":\"Order not found :: 34\",\"details\":\"uri=/v1/orders/34\"}}\n[2020-06-04 21:51:29.465] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-6] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"938864d039b7d3f8\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/33\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"0a335d2b-cd92-c1e7-c904-1f349b7b8fa5\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 21:51:29.477] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-6] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"938864d039b7d3f8\",\"duration\":11,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 01:51:29 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"33\",\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-06-03T22:34:12.000+00:00\",\"orderProductList\":[{\"orderProductId\":13,\"quantity\":2,\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"orderProductId\":14,\"quantity\":1,\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}],\"amountOrder\":4399.01}}\n[2020-06-04 21:52:50.882] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-7] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"91d731033f99fbed\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3002/v1/orders/33\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3002\"],\"postman-token\":[\"8fe08c78-dcb0-9f1e-a0a8-62f731d232a4\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-04 21:52:50.893] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3002-exec-7] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"91d731033f99fbed\",\"duration\":11,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 01:52:50 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":{\"orderId\":\"33\",\"customerId\":\"5ed047dda2923f1ac2c64463\",\"createdAt\":\"2020-06-03T22:34:12.000+00:00\",\"orderProductList\":[{\"orderProductId\":13,\"quantity\":2,\"productId\":\"5ed31ddb669529409edc2fd0\",\"productPrice\":1099.51},{\"orderProductId\":14,\"quantity\":1,\"productId\":\"5ed31cb5669529409edc2fcf\",\"productPrice\":2199.99}],\"amountOrder\":4399.01}}\n[2020-06-04 21:55:51.368] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [scheduling.concurrent.ThreadPoolTaskExecutor] | Shutting down ExecutorService 'applicationTaskExecutor'\n[2020-06-04 21:55:51.373] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Shutdown initiated...\n[2020-06-04 21:55:51.393] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [zaxxer.hikari.HikariDataSource] | HikariPool-1 - Shutdown completed.\n"
  },
  {
    "path": "logs/Product.log",
    "content": "[2020-06-05 19:40:06.294] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.product.ProductApplication] | Starting ProductApplication on jmendoza-ThinkPad-T420 with PID 22911 (/home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD/Product/target/classes started by jmendoza in /home/jmendoza/IdeaProjects/JonathanM2ndoza/Hexagonal-Architecture-DDD)\n[2020-06-05 19:40:06.310] [DEBUG] [jmendoza-ThinkPad-T420] [main] [hexagonal.product.ProductApplication] | Running with Spring Boot v2.3.0.RELEASE, Spring v5.2.6.RELEASE\n[2020-06-05 19:40:06.311] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.product.ProductApplication] | No active profile set, falling back to default profiles: default\n[2020-06-05 19:40:08.568] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.\n[2020-06-05 19:40:08.670] [INFO] [jmendoza-ThinkPad-T420] [main] [repository.config.RepositoryConfigurationDelegate] | Finished Spring Data repository scanning in 96ms. Found 1 MongoDB repository interfaces.\n[2020-06-05 19:40:09.163] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat initialized with port(s): 3001 (http)\n[2020-06-05 19:40:09.171] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Initializing ProtocolHandler [\"http-nio-3001\"]\n[2020-06-05 19:40:09.171] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardService] | Starting service [Tomcat]\n[2020-06-05 19:40:09.171] [INFO] [jmendoza-ThinkPad-T420] [main] [catalina.core.StandardEngine] | Starting Servlet engine: [Apache Tomcat/9.0.35]\n[2020-06-05 19:40:09.254] [INFO] [jmendoza-ThinkPad-T420] [main] [[Tomcat].[localhost].[/]] | Initializing Spring embedded WebApplicationContext\n[2020-06-05 19:40:09.255] [INFO] [jmendoza-ThinkPad-T420] [main] [web.context.ContextLoader] | Root WebApplicationContext: initialization completed in 2567 ms\n[2020-06-05 19:40:09.736] [INFO] [jmendoza-ThinkPad-T420] [main] [mongodb.driver.cluster] | Cluster created with settings {hosts=[127.0.0.1:27017], srvHost=cluster0-7rxkw.mongodb.net, mode=MULTIPLE, requiredClusterType=REPLICA_SET, serverSelectionTimeout='30000 ms', requiredReplicaSetName='Cluster0-shard-0'}\n[2020-06-05 19:40:09.837] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad7d9117cf45695f7866b', description='null'}-srv-cluster0-7rxkw.mongodb.net] [mongodb.driver.cluster] | Adding discovered server cluster0-shard-00-00-7rxkw.mongodb.net:27017 to client view of cluster\n[2020-06-05 19:40:10.030] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad7d9117cf45695f7866b', description='null'}-srv-cluster0-7rxkw.mongodb.net] [mongodb.driver.cluster] | Adding discovered server cluster0-shard-00-01-7rxkw.mongodb.net:27017 to client view of cluster\n[2020-06-05 19:40:10.035] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad7d9117cf45695f7866b', description='null'}-srv-cluster0-7rxkw.mongodb.net] [mongodb.driver.cluster] | Adding discovered server cluster0-shard-00-02-7rxkw.mongodb.net:27017 to client view of cluster\n[2020-06-05 19:40:10.579] [INFO] [jmendoza-ThinkPad-T420] [main] [scheduling.concurrent.ThreadPoolTaskExecutor] | Initializing ExecutorService 'applicationTaskExecutor'\n[2020-06-05 19:40:10.966] [INFO] [jmendoza-ThinkPad-T420] [main] [endpoint.web.EndpointLinksResolver] | Exposing 2 endpoint(s) beneath base path '/actuator'\n[2020-06-05 19:40:11.009] [INFO] [jmendoza-ThinkPad-T420] [main] [coyote.http11.Http11NioProtocol] | Starting ProtocolHandler [\"http-nio-3001\"]\n[2020-06-05 19:40:11.030] [INFO] [jmendoza-ThinkPad-T420] [main] [embedded.tomcat.TomcatWebServer] | Tomcat started on port(s): 3001 (http) with context path ''\n[2020-06-05 19:40:11.054] [INFO] [jmendoza-ThinkPad-T420] [main] [hexagonal.product.ProductApplication] | Started ProductApplication in 5.781 seconds (JVM running for 7.746)\n[2020-06-05 19:40:11.065] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad7d9117cf45695f7866b', description='null'}-cluster0-shard-00-01-7rxkw.mongodb.net:27017] [mongodb.driver.connection] | Opened connection [connectionId{localValue:2, serverValue:137760}] to cluster0-shard-00-01-7rxkw.mongodb.net:27017\n[2020-06-05 19:40:11.210] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad7d9117cf45695f7866b', description='null'}-cluster0-shard-00-01-7rxkw.mongodb.net:27017] [mongodb.driver.cluster] | Monitor thread successfully connected to server with description ServerDescription{address=cluster0-shard-00-01-7rxkw.mongodb.net:27017, type=REPLICA_SET_PRIMARY, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=8, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=139818719, setName='Cluster0-shard-0', canonicalAddress=cluster0-shard-00-01-7rxkw.mongodb.net:27017, hosts=[cluster0-shard-00-02-7rxkw.mongodb.net:27017, cluster0-shard-00-01-7rxkw.mongodb.net:27017, cluster0-shard-00-00-7rxkw.mongodb.net:27017], passives=[], arbiters=[], primary='cluster0-shard-00-01-7rxkw.mongodb.net:27017', tagSet=TagSet{[Tag{name='nodeType', value='ELECTABLE'}, Tag{name='provider', value='AWS'}, Tag{name='region', value='US_EAST_1'}]}, electionId=7fffffff0000000000000027, setVersion=4, lastWriteDate=Fri Jun 05 19:39:52 VET 2020, lastUpdateTimeNanos=17141793745012}\n[2020-06-05 19:40:11.213] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad7d9117cf45695f7866b', description='null'}-cluster0-shard-00-01-7rxkw.mongodb.net:27017] [mongodb.driver.cluster] | Setting max election id to 7fffffff0000000000000027 from replica set primary cluster0-shard-00-01-7rxkw.mongodb.net:27017\n[2020-06-05 19:40:11.213] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad7d9117cf45695f7866b', description='null'}-cluster0-shard-00-01-7rxkw.mongodb.net:27017] [mongodb.driver.cluster] | Setting max set version to 4 from replica set primary cluster0-shard-00-01-7rxkw.mongodb.net:27017\n[2020-06-05 19:40:11.214] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad7d9117cf45695f7866b', description='null'}-cluster0-shard-00-01-7rxkw.mongodb.net:27017] [mongodb.driver.cluster] | Discovered replica set primary cluster0-shard-00-01-7rxkw.mongodb.net:27017\n[2020-06-05 19:40:11.330] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad7d9117cf45695f7866b', description='null'}-cluster0-shard-00-00-7rxkw.mongodb.net:27017] [mongodb.driver.connection] | Opened connection [connectionId{localValue:1, serverValue:98416}] to cluster0-shard-00-00-7rxkw.mongodb.net:27017\n[2020-06-05 19:40:11.335] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad7d9117cf45695f7866b', description='null'}-cluster0-shard-00-02-7rxkw.mongodb.net:27017] [mongodb.driver.connection] | Opened connection [connectionId{localValue:3, serverValue:117268}] to cluster0-shard-00-02-7rxkw.mongodb.net:27017\n[2020-06-05 19:40:11.479] [INFO] [jmendoza-ThinkPad-T420] [RMI TCP Connection(3)-127.0.0.1] [[Tomcat].[localhost].[/]] | Initializing Spring DispatcherServlet 'dispatcherServlet'\n[2020-06-05 19:40:11.480] [INFO] [jmendoza-ThinkPad-T420] [RMI TCP Connection(3)-127.0.0.1] [web.servlet.DispatcherServlet] | Initializing Servlet 'dispatcherServlet'\n[2020-06-05 19:40:11.487] [INFO] [jmendoza-ThinkPad-T420] [RMI TCP Connection(3)-127.0.0.1] [web.servlet.DispatcherServlet] | Completed initialization in 7 ms\n[2020-06-05 19:40:11.575] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad7d9117cf45695f7866b', description='null'}-cluster0-shard-00-00-7rxkw.mongodb.net:27017] [mongodb.driver.cluster] | Monitor thread successfully connected to server with description ServerDescription{address=cluster0-shard-00-00-7rxkw.mongodb.net:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=8, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=244808340, setName='Cluster0-shard-0', canonicalAddress=cluster0-shard-00-00-7rxkw.mongodb.net:27017, hosts=[cluster0-shard-00-02-7rxkw.mongodb.net:27017, cluster0-shard-00-01-7rxkw.mongodb.net:27017, cluster0-shard-00-00-7rxkw.mongodb.net:27017], passives=[], arbiters=[], primary='cluster0-shard-00-01-7rxkw.mongodb.net:27017', tagSet=TagSet{[Tag{name='nodeType', value='ELECTABLE'}, Tag{name='provider', value='AWS'}, Tag{name='region', value='US_EAST_1'}]}, electionId=null, setVersion=4, lastWriteDate=Fri Jun 05 19:39:52 VET 2020, lastUpdateTimeNanos=17142162143540}\n[2020-06-05 19:40:11.581] [INFO] [jmendoza-ThinkPad-T420] [cluster-ClusterId{value='5edad7d9117cf45695f7866b', description='null'}-cluster0-shard-00-02-7rxkw.mongodb.net:27017] [mongodb.driver.cluster] | Monitor thread successfully connected to server with description ServerDescription{address=cluster0-shard-00-02-7rxkw.mongodb.net:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=8, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=245578472, setName='Cluster0-shard-0', canonicalAddress=cluster0-shard-00-02-7rxkw.mongodb.net:27017, hosts=[cluster0-shard-00-02-7rxkw.mongodb.net:27017, cluster0-shard-00-01-7rxkw.mongodb.net:27017, cluster0-shard-00-00-7rxkw.mongodb.net:27017], passives=[], arbiters=[], primary='cluster0-shard-00-01-7rxkw.mongodb.net:27017', tagSet=TagSet{[Tag{name='nodeType', value='ELECTABLE'}, Tag{name='provider', value='AWS'}, Tag{name='region', value='US_EAST_1'}]}, electionId=null, setVersion=4, lastWriteDate=Fri Jun 05 19:39:52 VET 2020, lastUpdateTimeNanos=17142167993915}\n[2020-06-05 19:40:14.595] [INFO] [jmendoza-ThinkPad-T420] [RMI TCP Connection(2)-127.0.0.1] [mongodb.driver.connection] | Opened connection [connectionId{localValue:4, serverValue:137760}] to cluster0-shard-00-01-7rxkw.mongodb.net:27017\n[2020-06-05 19:40:40.644] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3001-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"remote\",\"type\":\"request\",\"correlation\":\"eb39353f3075a2a6\",\"protocol\":\"HTTP/1.1\",\"remote\":\"0:0:0:0:0:0:0:1\",\"method\":\"GET\",\"uri\":\"http://localhost:3001/v1/products\",\"headers\":{\"accept\":[\"*/*\"],\"accept-encoding\":[\"gzip, deflate, br\"],\"accept-language\":[\"es-419,es-US;q=0.9,es;q=0.8,en-US;q=0.7,en;q=0.6\"],\"cache-control\":[\"no-cache\"],\"connection\":[\"keep-alive\"],\"host\":[\"localhost:3001\"],\"postman-token\":[\"eb5c9aba-dd9d-e6b6-46f2-1bbb338e8424\"],\"sec-fetch-dest\":[\"empty\"],\"sec-fetch-mode\":[\"cors\"],\"sec-fetch-site\":[\"none\"],\"user-agent\":[\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\"]}}\n[2020-06-05 19:40:40.982] [TRACE] [jmendoza-ThinkPad-T420] [http-nio-3001-exec-1] [zalando.logbook.Logbook] | {\"origin\":\"local\",\"type\":\"response\",\"correlation\":\"eb39353f3075a2a6\",\"duration\":383,\"protocol\":\"HTTP/1.1\",\"status\":200,\"headers\":{\"Connection\":[\"keep-alive\"],\"Content-Type\":[\"application/json\"],\"Date\":[\"Fri, 05 Jun 2020 23:40:40 GMT\"],\"Keep-Alive\":[\"timeout=60\"],\"Transfer-Encoding\":[\"chunked\"]},\"body\":[{\"id\":\"5ed31cb5669529409edc2fcf\",\"productName\":\"Apple MacBook Pro\",\"productDescription\":\"New Apple MacBook Pro (16-Inch, 16GB RAM, 512GB Storage) - Space Gray\",\"price\":2199.99,\"createdAt\":\"2020-05-30T22:55:15\",\"serialNumber\":\"4548FFSDFDF5665\"},{\"id\":\"5ed31ddb669529409edc2fd0\",\"productName\":\"Apple iPhone 11 Pro\",\"productDescription\":\"Apple iPhone 11 Pro (64GB, Midnight Green)\",\"price\":1099.99,\"createdAt\":\"2020-05-30T23:01:07\",\"serialNumber\":\"SDFGHGH3456768FG\"}]}\n[2020-06-05 19:40:46.294] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [scheduling.concurrent.ThreadPoolTaskExecutor] | Shutting down ExecutorService 'applicationTaskExecutor'\n[2020-06-05 19:40:46.497] [INFO] [jmendoza-ThinkPad-T420] [SpringContextShutdownHook] [mongodb.driver.connection] | Closed connection [connectionId{localValue:4, serverValue:137760}] to cluster0-shard-00-01-7rxkw.mongodb.net:27017 because the pool has been closed.\n"
  },
  {
    "path": "prtsc/Hexagonal-Architecture-Microservices.drawio",
    "content": "<mxfile host=\"www.draw.io\" modified=\"2020-06-04T16:25:55.399Z\" agent=\"5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36\" etag=\"Sidp9uR-TsfXApz3wpw4\" version=\"13.1.7\" type=\"device\"><diagram id=\"akhTHRsQhaFSMrooGJkA\" name=\"Page-1\">7VtZd9o4FP41OWf6YI53zCOBpMsk07SZpZ2XHmELo9a2PLJIIb9+riwJvBHIlKWZQx4AXV2t33cXyc6FM0oXrxnKZ7c0wsmFbUaLC2d8YduBacGnECylwB24UhAzEkmRtRbck0eshKaSzkmEi5oipzThJK8LQ5plOOQ1GWKMfq+rTWlSHzVHMW4J7kOUtKV/kYjPlNTyB+uKN5jEMzV0YPdlRYq0slpJMUMR/V4ROVcXzohRyuWvdDHCidg7vS+y3fWG2tXEGM74Lg3675IPSfbbzdTO/Dn//HHy6TE3AjU3vtQLxhGsXxUp4zMa0wwlV2vpJaPzLMKiVxNKa50bSnMQWiD8ijlfKjDRnFMQzXiaqFo5phho41KUqKBzFiqt4k/LNcIvv3+d82BKDJzn90zOX633NaYp5mwJ7RhOECcP9f6RokK80ls1vaMERrZNxVrPUZgp0tqmV++CIxZjrlqt93zIGFpW1HKhUGwexzUHtXFc069DuEVfz0vpww85A12q7MlaVNLiGRQZnCmyA0U0dPumiON1j7OJIlv0D0MR7ax/To4cHHtfr38L9q2O7H7L/nuN2Uh6n9zT6CXui0abLdU2H1AyV9C0aPWAGScQnW/QBCd3tCCc0AyqJpRzmgIpUJHLNGBKFoJcVcLoxsOExKIRF0S7LDij3/CIJpSBLKOZICdSKiFQCTPBzzlPSAZqOs0QpIWQnouJpYtYJD+9kHBGFj1IWL7Jvjd6LTEVvHiSpLp2UCeb4/k9V4Wj7+uMRGvNKrnIYNBkU5XbFSyfD9WgAyo/4WK/LZGNJaiQQ/r/zEWCcwn7QUJOOAC5kq0H0ZKCpHmCjZSEjBaYPZAQFwZi4Yxw2PU5wwbNDAQ5XbWPNT20MAX7IwDfEGodhlP4MvMFfFqyINtNacaNKUpJspSq0AFKJWyO4woWpOgR6AVOJp0AC5rVZZNRV8MZTh6w4BpUZniOn9GUUeAyfUYDxAhKNusXKCsM2EsyXS08lFwXS2bx5JcSSalse6ufjvVq1SBHUUSyWDaROykrhEkYmnKi0uqBr6js8QSF3+LS0xvNUT2vMmzt96sqvH6svkt2Ccw6IS/BLMpQUc4jELNs9nJf0guqb6sEg/KwQjE9FNiFHK0+AxALimthwz+BUfO602EYZoUmpYLYFBHH5DzL6pajaTqplERRGS+Vi4dhvMsLbyzWTJKk4bc6nVk90opFqZhqefvxUf1mutxyT47V4Z+sZtzcm3ty+6dISGAD2fITFAyzZ7qelnwWPfac/kowXqgxZGlZLd2BpcIeCCo8D62tebClj89lcvKEooavkVn9QBr1Q1jqeT+VFnRG5wgVsxWcWxOH7uSgZZ4VuJvRH+KS00NZxKhYT806wStfXbl9ewhyUI4IdNcw0j2YoecEPa9miZbXNkXLcrTWkYzRP4Ux7tFwnH3bQ3fOHZiNo9uOx4p9pd96nS/c0ILRyHevD2tort3IybvMrCvi2QczMu+FG5l7GiPb9ey+NyNz/xdG5g39wdA9sJG5NaS8LiMzg2MameV1gCePBRF56DyXiAOBofZdHEwSPOWbjzcwq7IjKW2cUqTKhOnq0bwAsDErWgR6AacQqaIfqTgNX+Lui0JBPR0yuyjU4afdgzHIbzFoC8p3jEbzkJ9B3hVk5/Qg958L8nsWne34CYi9er7lnRxiHWKeCuM6opK0fMa8/SZ6a1RPRMXl6kqtEo+n5R+olIMN9SV4SZHmjbiaz3jGuXiIPhQ7YV+HUeb0SEizKQF4WS+EESEaIY7gS8iBntciLRE/jSnD2HiAfikzykojh2mBhmOrVoZlB71cXBoehyOBVU/srL7d4kjQkS1o2f4p0r630BH7bOgbQbTqIHbkfEGHnR8s49Nmfbbzn8bO9YN2He79U9t5+9pE5WxnM99o5vWny47bNnP/qGa+w6n8bObHNfN6OPf8jkhwVDNvn/3LrP1s5Dsauec4LQS9Yxq5236/5I9CAGi+FRs/RSE+g7npLZSg8Wwi2PEEtg8088W7/OOv7x8D4+7zlw9vkfW3dW+0z9j6WF3kKOu8i2u+IyDeZCjv3jbcxv1wR3WXHBM+m0+UJ35HM8RnKLu1s4g+Cqf8Bi9QeftuVN9GMMbjceV2UE6pdWlYF788DlcZuyqrFZh7oG+/8cZev+MCofMVhX3Qt/uVyRZ9b2kW0/GLhG9XF9QCbKe3NVfxpP48wO7KCI4JYftoeIbweRC6Rzzed0LYcXSjBY8Zvv9wc0ZxY2pev6TxO1Dseh31P6AIxfU/yMhHsOv/MnKu/gU=</diagram></mxfile>"
  }
]