{"id":20876841,"url":"https://github.com/brawlingthebits/igs-employee-manager","last_synced_at":"2025-08-24T04:09:36.496Z","repository":{"id":156620332,"uuid":"621480060","full_name":"brawlingthebits/igs-employee-manager","owner":"brawlingthebits","description":"Technical test for python developer.","archived":false,"fork":false,"pushed_at":"2023-03-30T19:02:14.000Z","size":3030,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-12T16:31:14.431Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/brawlingthebits.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":"2023-03-30T18:45:19.000Z","updated_at":"2023-10-22T17:07:09.000Z","dependencies_parsed_at":null,"dependency_job_id":"74d06a44-467a-485f-b317-8799cf5d5232","html_url":"https://github.com/brawlingthebits/igs-employee-manager","commit_stats":null,"previous_names":["brawlingthebits/igs-employee-manager"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/brawlingthebits/igs-employee-manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brawlingthebits%2Figs-employee-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brawlingthebits%2Figs-employee-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brawlingthebits%2Figs-employee-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brawlingthebits%2Figs-employee-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brawlingthebits","download_url":"https://codeload.github.com/brawlingthebits/igs-employee-manager/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brawlingthebits%2Figs-employee-manager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271789629,"owners_count":24821398,"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-08-24T02:00:11.135Z","response_time":111,"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":"2024-11-18T06:55:08.281Z","updated_at":"2025-08-24T04:09:36.479Z","avatar_url":"https://github.com/brawlingthebits.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# IGS Employee Manager\n\nEsta aplicação tem como objetivo gerenciar a informação dos colaboradores, como o nome, endereço de e-mail, e departamento. Consiste em uma API feita com Django e Django Rest Framework com base no [teste](https://github.com/igs-software/teste_django).\n\n## Como rodar a aplicação?\n\n### 1) Clonar o repositório ou fazer download zip.\n\n### 2) Entrar no diretório gerado após cloná-lo.\n\n## Caso não haja python na máquina, mas haja docker compose:\n\n### 3) Construir o container\n\n```shell\ndocker-compose build\n```\n\n### 4) Rodar o container\n\n```shell\ndocker-compose up\n```\n\nO acesso será em: [http://localhost:8000/](http://localhost:8000/)\n\n#### Parar o container quando for necessário\n\n```shell\ndocker-compose down\n```\n\n## Caso haja python na máquina:\n\n### 3) Criar um ambiente virtual.\n\n```shell\npython -m venv venv\n```\n\nOu, como no meu caso, utilize a versão do python no final do nome:\n\n```shell\npython3 -m venv venv\n```\n\n### 4) Ativar o ambiente virtual criado pelo python.\n\nEle será visível como `venv` e para ativá-lo basta um comando como:\n\n```shell\nsource venv/bin/activate\n```\n\n### 5) Instalar os requisitos para a aplicação rodar:\n\nPrimeiro, esteja no mesmo diretório que o requirements.txt, ou seja, mude para o IGS_Employee_Manager\n\n```shell\ncd IGS_Employee_Manager\n```\n\n\n```shell\npip install -r requirements.txt\n```\n\nO acesso será em: [http://localhost:8000/](http://localhost:8000/)\n\n## Acesso ao banco de dados\n\nAs migrações foram feitas com:\n\n```shell\npython manage.py makemigrations\n```\n\n### 1) Migre\n\nCaso estiver em ambiente virtual:\n\n```shell\npython manage.py migrate\n```\n\nCaso estiver em docker:\n\n```shell\ndocker-compose run backend python manage.py migrate\n```\n\n### 2) Entre com o superuser para checar o painel de administração\n\nAcesse o link em [http://localhost:8000/admin/](http://localhost:8000/admin/) e acesse com o superuser para registrar ou remover novos usuários.\n\n```shell\nbernardo\npythonandonaigs\n```\n\n### Ou faça o seu próprio, se preferir:\n\nCaso estiver em ambiente virtual:\n\n```shell\npython manage.py createsuperuser\n```\n\nEm docker:\n\n```shell\ndocker-compose run backend python manage.py createsuperuser\n```\n\n## Documentação pelo Swagger:\n\nVocê acessá-la em: [http://localhost:8000/swagger/](http://localhost:8000/swagger/). Nela, você poderá ver as rotas GET sem autorização, mas para POST ou DELETE será necessário o login com superuser. Podendo ser o que eu criei:\n\n```shell\nusername: bernardo\npassword: pythonandonaigs\n```\nOu que você criou.\n\n## Documentação pelo Redoc:\n\nVocê pode acessá-la em: [http://localhost:8000/redoc/](http://localhost:8000/redoc/) e as regras são as mesmas que com o Swagger.\n\n## Como visualizar a aplicação?\n\n### No navegador\n\nVocê pode ir até o link para uma página HTML [http://localhost:8000/employee_list/](http://localhost:8000/employee_list/), que não exigirá nenhuma autenticação e você poderá ver a lista de colaboradores e as suas seções.\n\nPela aplicação ter sido feita utilizando Django Rest Framework, você também tem um bom acesso visual a API no navegador:\n\nAcesso a todos os funcionários:\n[http://localhost:8000/api/employees/](http://localhost:8000/api/employees/)\n\nAcesso a todos os departamentos:\n[http://localhost:8000/api/departments/](http://localhost:8000/api/departments/)\n\n\n### No terminal\n\nVocê pode acessar essa mesma lista utilizando o comando: \n\n```shell\ncurl -H \"Content-Type: application/javascript\" http://localhost:8000/api/employees/\n```\n\n```json\n[\n  {\n    \"name\": \"Jose da Silva\",\n    \"email\": \"jose.silva@igs-software.com.br\",\n    \"department\": \"Tester\"\n  },\n  {\n    \"name\": \"Jose dos Santos\",\n    \"email\": \"jose.santos@igs-software.com.br\",\n    \"department\": \"Developer\"\n  },\n  {\n    \"name\": \"Jose Lima\",\n    \"email\": \"jose.lima@igs-software.com.br\",\n    \"department\": \"RH\"\n  }\n]\n```\n\nOu pode visualizar os departamentos e seus colaboradores com:\n\n```shell\ncurl -H \"Content-Type: application/javascript\" http://localhost:8000/api/departments/\n```\n\n```json\n{\n    \"departments\": [\n        {\n            \"id\": 1,\n            \"name\": \"Tester\",\n            \"employees\": [\n                {\n                    \"id\": 1,\n                    \"department\": 1,\n                    \"name\": \"Jose da Silva\",\n                    \"email\": \"jose.silva@igs-software.com.br\"\n                }\n            ]\n        },\n        {\n            \"id\": 2,\n            \"name\": \"Developer\",\n            \"employees\": [\n                {\n                    \"id\": 2,\n                    \"department\": 2,\n                    \"name\": \"Jose dos Santos\",\n                    \"email\": \"jose.santos@igs-software.com.br\"\n                }\n            ]\n        },\n        {\n            \"id\": 3,\n            \"name\": \"RH\",\n            \"employees\": [\n                {\n                    \"id\": 3,\n                    \"department\": 3,\n                    \"name\": \"Jose Lima\",\n                    \"email\": \"jose.lima@igs-software.com.br\"\n                }\n            ]\n        }\n    ]\n}\n\n```\n\n## Como adicionar ou remover colaboradores pelo terminal ou plataforma de API?\n\nEstes métodos podem ser feitos facilmente pela documentação Swagger ou o próprio Django Admin, em ambos será necessário ser um superuser, com isso, você poderá adquirir o seu token de autenticação. Porém, se for de desejo testar as rotas no próprio terminal, as regras são as mesmas e os comando serão explicitados abaixo, onde utilizei o meu superuser criado anteriormente: \n\n```shell\ncurl -X POST -d \"username=bernardo\u0026password=pythonandonaigs\" http://localhost:8000/api/token-auth/\n```\n\nO que tenho como retorno é um token que precisarei utilizar na header das requisições:\n\n```json\n{\n  \"token\":\"3e13c1575911981cd091db7134bf56bef4391ded\"\n}\n```\n\nAntes de adicionar um colaborador, é necessário que o departamento já exista para utilizarmos o seu ID. Por isso, criarei um novo departamento:\n\n```shell\ncurl -X POST -H \"Content-Type: application/json\" -H \"Authorization: Token 3e13c1575911981cd091db7134bf56bef4391ded\" -d '{\"name\": \"Marketing\"}' http://localhost:8000/api/departments/\n```\n\nComo retorno, eu tive: \n\n```json\n{\n  \"id\":4,\n  \"name\":\"Marketing\"\n  }\n```\n\nCom o ID obtido, posso adicionar um funcionário no departamento de marketing:\n\n```shell\ncurl -X POST -H \"Content-Type: application/json\" -H \"Authorization: Token 3e13c1575911981cd091db7134bf56bef4391ded\" -d '{\"name\": \"José Arantes\", \"email\": \"jose.arantes@igs-software.com.br\", \"department\": 4}' http://localhost:8000/api/employees/\n```\n\nE se tudo estiver correto, esta será a minha resposta:\n\n```json\n{\n  \"id\":4,\n  \"department\":4,\n  \"name\":\"José Arantes\",\n  \"email\":\"jose.arantes@igs-software.com.br\"\n}\n```\n\nPara a remoção de um departamento:\n\n```shell\ncurl -X DELETE -H \"Content-Type: application/json\" -H \"Authorization: Token 3e13c1575911981cd091db7134bf56bef4391ded\" http://localhost:8000/api/departments/\u003cdepartment_id\u003e/\n```\n\nPor exemplo, o de Marketing:\n\n```shell\ncurl -X DELETE -H \"Content-Type: application/json\" -H \"Authorization: Token 3e13c1575911981cd091db7134bf56bef4391ded\" http://localhost:8000/api/departments/4/\n```\n\nVale-se lembrar que todos os usuários presentes serão removidos também. Logo, para remover apenas um funcionário:\n\n```shell\ncurl -X DELETE -H \"Content-Type: application/json\" -H \"Authorization: Token 3e13c1575911981cd091db7134bf56bef4391ded\" http://localhost:8000/api/employees/\u003cemployee_id\u003e/\n```\n\nNeste caso, removerei o José Arantes do departamento de Marketing em vez de remover o departamento:\n\n```shell\ncurl -X DELETE -H \"Content-Type: application/json\" -H \"Authorization: Token 3e13c1575911981cd091db7134bf56bef4391ded\" http://localhost:8000/api/employees/4/\n```\n\n## Como executar os testes?\n\n### Em docker\n\n```shell\ndocker-compose run backend python manage.py test employee_manager\n```\n\n### Em ambiente virtual\n\nPara executar os testes, certifique-se que com o seu ambiente virtual ainda ativado e, no terminal, digite:\n\n```shell\npython IGS_Employee_Manager/manage.py test employee_manager\n```\n\nCaso ainda esteja dentro do diretório IGS_Employee_Manager, apenas rode:\n\n```shell\npython manage.py test employee_manager\n```\n\n## Considerações finais\n\nA princípio, eu utilizaria Postgres por ser o banco de dados que uso de costume, como em produção. Porém, por ser um teste e aplicação que não escalará, optei pelo padrão do Django, o SQLite. Isso permite que eu deixe alguns dados no banco para facilitar a visualização dos mesmos em determinadas páginas. \n\nUtilizei o Django Rest Framework para uma criação mais assertiva de APIs, além da visualização ser mais clara no painel que nos é disponilizado e utilizei um formatador, black, para deixar o código padronizado. Os vejo como boas práticas ao desenvolver em Python, conhecido por ser assertivo.\n\nQuem rodar o código, provavelmente, tem python instalado na máquina, mas por via das dúvidas, qualquer erro como \"na minha máquina não funciona\" ou por estar em outra máquina no momento, adicionei o Docker, também pelo costume de utilizar com colegas de equipe.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrawlingthebits%2Figs-employee-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrawlingthebits%2Figs-employee-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrawlingthebits%2Figs-employee-manager/lists"}