https://github.com/elvisoliveira/literate-train
A programming challange in Java SpringBoot. Restful service that implements a cache based user manager.
https://github.com/elvisoliveira/literate-train
jquery junit maven mockito postman spring-boot swagger
Last synced: 3 months ago
JSON representation
A programming challange in Java SpringBoot. Restful service that implements a cache based user manager.
- Host: GitHub
- URL: https://github.com/elvisoliveira/literate-train
- Owner: elvisoliveira
- Created: 2019-09-24T15:56:36.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-09-24T16:10:27.000Z (over 6 years ago)
- Last Synced: 2025-03-05T01:15:54.766Z (about 1 year ago)
- Topics: jquery, junit, maven, mockito, postman, spring-boot, swagger
- Language: Java
- Homepage:
- Size: 98.6 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Literate Train
The name for this project was automatically generated by **Github**. Follow me: [@elvisoliveira](https://github.com/elvisoliveira)
## How to execute?
```bash
mvn spring-boot:run
```
## How to test the code?
```bash
mvn test
```
## How to test the app?
```bash
newman run ./postman_collection.json --environment ./postman_environment.json --iteration-data ./postman_data.json
```
## Example

## How to run the UI?
There is a simple UI running on the root (/) controller. Since the default port is **1337**, if you are running the app locally you can have access to it on `http://127.0.0.1:1337/`
When the app starts a keypair is generated and delivered the file `postman_data.json`, you may use the info on it.
## The Challange: *Single Digit*
A single digit is defined following this rules: Given an integer, we need to find the single digit of it.
- If **x** has only one digit, then its single digit is **x**.
- Otherwise, the single digit of **x** equals the single digit of the sum of the digits of **x**.
For instance, the single digit of **9875** will be calculated as:
|Parameter|Calc|Return|
|---|---|---|
|9875|9 + 8 + 7 + 5|29|
|29|2 + 9|11|
|11|1 + 1|2|
|2|2|2|
|2|2|2|
Given two numbers **n** and **k**, **P** must be defined as an string concatenation of **n * k**.
Example:
- *n* = 9875
- *k* = 4
- *p* = 9875 9875 9875 9875
```java
singleDigit = singleDigit(9875987598759875)
// 5 + 7 + 8 + 9 + 5 + 7 + 8 + 9 + 5 + 7 + 8 + 9 + 5 + 7 + 8 + 9 = 116
singleDigit = singleDigit(116)
// 1 + 1 + 6 = 8
singleDigit = singleDigit(8)
```
The singleDigit function must have the following parameters:
1. **n**: A string representing an integer `1 <= n <= 10ˆ10000002`
2. **k**: An integer representing the number of concatenation times `1 <= k <= 10ˆ53`
3. The single digit function shall return an integer
### User CRUD
- A CRUD must be created for users
- A user has a name, email, address and a list of single digit results already calculated
- Each result list object must contain which parameters were inputted and the result of it
### CACHE
- A memory cache must be created to store the last 10 calculations performed by the single digit function, this cache is user independent, that is, if a calculation has already been performed and it is on the cache, it must not be performed again. Using caching frameworks is **not** allowed
### Encryption
- User name and email information must be encrypted with an asymmetric key `RSA` of size **2048**. Each user may have a separated encryption key. The information will be encrypted with the public key and the client will decrypt using their private key
### API'S
- Endpoints must be made available for the users CRUD
- An endpoint must be available for single digit calculation, this can be optionally associated with a user
- An endpoint that retrieves all calculations for a given user must be created
- An endpoint to send the user public key `that will be used for encryption` must be created. This API should receive as string that will contain the key
### Building the app
- The application must contain an in-memory database
- *Maven* should be used to build, run tests and start the application
- *Unit* tests must be created
- *Postman* integrated tests must be created and it's collection must be at the root of the repository
- This collection should be called "postman_collection.json"
- An Open API *Swagger* file should be created with API specification