An open API service indexing awesome lists of open source software.

https://github.com/brmattge/abi-gth-omnia-developer-evaluation

A CRUD API challenge with DDD, .NET, Mediator, Event Publisher, Logger, Unit Tests (xUnit), and PostgreSQL, including business rules.
https://github.com/brmattge/abi-gth-omnia-developer-evaluation

dotnet dotnet-core event-publisher logger mediator postgresql unit-test xunit xunit-tests

Last synced: 3 months ago
JSON representation

A CRUD API challenge with DDD, .NET, Mediator, Event Publisher, Logger, Unit Tests (xUnit), and PostgreSQL, including business rules.

Awesome Lists containing this project

README

        

# Developer Evaluation Project

`READ CAREFULLY`

## Instructions
**The test below will have up to 7 calendar days to be delivered from the date of receipt of this manual.**

- The code must be versioned in a public Github repository and a link must be sent for evaluation once completed
- Upload this template to your repository and start working from it
- Read the instructions carefully and make sure all requirements are being addressed
- The repository must provide instructions on how to configure, execute and test the project
- Documentation and overall organization will also be taken into consideration

## Running Migrations
**Important**: To run the localhost project, make sure to follow the instructions below to run migrations and set up the database.

See [How to run migrations in your project](/.doc/how-to-migration.md)

## Use Case
**You are a developer on the DeveloperStore team. Now we need to implement the API prototypes.**

As we work with `DDD`, to reference entities from other domains, we use the `External Identities` pattern with denormalization of entity descriptions.

Therefore, you will write an API (complete CRUD) that handles sales records. The API needs to be able to inform:

* Sale number
* Date when the sale was made
* Customer
* Total sale amount
* Branch where the sale was made
* Products
* Quantities
* Unit prices
* Discounts
* Total amount for each item
* Cancelled/Not Cancelled

It's not mandatory, but it would be a differential to build code for publishing events of:
* SaleCreated
* SaleModified
* SaleCancelled
* ItemCancelled

If you write the code, **it's not required** to actually publish to any Message Broker. You can log a message in the application log or however you find most convenient.

### Business Rules

* Purchases above 4 identical items have a 10% discount
* Purchases between 10 and 20 identical items have a 20% discount
* It's not possible to sell above 20 identical items
* Purchases below 4 items cannot have a discount

These business rules define quantity-based discounting tiers and limitations:

1. Discount Tiers:
- 4+ items: 10% discount
- 10-20 items: 20% discount

2. Restrictions:
- Maximum limit: 20 items per product
- No discounts allowed for quantities below 4 items

## Overview
This section provides a high-level overview of the project and the various skills and competencies it aims to assess for developer candidates.

See [Overview](/.doc/overview.md)

## Tech Stack
This section lists the key technologies used in the project, including the backend, testing, frontend, and database components.

See [Tech Stack](/.doc/tech-stack.md)

## Frameworks
This section outlines the frameworks and libraries that are leveraged in the project to enhance development productivity and maintainability.

See [Frameworks](/.doc/frameworks.md)

## Project Structure
This section describes the overall structure and organization of the project files and directories.

See [Project Structure](/.doc/project-structure.md)