# Projeto PDS
## Ideias
* **Bot telegram promoções**: bot telegram que acompanha os preços de um produto e avisa sempre que o preço abaixar (em comparação com o preço corrente na hora da mensagem recebida pelo bot)
* possui um threshold de variação de preço desejada (ex: avisar somente se preço tiver menor que x)
* suporte a diversos sites de compra (ex: steam, amazon, kabum)
* **tecnologias**: python, redis/database, ec2
* **plataformas**: telegram
* **Music player**: music player que toque músicas vindas de playlists selecionadas pelo usuário em diversas plataformas (spotify e youtube)
* possui conexão na API de sites como youtube e spotify
* faz o próprio player de uma playlist conjunta
* permite edição da playlist (talvez)
* remove tracks duplicados (talvez)
* **tecnologias**: python
* **plataformas**: web, cli (via pypi)
* **Análise de dados**: escolher uma fonte de dados e fazer análises em cima destes (ex. estatísticas do redis, steam, twitter)
* estatísticas gerais, métricas, análise de dados
* **tecnologias**: python, redis stream (apache kafka)
* **plataformas**: telegram, cli, web
* **Jogo**:
## Práticas de processo (checar se definições conferem)
* **histórias de usuários**:
* **backlog do produto**:
* **backlog do sprint**:
* **sprint planning**: pontuar por fibonacci, sprint poker
* **sprint review**: slide pequeno colaborativo com o que cada um fez
* **retrospectiva**: simular dinâmica de post-it e action points
## Programação
* **testes de unidade**:
* **testes de integração**:
* **testes de interface (opcional)**:
* **bons princípios e padrões de projeto**:
* **refactoring**:
* **revisão de código (pull requests)**: um approval, no mínimo
* **code style**: PEP8 e formatação com black
## Deployment
* **controle de versões (GitHub)**: github público
* **integração contínua**: CI básico com Jenkins ou Circle CI
* **trunk-based development**: master + fb?
* https://trunkbaseddevelopment.com/
* **feature flags**:
* https://martinfowler.com/articles/feature-toggles.html
* **deployment contínuo (opcional)**: aws ec2 + k8s via CI (com set image)
* https://medium.com/@saidur2/setup-a-kubernetes-cluster-in-aws-under-20-minutes-ecab147c4d89
* **looging**: logging estruturado em json (loguru) + ELK on K8s
* https://logz.io/blog/a-practical-guide-to-kubernetes-logging/
* **analytics**: sentry + prometheus/kibana + sonarqube
* https://logdna.com/resource/kibana-vs-grafana-vs-prometheus-vs-logdna/
*
## Dump de frameworks/ideias
* Python
* [Poetry](https://python-poetry.org/docs/)
* [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) (se formos fazer um bot)
* [Aws](https://aws.amazon.com/pt/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsm.page-all-free-tier=1) Ec2
* Configuração necessária básica via ansible
* Kubernetes cluster dentro
* Dois namespaces: production e staging
* App
* Imagem docker com o conteúdo do bot/app
* Deployment do app via K8s
* Adicionar um redis no k8s como DB
* CI/CD
* Circle CI vs Travis CI vs Jenkins vs [Github Action](https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions)
* https://seandavi.github.io/post/learning-github-actions/
* https://help.github.com/en/actions/configuring-and-managing-workflows/configuring-a-workflow#adding-a-workflow-status-badge-to-your-repository
* Estágios: lint (commit), test (commit), qualitygate (master, pos-PR), export requirements (master, pos-PR), build image (master, pos-PR), deploy k8s staging (master, pos-PR), publish prod (tag), deploy k8s prod (tag)
## Dúvidas
* Prometheus substitui ELK stack?
* Prometheus é necessário tendo ELK stack?