{"id":45056378,"url":"https://github.com/pedro-git-projects/puc-mvp-software-architecture-persistence","last_synced_at":"2026-02-19T09:43:20.097Z","repository":{"id":245622486,"uuid":"818385838","full_name":"pedro-git-projects/puc-mvp-software-architecture-persistence","owner":"pedro-git-projects","description":null,"archived":false,"fork":false,"pushed_at":"2024-06-24T21:12:32.000Z","size":64,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-06-25T03:28:29.406Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pedro-git-projects.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-21T18:25:54.000Z","updated_at":"2024-06-24T21:12:35.000Z","dependencies_parsed_at":"2024-06-23T03:27:49.115Z","dependency_job_id":"a6b982a2-49d2-4a29-b8f7-c44c2b519a77","html_url":"https://github.com/pedro-git-projects/puc-mvp-software-architecture-persistence","commit_stats":null,"previous_names":["pedro-git-projects/puc-mvp-software-architecture-persistence"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pedro-git-projects/puc-mvp-software-architecture-persistence","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedro-git-projects%2Fpuc-mvp-software-architecture-persistence","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedro-git-projects%2Fpuc-mvp-software-architecture-persistence/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedro-git-projects%2Fpuc-mvp-software-architecture-persistence/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedro-git-projects%2Fpuc-mvp-software-architecture-persistence/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pedro-git-projects","download_url":"https://codeload.github.com/pedro-git-projects/puc-mvp-software-architecture-persistence/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedro-git-projects%2Fpuc-mvp-software-architecture-persistence/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29609525,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T06:47:36.664Z","status":"ssl_error","status_checked_at":"2026-02-19T06:45:47.551Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-19T09:43:19.429Z","updated_at":"2026-02-19T09:43:20.089Z","avatar_url":"https://github.com/pedro-git-projects.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Projeto MPV em Arquitetura de Software (Songboxd) - Backend\n\nEste é o backend do MVP em Arquitetura de Software para a pós-graduação em engenharia de software da PUC-RJ desenvolvido com FastAPI. O backend é responsável pela persistência e autenticação de usuários. Para rodar o projeto, basta ter o Docker e o Docker Compose instalados e executar os comandos `docker-compose build` e `docker-compose up`.\n\n## Tabela de Conteúdos\n\n1. [Pré-requisitos](#pré-requisitos)\n2. [Estrutura do Projeto](#estrutura-do-projeto)\n3. [Configuração](#configuração)\n4. [Desenvolvimento](#desenvolvimento)\n5. [Uso](#uso)\n6. [Dockerfile](#dockerfile)\n7. [docker-compose.yml](#docker-composeyml)\n8. [Critérios Avaliativos](#critérios-avaliativos)\n9. [Vídeo](#vídeo)\n\n## Pré-requisitos\n\nAntes de começar, você precisará ter as seguintes ferramentas instaladas em sua máquina:\n\n- [Docker](https://www.docker.com/get-started)\n- [Docker Compose](https://docs.docker.com/compose/install/)\n\n## Estrutura do Projeto\n\n- `Dockerfile`: Define a imagem Docker para a aplicação.\n- `docker-compose.yml`: Define os serviços Docker para desenvolvimento.\n- `.dockerignore`: Arquivos e diretórios a serem ignorados pelo Docker.\n- `app/`: Diretório principal contendo a aplicação FastAPI.\n  - `main.py`: Arquivo principal que define a aplicação FastAPI.\n  - `models.py`: Define os modelos de dados.\n  - `database.py`: Configuração do banco de dados.\n  - `auth/`: TODO.\n    - `auth.py`: Define as funções principais para autenticação de usuários, incluindo criação de tokens JWT, verificação de credenciais, e recuperação de informações do usuário atual.\n    - `schemas.py`: Define os modelos Pydantic usados para validação e serialização de dados relacionados à autenticação e usuários.\n    - `utils.py`: Fornece utilitários para verificação e hashing de senhas usando a biblioteca \n  \n## Configuração\n\n1. Clone o repositório:\n\n   ```bash\n   git clone https://github.com/pedro-git-projects/puc-mvp-software-architecture-persistence.git\n   cd puc-mvp-software-architecture-persistence\n   ```\n\n## Desenvolvimento\n\nPara rodar a aplicação em modo de desenvolvimento, use o Docker Compose:\n\n1. Construa a imagem Docker:\n\n   ```bash\n   docker-compose build\n   ```\n\n2. Inicie a aplicação:\n\n   ```bash\n   docker-compose up\n   ```\n\nA aplicação estará disponível em [http://localhost:8000](http://localhost:8000).\n\n## Uso\n\n1. **Cadastro de Usuário**:\n   - Envie uma requisição POST para `/users/` com os dados do usuário para criar uma nova conta.\n\n2. **Login**:\n   - Envie uma requisição POST para `/token` com as credenciais do usuário para obter o token de autenticação.\n\n3. **Obter Perfil do Usuário**:\n   - Envie uma requisição GET para `/users/me/` com o token de autenticação para obter os dados do perfil do usuário.\n\n4. **Deletar Conta do Usuário**:\n   - Envie uma requisição DELETE para `/users/me` com o token de autenticação para deletar a conta do usuário.\n\n## Dockerfile\n\nO `Dockerfile` utilizado para a construção da imagem Docker:\n\n```Dockerfile\nFROM python:3.10\n\nWORKDIR /app\n\nCOPY requirements.txt .\n\nRUN pip install --no-cache-dir -r requirements.txt\n\nCOPY . .\n\nCMD [\"uvicorn\", \"app.main:app\", \"--host\", \"0.0.0.0\", \"--port\", \"8000\"]\n```\n\n## docker-compose.yml\n\nArquivo `docker-compose.yml` para desenvolvimento:\n\n```yaml\nFROM python:3\n\nWORKDIR /app\n\nCOPY requirements.txt .\n\nRUN pip install --no-cache-dir -r requirements.txt\n\nCOPY . .\n\nCMD [\"uvicorn\", \"app.main:app\", \"--host\", \"0.0.0.0\", \"--port\", \"80\"]\n```\n\n## Critérios Avaliativos\n\n- \"A interface do usuário deve fazer chamadas a pelo menos 5 rotas diferentes.\"\n\n| Rota                                    | Método  | Propósito                                                      |\n|-----------------------------------------|---------|----------------------------------------------------------------|\n| `/token`                                | POST    | Obter o token de autenticação para login.                      |\n| `/users/`                               | POST    | Criar um novo usuário.                                         |\n| `/users/me`                             | DELETE  | Deletar a conta do usuário logado.                             |\n| `/users/me/`                            | GET     | Obter o perfil do usuário logado.                              |\n| `/users/me/password`                    | PUT     | Alterar a senha do usuário logado.                             |\n| `/users/me/favorites`                   | POST    | Adicionar um item aos favoritos do usuário logado.             |\n| `/users/me/favorites`                   | GET     | Obter a lista de favoritos do usuário logado.                  |\n| `/users/me/favorites/{album_id}`        | DELETE  | Remover um item dos favoritos do usuário logado pelo ID do álbum. |\n\nAs rotas e métodos adicionados refletem operações de alteração de senha, adição e remoção de favoritos, além de recuperar a lista de favoritos do usuário logado. Essas funcionalidades foram identificadas a partir das funções de API que você forneceu no código Python.\n\n- \"Será permitido a utilização de bibliotecas ou frameworks baseadas em Python, como o FastAPI, SQLAlchemy, e outras\"\n\nA aplicação é desenvolvida com FastAPI e SQLAlchemy.\n\n- \"Uso de uma API externa pública e que ofereça um serviço não pago.\" \n\nForam utilizadas duas APIs públicas, **Music Brainz** e **Cover Art Archive**, para mais informações, por favor checar o README do repositório do [frontend](https://github.com/pedro-git-projects/puc-mvp-software-architecture-frontend?tab=readme-ov-file#crit%C3%A9rios-avaliativos)\n\n\n- \"É fortemente recomendado produzir uma imagem (fluxograma) ilustrando a arquitetura da aplicação desenvolvida.\"\n\n![Diagrama do Projeto](./diagram.png)\n\n\n## Vídeo\n\nPara a conveniência dos professores uma demonstração em vídeo foi colocada no [YouTube]( https://youtu.be/KvMT9ThhVQQ )\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpedro-git-projects%2Fpuc-mvp-software-architecture-persistence","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpedro-git-projects%2Fpuc-mvp-software-architecture-persistence","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpedro-git-projects%2Fpuc-mvp-software-architecture-persistence/lists"}