Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/marqueewinq/popug-task-tracker
A training project for Async Architecture course 2022
https://github.com/marqueewinq/popug-task-tracker
Last synced: 28 days ago
JSON representation
A training project for Async Architecture course 2022
- Host: GitHub
- URL: https://github.com/marqueewinq/popug-task-tracker
- Owner: marqueewinq
- Created: 2022-09-23T12:04:19.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-05-22T23:50:02.000Z (over 1 year ago)
- Last Synced: 2024-04-14T07:40:28.223Z (10 months ago)
- Language: Python
- Size: 306 KB
- Stars: 3
- Watchers: 3
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# popug-task-tracker
A training project for Async Architecture course 2022.
In this project, i was aiming to do two things simultaneously:
- Build a sufficiently complex app strictly according to [12 factors](https://12factor.net)
- Use asynchronous architecture## Project Description
Build a task tracker for parrots (a.k.a. `popug`) with a billing system.
## HW 1
> Разобрать каждое требование на составляющие (актор, команда, событие, query). Определить, как все бизнес цепочки будут выглядеть и на какие шаги они будут разбиваться.
### Требования на составляющие
#### Task tracker
> Таск-трекер должен быть отдельным дашбордом и доступен всем сотрудникам компании UberPopug Inc.
> Каждый сотрудник должен иметь возможность видеть в отдельном месте список заассайненных на него задачActor: User
Command: List Tasks | List Tasks filtered by User
Data: User Role
Event: -> Авторизация в таск-трекере должна выполняться через общий сервис авторизации UberPopug Inc (у нас там инновационная система авторизации на основе формы клюва).
Actor: User
Command: Log in a User
Data: `beak_geometry`
Event: -> Новые таски может создавать кто угодно (администратор, начальник, разработчик, менеджер и любая другая роль).
Actor: User
Command: Create Task
Data: desc, status, assignee (User)
Event: Task.Assigned, Task.Created> Менеджеры или администраторы должны иметь кнопку «заассайнить задачи»
Actor: Manager or Admin User
Command: Reassign Tasks
Data: -
Event: Task.Assigned> Каждый сотрудник должен иметь возможность ... отметить задачу выполненной.
Actor: User
Command: Close Task
Data: Task_id
Event: Task.Closed; optional: Task.Updated#### Accounting
> Аккаунтинг должен быть в отдельном дашборде и доступным только для администраторов и бухгалтеров.
Actor: User
Command: List Accounts | List Accounts filtered by User
Data: User Role
Event: -> У каждого из сотрудников должен быть свой счёт, который показывает, сколько за сегодня он получил денег. У счёта должен быть аудитлог того, за что были списаны или начислены деньги, с подробным описанием каждой из задач.
Actor: User
Command: Detail Account
Data: User, Account id
Event: -Actor: User
Command: List Transactions
Data: User, Account id
Event: -> В конце дня необходимо: считать сколько денег сотрудник получил за рабочий день ...
Actor: cron
Command: Make User Invoices
Data: Tasks joined by User joined by Account
Event: Transaction.Created> ... и отправлять на почту сумму выплаты.
Actor: Transaction.Created
Command: Make Payment & Send Email
Data: Transaction id
Event: Transaction.Processed, Account.FinalizedForTheDay> После выплаты баланса (в конце дня) он должен обнуляться
This will automatically happen as a result of processed transactions.
#### Analytics
> Нужно показывать самую дорогую задачу за день, неделю или месяц.
Actor: Task.Created
Command: Update analytics dashboard
Data: Task
Event: -### Бизнес-цепочки
1. Create Task -> Assign Task
2. Reassign Tasks -> Create Transactions & Update Account.balance
3. End-of-day -> Create Transactions -> Send emails### Модель данных
3 домена:
- авторизация
- тудушка
- деньги#### Авторизация
User: id
#### Тудушка
Task: id, description, status, assignee, created_at
Нужны извне: User
#### Деньги
Account: user_id, balance
Transaction: transaction_id, account_from, account_to, amount, created_at
Invoice: invoice_id, account_from, amount, created_atНужны извне: User, Task
### Сервисы
4 сервиса: 3 такие же, как домен + аналитика.
Я думаю, что аналитика ("самая дорогая задача" итп) должна быть отдельным сервисом потому, что:
- от неё из других сервисов ничего не зависит
- она не меняет state других сервисовСоответственно, если нужно, её можно впилить в другой сервис безболезненно (а наоборот обычно печально)
Связи между сервисами:
- авторизация + `*`: синхронная, потому что это авторизация
- тудушка + деньги: можно сделать асинхронно
- аналитика + тудушка: асинхронно### Бизнес-события и CUD-события
Стриминг есть только один: для расчёта выплат в конце дня.
Остальные события -- бизнес-события, насколько я понял определение.
## HW0
[Miro Link](https://miro.com/app/board/uXjVPTrIHgk=/?share_link_id=879380577449)