To build the project
docker-compose up -d --build api
This repo is a sample for the package Django-ddd (package here https://github.com/jdiazromeral/django-ddd). This package is a proof of concept to adapt Django apps folder structure to something more like hexagonal architecture.
Project is build using docker-compose, so we don't need to set a local environment; we can directly use the one provided by docker-compose and docker.
All the code is in the src folder, under the service context. You can
find entities, repository definitions, exceptions and business validation rules under domain,
application services for the different features under application and all infrastructure related stuff,
mainly API controllers, in memory and mongodb repositories, under infrastructure.
Each endpoint is listed in config/urls.py file.
You can find all the domain definitions under service/domain. Main entities are:
- Quiz
- Question
- Answers
Added two samples:
- In memory repository
- MongoDB repository (sorry, a bit quick and dirty one) using PyMongo
In the future we will add one using Django models.
We can retrieve all quizs available with a get call to http://localhost:8000/all
We can create quizs with a post call to: http://localhost:8000/create
Sample calls:
curl --location --request GET 'http://localhost:8000/all
or
curl --location --request GET 'http://localhost:8000/all_mongo
Response
[
{
"id": "d8a13304-d815-4db4-b801-efb3f91d55f3",
"title": "quiz title",
"description": "quiz description",
"type": "quiz type",
"time": 10,
"questions": [
{
"id": "a201429b-35d9-469c-9af1-125359d7d76e",
"text": "text question",
"skill": "LISTENING",
"answers": {
"ff83bc63-cd97-453a-b9b1-287522ad00b1": {
"id": "ff83bc63-cd97-453a-b9b1-287522ad00b1",
"text": "answer text",
"question_id": "a201429b-35d9-469c-9af1-125359d7d76e"
},
"f099b566-7615-40a8-8a7b-1f5c174083c1": {
"id": "f099b566-7615-40a8-8a7b-1f5c174083c1",
"text": "answer text",
"question_id": "a201429b-35d9-469c-9af1-125359d7d76e"
}
},
"correct_answer": [
"ff83bc63-cd97-453a-b9b1-287522ad00b1"
],
"quiz": "d8a13304-d815-4db4-b801-efb3f91d55f3"
}
]
}
]
To create you can use create or create_mongo:
curl --location --request POST 'http://localhost:8000/create \
--header 'Content-Type: application/json' \
--data-raw '{
"id": "d8a13304-d815-4db4-b801-efb3f91d55f3",
"title": "quiz title",
"description": "quiz description",
"type": "quiz type",
"time": 10,
"questions": [
{
"id": "a201429b-35d9-469c-9af1-125359d7d76e",
"text": "text question",
"skill": "LISTENING",
"answers": [
{
"id": "ff83bc63-cd97-453a-b9b1-287522ad00b1",
"text": "answer text",
"question_id": "a201429b-35d9-469c-9af1-125359d7d76e"
},
{
"id": "f099b566-7615-40a8-8a7b-1f5c174083c1",
"text": "answer text",
"question_id": "a201429b-35d9-469c-9af1-125359d7d76e"
}
],
"correct_answer": ["ff83bc63-cd97-453a-b9b1-287522ad00b1"],
"quiz_id": "d8a13304-d815-4db4-b801-efb3f91d55f3"
}
]
}'