https://github.com/larmic/neusta-code-challange-kotlin
This is a java to kotlin migration https://github.com/larmic/neusta-code-challange-java
https://github.com/larmic/neusta-code-challange-kotlin
code-challenge java java-8 java-to-kotlin java8 kotlin spring-boot
Last synced: 5 months ago
JSON representation
This is a java to kotlin migration https://github.com/larmic/neusta-code-challange-java
- Host: GitHub
- URL: https://github.com/larmic/neusta-code-challange-kotlin
- Owner: larmic
- License: apache-2.0
- Created: 2018-03-02T12:02:31.000Z (over 8 years ago)
- Default Branch: main
- Last Pushed: 2025-12-16T10:06:19.000Z (6 months ago)
- Last Synced: 2025-12-19T23:15:35.112Z (6 months ago)
- Topics: code-challenge, java, java-8, java-to-kotlin, java8, kotlin, spring-boot
- Language: Kotlin
- Size: 209 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# Neusta Code Challenge
[](https://github.com/larmic/neusta-code-challange-kotlin/actions/workflows/maven.yml)
[](https://opensource.org/licenses/Apache-2.0)
## Introduction
This is a submission to the [neusta code challenge 2017](misc/codeChallenge.pdf) [Git Tag v2017-MARCH](https://github.com/larmic/neusta-code-challange-kotlin/releases/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
```ssh
mvn clean package
java -jar target/ncc-kotlin.jar
```
### Docker
To build docker image a docker service must run on host system.
```ssh
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](http://localhost:8080/) access the rest endpoints documentation.
### Test coverage
```ssh
mvn clean cobertura:cobertura
```
and open ```target/site/cobertura/index.html``` in your browser.