FR: Implement lists
peterfriese opened this issue · comments
Currently, MakeItSo stores all tasks in a single list per user. To make managing tasks more flexible, MakeItSo should support adding tasks to lists.
In the spirit of MakeItSo being a replica of the iOS Reminders app, here are a couple of assumptions:
- lists can have any number of tasks
- lists are not nested
- support sharing lists with other people
- lists have a name, an icon, and an accent color
- users can specify the ordering of lists
- there are 4 special lists
- All: shows all tasks
- Today: this list shows all tasks that are due today
- Scheduled: this list shows all tasks that have a due date, grouped by date
- Flagged: : this list shows all tasks that are marked as flagged
Hi @peterfriese ! ✋
First and foremost, thanks a lot for your series of tutorials, they're really clear, to the point, and are super helpful to get one started with ios/firebase development.
I've followed along the MakeItSo
app development tutorial, and as an exercise, I am now trying to continue developing the app to match more features of the official iOS app. When trying to extend the design of the MakeItSo
example app to support the concepts of "lists" and "groups" I've found myself having a hard time visualizing how to extend the Repository
pattern approach you had adopted so far.
Do you already have ideas on what Repositories
would then exist, and what their API would look like already that you'd be willing to share? I'm especially struggling with how the different implementations I can imagine would relate to the Firebase data-model. For instance, if you have a collections/documents looking like lists/{listID}/tasks/{taskID}
does that convert to a single ListRepository
, or two repositories ListRepository
and TaskRepository
? Do they allow addressing nested documents (a list's task) directly, do they then proxy the request to the children repository?
Sorry for the lot of questions. I'm a true beginner in the iOS world, and I would love to hear what your approach and design would be in that scenario, and as I found this issue to exist, I thought that might be the right place to ask the question 😄
Cheers! 🦕