Skip to content

sunfinancegroup/docs-home-task-hh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 

Repository files navigation

Home task from Hedgehog

Thank you for applying for an engineering position at Sun Finance.

Preamble

The goal of this task is to test tactical and strategic Domain-Driven Design [1] skills of the candidate in close to real word (small) project.

Intro

You will build the event driven Verification system with public and private facing RESTish API [2] in Domain-Driven design manner.

Tooling:

  • use the programming language of your choice e.g. Java, Kotlin, PHP;
  • use the framework of your choice e.g. Spring Boot, Ktor, Symfony;
  • use the storage of your choice e.g. PostgreSQL, MySQL, MongoDB, SQLite;
  • use the message broker of your choice e.g. RabbitMQ, Kafka, NATS;
  • use Docker.

Result evaluation:

  • we expect to checkout your code from Git;
  • running docker-compose up should start the project with schema and fixtures loaded;
  • we should be able to access containers from local machine in order to evaluate the result;
  • add README with your notes and setup instruction if required.

Hints:

  • take your time, learn what you don't know;
  • follow supplied references if you want to expand on some topic;
  • if you have any questions don't hesitate to contact us (contact person will be provided to you);
  • don't try to be perfect.

Additional services you will use:

Specification

The project will include three aggregates [3]: Template, Notification and Verification itself.

Think of it as 3 different services. However, you may share common interfaces, value objects or infrastructure code.

Template

This part of the system acts like Open Host Service [4]. Template specification.

Verification

Upstream public facing part of the system. Verification specification.

Notification

Downstream consumer part of the system. Notification specification.

Optional

It is completely fine to stop right away, when above specification is implemented.

However, if you're feeling advantageous below are additional points to make your work perfect:

  • implement unit tests for application [5] and domain services;
  • implement outbox pattern [6];
  • configure API Gateway [7] e.g. Kong or KrakenD.

References

  1. https://martinfowler.com/bliki/DomainDrivenDesign.html
  2. Stick to Level 2 maturity model
  3. https://martinfowler.com/bliki/DDD_Aggregate.html
  4. http://ddd.fed.wiki.org/view/open-host-service
  5. https://martinfowler.com/eaaCatalog/serviceLayer.html
  6. https://microservices.io/patterns/data/transactional-outbox.html
  7. https://microservices.io/patterns/apigateway.html

About

Home task by Hedgehog.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages