Naming Convention

  • entity : for persistence
  • model : for response and input

Tech Stack

  • JDK 21
  • Kotlin 1.9
  • Gradle 8.5
  • Spring Boot 3.2.3
  • JUnit 5
  • Mockk 1.12.0
  • Maven 3.9.6

Practices

  • entity
  • modeling
  • input validation
  • exception handler
  • unit test
  • integration test
  • mapstruct for mapper (input to entity, entity to model)
  • declarative http clients
  • jpa repository

Tools

  • Open API Generator
  • Jacoco

Testing

Open API Generator

openapi-generator generate \
    -i policies-openapi-v1_2.yaml \
    -g kotlin-spring \
    -o output \
    --package-name com.prudential.symphony.domains.policy \
    --additional-properties=library=spring-boot,useSpringBoot3=true,useBeanValidation=true \
    --import-mappings=DateTime=java.time.LocalDateTime \
    --type-mappings=DateTime=java.time.LocalDateTime

Jacoco

Building

  • keywords: BUILD FAILED

Signing

Questions

  • Kotlin constructor with optional parameters

Code Analysis

Testing

Integration Testing

Stub

https://wiremock.org/docs/request-matching/ https://wiremock.org/docs/solutions/spring-boot/

Reference

https://mkyong.com/spring-boot/spring-boot-spring-data-jpa-postgresql/

https://thorben-janssen.com/hibernate-features-with-spring-data-jpa/

https://www.51cto.com/article/766636.html

https://lexcao.io/zh/posts/spring-data-jpa-join-table/

https://www.baeldung.com/spring-data-jpa-batch-inserts

https://github.com/eugenp/tutorials/blob/master/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/softdelete/Product.java

https://docs.spring.io/spring-framework/reference/integration/rest-clients.html

https://www.baeldung.com/spring-data-jpa-dynamicupdate

https://www.baeldung.com/spring-graphql-error-handling

https://www.baeldung.com/kotlin/kotest-spring-boot-test

https://techdozo.dev/spring-for-graphql-pagination-with-code-example/