/neusta-code-challange-kotlin

This is a java to kotlin migration https://github.com/larmic/neusta-code-challange-java

Primary LanguageKotlinApache License 2.0Apache-2.0

Neusta Code Challenge

CI with Maven License

Introduction

This is a submission to the neusta code challenge 2017 Git Tag v2017-MARCH. The following technologies have been used for the implementation: maven, java, spring boot, swagger and optional docker.

Three endpoints are available after starting the application:

  • POST /api/import consumes multipart/form-data
  • GET /api/room/{roomNumber} produces JSON
  • GET /api/room produces JSON

If the possibility to search for user details is a required feature, two additional endpoints should be implemented:

  • GET /api/persons/{ldapUser}
  • GET /api/persons?firstName=...&lastName=...&ldapUserName=...

The returning JSON should contain a link to the corresponding rooms (see HATEOAS).

Main design decisions

Due to time constrains no ARC42 documentation is created.

Decision Reason
Java
  • Next to kotlin my favorite language
Spring
  • Spring is popular for building web and enterprise applications
  • Spring supports dependency injection
  • It is easy to write tests in Spring
Spring Boot
  • Spring Boot make it easy to create Spring-powered, production-grade applications and services with minimum fuss.
  • Spring Boot provides a range of non-functional features that are common to large classes of projects (e.g. embedded servers, security, metrics, health checks, externalized configuration)
Hexagonal (or onion) architecture
  • It is an architectural style that moves programmer’s focus from conceptual layers to a distinction between the software’s inside and outside parts
  • Hexagonal Architecture defines conceptual layers of code responsibility, and then points out ways to decouple code between those layers.

Requirements

  • Java 17
  • Maven >= 3.6.x
  • Docker optional

Build and run

Plain Java

mvn clean package
java -jar target/ncc-kotlin.jar

Docker

To build docker image a docker service must run on host system.

mvn clean package docker:build
docker run -d -p 8080:8080 ncc/ncc 

Testing and documentation

Swagger UI

After starting the application, please open swagger ui access the rest endpoints documentation.

Test coverage

mvn clean cobertura:cobertura

and open target/site/cobertura/index.html in your browser.