A todo list can contain multiple todo items, using todo_list_id foreign key
A todo list can have one parent todo list, based on parent_id
A todo list can contain other smaller todo lists
Todo list and todo items models inherit from one abstract model
Third, I used Docker container so no need to setup anything in local
Fourth, I tried to apply Test driven development in writing the tests (not fully completed) by writing the simple failed testcase for the function before implementing, then implement the function until the testcase is succesfully and refactor the test code later.