Best Flask open-source libraries and packages

Todos ddd example

Learning DDD with theory only is boring, let's do some exercises!
Updated 9 months ago

Todos DDD Example

An example todos app with DDD approach

References

Domain Modeling Iteration

Round 1

User stories

  • User will be logged in by providing a username (no need password, no need to register)
  • User could manage one ore more todo task items
  • Each task's state could be as follow: new -> doing -> done
  • To stay focused, user could only have 3 doing tasks at a time. But if he has finished at least 3 tasks in his lifetime usage, he could have up to 5 concurrent doing tasks
  • User could delete/remove any task in the list
  • No need to manage task creation time

Domain model

SQLite repository

Round 2

REST endpoints with Flask

  1. Get all tasks of user
GET /tasks

Request
--------
Header::Authorization: Bearer <username>

Response
--------
[
    { "taskid": "abc...", "description": "...", "status": "..." },
    { "taskid": "xyz...", "description": "...", "status": "..." }
]

  1. Add task
POST /tasks

Request
-------
Header::Authorization: Bearer <username>
Header::Content-Type: application/json
Body: {
    "description": "new task"
}
  1. Update task status
PUT /tasks/<task_id>/status

Request
-------
Header::Authorization: Bearer <username>
Header::Content-Type: application/json
Body: {
    "status": 1  # 1: doing; 2: done
}

Round 3

New user stories

  • Now, we need to manage the emergency of a task (true or false)
  • To keep focused, each user could only have 3 doing tasks at a time, but if he has a really urgent task, he could add 1 and only 1 emergency task to having 4 concurrency doing tasks
  • If a user has finished at least 3 tasks in his lifetime usage, he could have up to 5 concurrent doing tasks

Next domain model

Mongo repository

Collection User {
    username: "joe",
    tasks: [
        {
            id: "...",
            desc: "...",
            state: "...",
            emergency: 1  # 1: yes; 0: no
        }, {
            ...
        }
    ]
}
Tags cli python