{"id":31702089,"url":"https://github.com/instruct-br/instruct-the-women-2021","last_synced_at":"2025-10-08T21:11:41.757Z","repository":{"id":46368746,"uuid":"414708303","full_name":"instruct-br/instruct-the-women-2021","owner":"instruct-br","description":null,"archived":false,"fork":false,"pushed_at":"2021-10-27T19:07:34.000Z","size":30,"stargazers_count":18,"open_issues_count":1,"forks_count":121,"subscribers_count":6,"default_branch":"main","last_synced_at":"2023-03-07T14:48:05.628Z","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/instruct-br.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}},"created_at":"2021-10-07T18:05:26.000Z","updated_at":"2021-12-08T11:49:09.000Z","dependencies_parsed_at":"2022-09-22T23:11:25.506Z","dependency_job_id":null,"html_url":"https://github.com/instruct-br/instruct-the-women-2021","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"purl":"pkg:github/instruct-br/instruct-the-women-2021","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/instruct-br%2Finstruct-the-women-2021","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/instruct-br%2Finstruct-the-women-2021/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/instruct-br%2Finstruct-the-women-2021/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/instruct-br%2Finstruct-the-women-2021/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/instruct-br","download_url":"https://codeload.github.com/instruct-br/instruct-the-women-2021/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/instruct-br%2Finstruct-the-women-2021/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279000718,"owners_count":26082837,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":"2025-10-08T21:11:39.073Z","updated_at":"2025-10-08T21:11:41.747Z","avatar_url":"https://github.com/instruct-br.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Exercício Instruct The Women 👩‍💻\n\nNeste repositório você encontra o enunciado do exercício técnico para a vaga de\ntrainee do programa [Instruct The Women](https://instruct.com.br/trabalhe-com-a-gente/instruct-the-women/) organizado pela [Instruct](https://instruct.com.br/) em\nparceria com a [Se Candidate, Mulher!](https://secandidatemulher.com.br/).\n\nPara saber mais sobre a empresa, leia o [FAQ](#FAQ)\n\n## Requisitos\n\n* Possuir uma conta no GitHub\n* Navegador Chrome ou Firefox\n* Familiaridade com VS Code\n\n## O que é importante você saber\n\n* Conhecer HTTP e APIs Rest\n* Saber sobre métodos HTTP como GET, POST e DELETE\n* Conhecer sobre JSON e estruturas como listas e dicionários (*Arrays* e *Objects*)\n\n## Ambiente de Desenvolvimento\n\nPara esse exercício vamos utilizar um ambiente totalmente no browser e que não\nrequer nenhuma instalação em seu computador.\n\nÉ possível fazer o exercício localmente no seu computador. Nesse caso, a configuração\nde ferramentas para desenvolvimento é de sua responsabilidade e não temos como ajudar\ntodas as participantes.\n\n### Faça um fork\n\nPrimeiro, crie um fork deste repositório com sua conta no GitHub.\n\nEm termos simples, um fork é cópia de um repositório. Leia a\n[documentação do GitHub](https://docs.github.com/en/get-started/quickstart/fork-a-repo)\npara saber mais.\n\nA partir de agora, todas as ações devem ser feitas no seu fork!\n\nEle estará disponível dessa forma: `https://github.com/SEU_LOGIN/instruct-the-women-2021`\n\n### Usando o browser (recomendado)\n\nAbra o seu fork em uma aba do seu browser.\n\nVocê estará na **sua cópia** do repositório original.\n\nEntão, na **sua cópia** do repositório aberta, clique no botão abaixo:   \n\n[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/from-referrer/)\n\nVocê será redirecionada para o gitpod.io e será necessário criar uma conta gratuita usando sua conta do GitHub.\n\nUma janela será aberta solicitando que você autorize o gitpod.io a acessar sua conta do GitHub.\n\nApós a confirmação da solicitação de autorização, uma instância do VS Code será criada para você.\n\nAguarde alguns instantes, cerca de 2 a 3 minutos até o término do carregamento do ambiente.\n\n### Usando seu computador (avançado)\n\n| ⚠️ | Não temos como ajudar caso a caso as participantes na configuração de um ambiente de desenvolvimento. Se você não se sentir segura, use o ambiente pronto no browser que preparamos. |\n| --- | --- |\n\nCaso já tenha experiência, também é possível clonar este repositório git no\nseu computador e desenvolver em ambiente local. Os requisitos são:\n\n- Python 3.8\n- pipenv\n- Bibliotecas de desenvolvimento para PostgreSQL (libpq-dev)\n\nVocê vai precisar também do [k6](https://k6.io/) para testar seu projeto. Para instalar o k6\nbasta [baixar o binário](https://github.com/loadimpact/k6/releases) para o seu\nsistema operacional (Windows, Linux ou Mac).\n\nE para fazer o deploy quando terminar, é necessário instalar o [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli).\n\nSe você está num computador com Windows, é recomendado \n[seguir o tutorial da Microsoft](https://docs.microsoft.com/en-us/windows/python/web-frameworks)\npara configurar um ambiente de desenvolvimento com WSL.\n\n## O problema\n\nA equipe de desenvolvimento _Bleeding Edge Enthusiasts_ (BEE) se orgulha de \nusar as tecnologias mais recentes e modernas. Essa regra também se aplica aos\nprojetos desenvolvidos em Python pela equipe BEE.\n\nQuando uma funcionalidade não existe nativamente no interpretador Python, a equipe\nfaz uso dos chamados **pacotes**. De maneira simples, um pacote é um conjunto de\ncódigos prontos para serem usados por qualquer pessoa e que facilitam o desenvolvimento.\n\nPara garantir que todos seus projetos em Python estão usando as últimas versões\ndisponíves dos pacotes, a equipe pensou em criar uma ferramenta batizada de \nMagPy. A ferramenta recebe um nome de projeto, uma lista de pacotes e devolve a \núltima versão de cada pacote.\n\nUm dos integrantes da BEE apontou que a \n[API pública do PyPI](https://warehouse.readthedocs.io/api-reference/json.html)\npoderia ser usada para esse fim.\n\n## Solução\n\nVocê deve desenvolver a MagPy, uma API REST que gerencia uma coleção de \nprojetos, sendo:\n\n* Cada projeto tem um nome e uma lista de pacotes.\n* Cada pacote tem um nome e uma versão.\n\nO cadastro de um projeto recebe o nome e a lista de pacotes. Cada pacote da \nlista precisa obrigatoriamente especificar um nome, mas a versão é opcional.\n\nSua API deve validar o projeto cadastrado: todos os pacotes informados devem\nestar cadastrados no [PyPI](https://pypi.org/). Portanto você deve verificar o\nnome e a versão do pacote.\n\nQuando o pacote vem apenas com o nome, sua API deve assumir que é preciso usar\na última versão publicada no [PyPI](https://pypi.org/).\n\nAbaixo, alguns exemplos de chamadas que serão feitas nessa API:\n\n```\nPOST /api/projects\n{\n    \"name\": \"titan\",\n    \"packages\": [\n        {\"name\": \"Django\"},\n        {\"name\": \"graphene\", \"version\": \"2.0\"}\n    ]\n}\n```\nO código HTTP de retorno deve ser 201 e o corpo esperado na resposta é:\n```\n{\n    \"name\": \"titan\",\n    \"packages\": [\n        {\"name\": \"Django\", \"version\": \"3.2.5\"},  // Usou a versão mais recente\n        {\"name\": \"graphene\", \"version\": \"2.0\"}   // Manteve a versão especificada\n    ]\n}\n```\n\nSe um dos pacotes informados não existir, ou uma das versões especificadas for\ninválida, um erro deve ser retornado.\n\nPara uma chamada semelhante ao exemplo abaixo:\n```\nPOST /api/projects\n{\n    \"name\": \"titan\",\n    \"packages\": [\n        {\"name\": \"pypypypypypypypypypypy\"},\n        {\"name\": \"graphene\", \"version\": \"1900\"}\n    ]\n}\n```\nO código HTTP de retorno deve ser 400 e o corpo esperado na resposta é:\n```\n{\n    \"error\": \"One or more packages doesn't exist\"\n}\n```\n\nTambém deve ser possível visitar projetos previamente cadastrados, usando o\nnome na URL:\n```\nGET /api/projects/titan\n{\n    \"name\": \"titan\",\n    \"packages\": [\n        {\"name\": \"Django\", \"version\": \"3.2.5\"},\n        {\"name\": \"graphene\", \"version\": \"2.0\"}\n    ]\n}\n```\n\nE deletar projetos pelo nome:\n```\nDELETE /api/projects/titan\n```\n\n| ⚠️ | Sua solução deve usar a [API pública do PyPI](https://warehouse.readthedocs.io/api-reference/json.html). Não use outro caminho pra buscar as informações necessárias |\n| --- | --- |\n\n\n## Implementação\n\nEste repositório tem parte da solução implementada e você deve continuar para\nque o projeto atenda a especificação descrita acima. Também está adiantado\nalgumas configurações para publicação do projeto no \n[Heroku](https://www.heroku.com/). Este projeto usa principalmente\n[Django](https://www.djangoproject.com/) e\n[Django REST framework](https://www.django-rest-framework.org/).\n\nO projeto tem as assinaturas de algumas funções e métodos para orientar uma \nsolução, mas você pode alterar o código à vontade, desde que a solução final\npasse nos testes. Mais detalhes sobre isso na seção \"Avaliação\" do README.\n\nAs funções e métodos para implementar estão em 2 arquivos:\n- `api/pypi.py`\n- `api/serializers.py`\n\nEm `api/pypi.py` você escreverá algumas funções para fazer a integração com a\nAPI do PyPI. Essas funções serão úteis para validar os dados recebidos pela API\ndesenvolvida.\n\nEm `api/serializers.py` falta implementar a persistência dos dados e usar\nas funções criadas em `api/pypi.py` para a validação os dados.\n\n## Validando seu projeto\n\nNesse exercício incluímos testes usando a ferramenta [k6](https://k6.io/). Com ela é possível\ntestar o comportamento da API e validar se tudo está funcionando de acordo com\na especificação.\n\nOs testes básicos estão disponíveis neste repositório no arquivo\n`tests-open.js`. Use-os durante o desenvolvimento para avaliar se a sua API está correta.\n\nPara rodar os testes, especifique a variável de ambiente \"API_BASE\"\ncom o endereço base da API testada e no editor do gitpod.io, abra um novo\nterminal para executar o comando abaixo.\n\nExemplo de aplicação rodando no localhost na porta 8000:\n```\nk6 run -e API_BASE='http://localhost:8000/' tests-open.js\n```\n\n## Fazendo deploy\n\n1. Crie uma conta gratuita no [Heroku](https://signup.heroku.com/)\n2. Na página [Account Settings](https://dashboard.heroku.com/account) role até \"API Key\" e clique em \"reveal\"\n3. No editor do gitpod.io, abra um novo Terminal.\n4. Autentique-se com `heroku login -i` digite o e-mail da sua conta. No lugar da senha, digite o valor que você conseguiu no passo 2.\n5. No terminal digite `heroku create` para criar sua aplicação\n6. No terminal digite `git push heroku` para fazer o deploy\n7. No [dashboard do Heroku](https://dashboard.heroku.com/apps) entre no app que foi criado pelo passo anterior\n8. Na aba \"Access\" clique em \"Add collaborator\" e preencha com o e-mail `jobs@instruct.com.br`\n\nPronto! Seu projeto foi publicado e a Instruct tem acesso para avaliá-lo!\n\nQuando finalizar a implementação, adicione o usuário com e-mail\n`jobs@instruct.com.br` como colaborador do app publicado até o fim do prazo\nestipulado. Isso nos garante acesso ao endereço em que sua API está publicada,\npara seguir com os testes automatizados.\n\n| ⚠️ | Você deve adicionar o usuário com e-mail `jobs@instruct.com.br` no app publicado no Heroku! Não é necessário adicionar acesso ao código fonte num repositório do GitHub. |\n| --- | --- |\n\nSe você conseguiu chegar até aqui, parabéns!\n\n## Avaliação (opcional)\n\nCaso você tenha feito o deploy no Heroku com sucesso, poderemos avaliar seu código!\n\nNós executaremos dois conjuntos de testes na sua API:\n\n1. Testes básicos (iguais aos que estão no repositório usando `k6`)\n2. Testes avançados (fechados)\n\nSua API deve passar ao menos nos testes básicos para avaliarmos.\n\n**Boa sorte!**\n\n---\n\n## FAQ\n\n### Como me candidatar para trabalhar na Instruct?\n\nAs inscrições são feitas através das vagas publicadas no site: https://instruct.com.br/trabalhe-com-a-gente/\n\nNessa página estão listadas as vagas abertas e todos os detalhes de nosso\nprocesso seletivo.\n\n### Como ser avisada de novas vagas?\n\n[Siga a Instruct no Linkedin](https://www.linkedin.com/company/instructbr).\n\nSempre publicamos quando novas vagas são abertas.\n\n### Como é trabalhar na Instruct?\n\nVocê pode ler nosso [Handbook](https://github.com/instruct-br/handbook). \nEle é a referência completa sobre como a Instruct funciona.\n\nDestaque especial para as atribuições do papel de [Analista de Desenvolvimento Trainee](https://github.com/instruct-br/handbook/blob/main/papeis.md#analista-de-desenvolvimento-trainee)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finstruct-br%2Finstruct-the-women-2021","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finstruct-br%2Finstruct-the-women-2021","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finstruct-br%2Finstruct-the-women-2021/lists"}