{"id":14997843,"url":"https://github.com/r4mpo/my-jobs","last_synced_at":"2026-02-24T12:04:49.131Z","repository":{"id":248193975,"uuid":"828035080","full_name":"r4mpo/my-jobs","owner":"r4mpo","description":"Plataforma para busca de vagas freelancers, empregos rápidos, comunicação ágil.","archived":false,"fork":false,"pushed_at":"2024-08-21T02:15:32.000Z","size":5245,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-01T20:55:29.138Z","etag":null,"topics":["axios","javascript","laravel","mvc","mysql","php","phpunit","swagger","sweetalert2","tailwindcss","vue-router","vuejs"],"latest_commit_sha":null,"homepage":"https://www.linkedin.com/posts/erick-agostinho-684563227_laravel-vuejs-tailwind-activity-7222045746286481408-yGqR?utm_source=share\u0026utm_medium=member_desktop","language":"PHP","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/r4mpo.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-07-13T00:10:43.000Z","updated_at":"2025-02-14T00:46:32.000Z","dependencies_parsed_at":"2024-07-13T01:24:04.595Z","dependency_job_id":"1685223f-ad1a-4c32-a921-b5ef5b1e1f12","html_url":"https://github.com/r4mpo/my-jobs","commit_stats":{"total_commits":22,"total_committers":1,"mean_commits":22.0,"dds":0.0,"last_synced_commit":"83374a5148d77690ed945577b8597b534b5b7724"},"previous_names":["r4mpo/my-jobs"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/r4mpo/my-jobs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r4mpo%2Fmy-jobs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r4mpo%2Fmy-jobs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r4mpo%2Fmy-jobs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r4mpo%2Fmy-jobs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/r4mpo","download_url":"https://codeload.github.com/r4mpo/my-jobs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r4mpo%2Fmy-jobs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29781268,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-24T10:45:18.109Z","status":"ssl_error","status_checked_at":"2026-02-24T10:45:09.911Z","response_time":75,"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":["axios","javascript","laravel","mvc","mysql","php","phpunit","swagger","sweetalert2","tailwindcss","vue-router","vuejs"],"created_at":"2024-09-24T17:32:39.416Z","updated_at":"2026-02-24T12:04:49.069Z","avatar_url":"https://github.com/r4mpo.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Projeto \"My Jobs\" | Laravel, Vue.JS, MySQL, Tailwind\n\nO projeto \"My Jobs\" consiste em uma \"Plataforma para busca de vagas freelancers, empregos rápidos, comunicação ágil\". Na prática, trata-se de mais um projeto presente em meu portfólio como programador full stack. Neste, em específico, priorizei fazer um estudo de ferramentas de desenvolvimento modernas, visando o padrão de microsserviços.\n\n# Back-End\n\n* PHP\n* Laravel\n* PHPUnit\n* API\n* Swagger\n\n# Front-End\n\n* Vue.JS\n* HTML5\n* CSS3\n* TailwindCSS\n* Vue-Router\n* Axios\n\n# Status\n\nAtualmente o projeto está em desenvolvimento. A API está em estágio avançado, recebendo apenas correções pontuais. A aplicação do front-end está começando a ser desenvolvida, consumindo alguns endpoints como de login, por exemplo.\n\n# API\n\n## Instalação + Testes Unitários + Validações\n\n- Dentro do diretório da api, no readme do projeto Laravel encontra-se um manual de instação e de testes unitários;\n- Os testes unitários são feitos com PHPUnit;\n- As validações são feitas por meio dos form_requests, visando a clareza dos códigos dos controllers.\n\n## Perfis\n\n### 1. Listar Perfis\n\n**Endpoint:** `GET /api/profiles`\n\n**Descrição:** Retorna uma lista de todos os perfis existentes no sistema.\n\n**Segurança:** Requer autenticação com Bearer Token.\n\n**Resposta de Sucesso (200 OK):**\n\n```json\n{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"name\": \"Moder\",\n            \"guard_name\": \"api\",\n            \"created_at\": \"2024-07-02T23:12:14.000000Z\",\n            \"updated_at\": \"2024-07-02T23:12:14.000000Z\"\n        }\n    ]\n}\n```\n\n**Campos da Resposta:**\n\n- `id`: Identificador único do perfil.\n- `name`: Nome do perfil.\n- `guard_name`: Nome do guard (proteção) associado ao perfil.\n- `created_at`: Data e hora de criação do perfil.\n- `updated_at`: Data e hora da última atualização do perfil.\n\n---\n\n### 2. Criar Novo Perfil\n\n**Endpoint:** `POST /api/profiles`\n\n**Descrição:** Cria um novo perfil com o nome e permissões especificados.\n\n**Segurança:** Requer autenticação com Bearer Token.\n\n**Corpo da Requisição:**\n\n```json\n{\n    \"name\": \"Editor\",\n    \"permissions\": [\n        \"api.vacancies.index\",\n        \"api.vacancies.store\",\n        \"api.vacancies.show\"\n    ]\n}\n```\n\n**Campos do Corpo da Requisição:**\n\n- `name`: Nome do novo perfil.\n- `permissions`: Lista de permissões associadas ao perfil.\n\n**Resposta de Sucesso (200 OK):**\n\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Editor\",\n        \"guard_name\": \"api\",\n        \"created_at\": \"2024-07-02T23:12:14.000000Z\",\n        \"updated_at\": \"2024-07-02T23:12:14.000000Z\"\n    }\n}\n```\n\n**Tratamento de Erro:**\n\n- Se o nome do perfil contiver \"administrator\" ou \"default\", será lançada uma exceção indicando que não é possível criar ou manipular perfis com esses nomes.\n\n---\n\n### 3. Atualizar Perfil\n\n**Endpoint:** `PUT /api/profiles/{profile}`\n\n**Descrição:** Atualiza um perfil existente pelo ID com um novo nome e permissões.\n\n**Segurança:** Requer autenticação com Bearer Token.\n\n**Parâmetros:**\n\n- `profile` (caminho): ID do perfil a ser atualizado.\n\n**Corpo da Requisição:**\n\n```json\n{\n    \"name\": \"Editor\",\n    \"permissions\": [\n        \"api.vacancies.index\",\n        \"api.vacancies.store\"\n    ]\n}\n```\n\n**Campos do Corpo da Requisição:**\n\n- `name`: Novo nome do perfil.\n- `permissions`: Lista de permissões atualizadas para o perfil.\n\n**Resposta de Sucesso (200 OK):**\n\n```json\n{\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Editor\",\n        \"guard_name\": \"api\",\n        \"created_at\": \"2024-07-02T23:12:14.000000Z\",\n        \"updated_at\": \"2024-07-02T23:12:14.000000Z\"\n    }\n}\n```\n\n**Tratamento de Erro:**\n\n- Se o nome do perfil contiver \"administrator\" ou \"default\", será lançada uma exceção indicando que não é possível atualizar perfis com esses nomes.\n\n---\n\n### 4. Excluir Perfil\n\n**Endpoint:** `DELETE /api/profiles/{profile}`\n\n**Descrição:** Exclui um perfil existente pelo ID.\n\n**Segurança:** Requer autenticação com Bearer Token.\n\n**Parâmetro:**\n\n- `profile` (caminho): ID do perfil a ser excluído.\n\n**Resposta de Sucesso (200 OK):**\n\n```json\n{\n    \"message\": \"Profile successfully deleted\"\n}\n```\n\n**Tratamento de Erro:**\n\n- Se o nome do perfil contiver \"administrator\" ou \"default\", será lançada uma exceção indicando que não é possível excluir perfis com esses nomes.\n\n---\n\n### 5. Atribuir Perfil a Usuário\n\n**Endpoint:** `GET /api/profiles/assign_role_for_user/{user_id}`\n\n**Descrição:** Atribui um perfil a um usuário específico.\n\n**Segurança:** Requer autenticação com Bearer Token.\n\n**Parâmetros:**\n\n- `user_id` (caminho): ID do usuário para quem o perfil será atribuído.\n- `role_id` (consulta): ID do perfil a ser atribuído.\n\n**Resposta de Sucesso (200 OK):**\n\n```json\n{\n    \"message\": \"Profile assign for user successfully\"\n}\n```\n\n**Tratamento de Erro:**\n\n- Se ocorrer um erro ao atribuir o perfil, uma mensagem de erro será retornada com detalhes sobre o problema.\n\n---\n\n## Autenticação\n\n### 1. Login\n\n**Endpoint:** `POST /api/auth/login`\n\n**Descrição:** Autentica um usuário e retorna um token JWT.\n\n**Request:**\n\n```json\n{\n  \"email\": \"giovana@email.com\",\n  \"password\": \"giovana3#_!.G\"\n}\n```\n\n**Resposta:**\n\n```json\n{\n  \"access_token\": \"token\",\n  \"token_type\": \"bearer\",\n  \"expires_in\": 3600\n}\n```\n\n### 2. Registro de Novo Usuário\n\n**Endpoint:** `POST /api/auth/register`\n\n**Descrição:** Cria um novo usuário na plataforma.\n\n**Request:**\n\n```json\n{\n  \"name\": \"Giovana\",\n  \"email\": \"giovana@email.com\",\n  \"password\": \"giovana3#_!.G\"\n}\n```\n\n**Resposta:**\n\n```json\n{\n  \"user\": { /* user data */ },\n  \"data\": { /* input data */ },\n  \"message\": \"User registered successfully.\",\n  \"success\": true\n}\n```\n\n### 3. Informações do Usuário\n\n**Endpoint:** `POST /api/auth/me`\n\n**Descrição:** Retorna as informações do usuário autenticado.\n\n**Resposta:**\n\n```json\n{\n  \"id\": 444,\n  \"name\": \"Giovana\",\n  \"email\": \"giovana@gmail.com\",\n  \"email_verified_at\": null,\n  \"created_at\": \"2024-05-01T18:31:41.000000Z\",\n  \"updated_at\": \"2024-05-01T18:31:41.000000Z\"\n}\n```\n\n### 4. Logout\n\n**Endpoint:** `POST /api/auth/logout`\n\n**Descrição:** Realiza o logout do usuário e invalida o token JWT.\n\n**Resposta:**\n\n```json\n{\n  \"message\": \"Logout completed successfully.\"\n}\n```\n\n### 5. Atualizar Token\n\n**Endpoint:** `POST /api/auth/refresh`\n\n**Descrição:** Restaura o token do usuário.\n\n**Resposta:**\n\n```json\n{\n  \"access_token\": \"new_token\",\n  \"token_type\": \"bearer\",\n  \"expires_in\": 3600\n}\n```\n\n### 6. Informações do Usuário\n\n1. **Obter Informações do Usuário**\n\n   **Endpoint:** `GET /api/auth/infos/{user_id}`\n\n   **Descrição:** Retorna todas as informações associadas a um usuário específico. Se `user_id` não for fornecido, retorna as informações do usuário autenticado.\n\n   **Resposta:**\n\n   ```json\n   {\n     \"data\": [\n       {\n         \"id\": 1,\n         \"info\": \"Formatted info content\",\n         \"type\": \"phone\"\n       },\n       // more infos\n     ]\n   }\n   ```\n\n---\n\n## Gerenciamento de Informações\n\n### 1. Criar Informação\n\n**Endpoint:** `POST /api/infos`\n\n**Descrição:** Cria uma nova informação associada a um usuário.\n\n**Request:**\n\n```json\n{\n  \"code\": \"1\",\n  \"info\": \"14920388\",\n  \"user_id\": 1\n}\n```\n\n**Resposta:**\n\n```json\n{\n  \"data\": {\n    \"id\": 8,\n    \"code\": \"1\",\n    \"info\": \"14920388\",\n    \"user_id\": 1,\n    \"updated_at\": \"2024-06-24T22:24:25.000000Z\",\n    \"created_at\": \"2024-06-24T22:24:25.000000Z\"\n  }\n}\n```\n\n### 2. Atualizar Informação\n\n**Endpoint:** `PUT /api/infos/{id}`\n\n**Descrição:** Atualiza uma informação existente com os dados fornecidos.\n\n**Request:**\n\n```json\n{\n  \"code\": \"3\",\n  \"info\": \"Updated information content.\",\n  \"user_id\": 1\n}\n```\n\n**Resposta:**\n\n```json\n{\n  \"data\": {\n    \"id\": 8,\n    \"code\": \"3\",\n    \"info\": \"Updated information content.\",\n    \"user_id\": 1,\n    \"updated_at\": \"2024-06-24T22:30:45.000000Z\",\n    \"created_at\": \"2024-06-24T22:24:25.000000Z\"\n  }\n}\n```\n\n**Erro 400:** Informação inválida ou não autorizada.\n\n```json\n{\n  \"message\": \"Invalid info: unauthorized\"\n}\n```\n\n### 3. Excluir Informação\n\n**Endpoint:** `DELETE /api/infos/{id}`\n\n**Descrição:** Remove uma informação existente. **Nota:** Este endpoint está desativado e lançará um erro se acessado.\n\n**Erro:**\n\n```json\n{\n  \"message\": \"invalid route\"\n}\n```\n\n### 4. Observações Gerais\n\n- Todos os endpoints relacionados ao gerenciamento de informações exigem autenticação via JWT.\n- Erros genéricos, como problemas internos do servidor, retornam mensagens de erro e códigos apropriados para facilitar o diagnóstico.\n\n---\n\nClaro! Aqui está a documentação completa para todos os endpoints da API \"Vacancies\":\n\n---\n\n## Vagas\n\n### 1. Listar Vagas\n\n**Endpoint:** `GET /api/vacancies`\n\n**Descrição:** Retorna uma lista de todas as vagas disponíveis. É possível aplicar filtros para refinar a busca.\n\n**Parâmetros de Consulta:**\n\n- `zip_code` (string, opcional): Filtra as vagas pelo código postal.\n- `wage` (string, opcional): Filtra as vagas pelo salário.\n- `short_description` (string, opcional): Filtra as vagas pela descrição curta.\n- `long_description` (string, opcional): Filtra as vagas pela descrição longa.\n- `amount_page` (integer, opcional, padrão=10): Número de vagas por página.\n\n**Exemplo de Resposta:**\n\n```json\nAqui está a documentação em markdown para o endpoint `my_published_vacancies`:\n\n---\n\n# API \"Vacancies\" - Endpoints para Usuários\n\n## Endpoint: Listar Vagas Publicadas pelo Usuário\n\n**Endpoint:** `GET /api/vacancies_user/my_published_vacancies`\n\n**Descrição:** Retorna uma lista de vagas publicadas pelo usuário autenticado.\n\n**Autenticação:** Bearer Token (necessário para acessar este endpoint).\n\n### Resposta de Sucesso\n\n**Código de Status:** `200 OK`\n\n**Descrição:** Retorna uma lista de vagas publicadas pelo usuário autenticado.\n\n**Formato da Resposta:**\n\n```json\n{\n  \"data\": [\n    {\n      \"id\": 2,\n      \"created_at\": \"2024-05-26T22:40:21.000000Z\",\n      \"updated_at\": \"2024-05-26T22:40:21.000000Z\",\n      \"short_description\": \"test update\",\n      \"long_description\": \"Fazendo teste de tal tal tal.\",\n      \"wage\": \"R$ 7,77\",\n      \"zip_code\": \"12345678\",\n      \"user\": {\n        \"id\": 1,\n        \"name\": \"Erick\",\n        \"email\": \"erick@jobs.com\",\n        \"email_verified_at\": \"erick_verify@jobs.com\",\n        \"created_at\": \"2024-06-04T01:42:02.000000Z\",\n        \"updated_at\": \"2024-06-04T01:42:02.000000Z\"\n      }\n    }\n  ]\n}\n```\n\n### Campos da Resposta\n\n- **data**: Array contendo uma lista de vagas publicadas pelo usuário.\n  - **id**: ID da vaga (inteiro).\n  - **created_at**: Data e hora de criação da vaga (string, formato ISO 8601).\n  - **updated_at**: Data e hora da última atualização da vaga (string, formato ISO 8601).\n  - **short_description**: Descrição curta da vaga (string).\n  - **long_description**: Descrição longa da vaga (string).\n  - **wage**: Salário da vaga formatado (string).\n  - **zip_code**: Código postal (CEP) da vaga (string).\n  - **user**: Objeto contendo informações do usuário que publicou a vaga.\n    - **id**: ID do usuário (inteiro).\n    - **name**: Nome do usuário (string).\n    - **email**: Email do usuário (string).\n    - **email_verified_at**: Email verificado do usuário (string).\n    - **created_at**: Data e hora de criação do usuário (string, formato ISO 8601).\n    - **updated_at**: Data e hora da última atualização do usuário (string, formato ISO 8601).\n\n### Exemplo de Requisição\n\n```http\nGET /api/vacancies_user/my_published_vacancies\nAuthorization: Bearer \u003cyour_access_token\u003e\n```\n\n---\n\nEsta documentação fornece uma visão clara sobre como acessar e utilizar o endpoint para listar as vagas publicadas pelo usuário autenticado. Caso precise de mais informações ou de um ajuste na documentação, por favor, me avise!{\n  \"data\": [\n    {\n      \"id\": 1,\n      \"short_description\": \"Desenvolvedor Backend\",\n      \"long_description\": \"Vaga para desenvolvedor backend com experiência em Node.js.\",\n      \"wage\": \"R$ 12409,14\",\n      \"zip_code\": \"14148-300\",\n      \"user_id\": 5,\n      \"user\": \"Erick Rampo\"\n    }\n  ],\n  \"pages\": {\n    \"amount\": \"10\",\n    \"current\": \"1\"\n  }\n}\n\n```\n\n```\n\n### 2. Criar Nova Vaga\n\n**Endpoint:** `POST /api/vacancies`\n\n**Descrição:** Cria uma nova vaga de emprego com as informações fornecidas.\n\n**Corpo da Requisição:**\n\n- `short_description` (string, obrigatório): Descrição curta da vaga (entre 5 e 60 caracteres).\n- `long_description` (string, obrigatório): Descrição longa da vaga (entre 10 e 250 caracteres).\n- `wage` (integer, obrigatório): Salário da vaga (em centavos).\n- `zip_code` (string, obrigatório): Código postal (CEP) da vaga.\n\n**Exemplo de Requisição:**\n\n```json\n{\n  \"short_description\": \"Desenvolvedor Frontend\",\n  \"long_description\": \"Vaga para desenvolvedor frontend com experiência em React.\",\n  \"wage\": 1240914,\n  \"zip_code\": \"14315-250\"\n}\n```\n\n**Exemplo de Resposta:**\n\n```json\n{\n  \"data\": {\n    \"id\": 8,\n    \"short_description\": \"Desenvolvedor Frontend\",\n    \"long_description\": \"Vaga para desenvolvedor frontend com experiência em React.\",\n    \"wage\": \"1240914\",\n    \"zip_code\": \"14315-250\",\n    \"user_id\": 5,\n    \"updated_at\": \"2024-05-17T00:00:00Z\"\n  }\n}\n```\n\n### 3. Consultar Detalhes da Vaga\n\n**Endpoint:** `GET /api/vacancies/{id}`\n\n**Descrição:** Retorna os detalhes de uma vaga específica pelo ID.\n\n**Exemplo de Resposta:**\n\n```json\n{\n  \"data\": {\n    \"id\": 1,\n    \"short_description\": \"Desenvolvedor Backend\",\n    \"long_description\": \"Vaga para desenvolvedor backend com experiência em Node.js.\",\n    \"wage\": \"1240914\",\n    \"zip_code\": \"14148-300\",\n    \"user_id\": 5,\n    \"user\": \"Erick Rampo\",\n    \"updated_at\": \"2024-05-17T00:00:00Z\"\n  }\n}\n```\n\n### 4. Atualizar Vaga\n\n**Endpoint:** `PUT /api/vacancies/{id}`\n\n**Descrição:** Atualiza uma vaga existente pelo ID com novas informações.\n\n**Corpo da Requisição:**\n\n- `short_description` (string, opcional): Nova descrição curta da vaga.\n- `long_description` (string, opcional): Nova descrição longa da vaga.\n- `wage` (integer, opcional): Novo salário da vaga (em centavos).\n- `zip_code` (string, opcional): Novo código postal (CEP) da vaga.\n\n**Exemplo de Requisição:**\n\n```json\n{\n  \"short_description\": \"Desenvolvedor Frontend Júnior\",\n  \"long_description\": \"Vaga para desenvolvedor frontend júnior com experiência em React.\",\n  \"wage\": 1040914,\n  \"zip_code\": \"14315-250\"\n}\n```\n\n**Exemplo de Resposta:**\n\n```json\n{\n  \"data\": {\n    \"id\": 1,\n    \"short_description\": \"Desenvolvedor Frontend Júnior\",\n    \"long_description\": \"Vaga para desenvolvedor frontend júnior com experiência em React.\",\n    \"wage\": \"1040914\",\n    \"zip_code\": \"14315-250\",\n    \"user_id\": 5,\n    \"updated_at\": \"2024-05-18T00:00:00Z\"\n  }\n}\n```\n\n### 5. Excluir Vaga\n\n**Endpoint:** `DELETE /api/vacancies/{id}`\n\n**Descrição:** Exclui uma vaga existente pelo ID.\n\n**Exemplo de Resposta:**\n\n```json\n{\n  \"message\": \"Vaga excluída com sucesso.\"\n}\n```\n\n---\n\n## Listar Vagas Publicadas pelo Usuário\n\n**Endpoint:** `GET /api/vacancies_user/my_published_vacancies`\n\n**Descrição:** Retorna uma lista de vagas publicadas pelo usuário autenticado.\n\n**Autenticação:** Bearer Token (necessário para acessar este endpoint).\n\n### Resposta de Sucesso\n\n**Código de Status:** `200 OK`\n\n**Descrição:** Retorna uma lista de vagas publicadas pelo usuário autenticado.\n\n**Formato da Resposta:**\n\n```json\n{\n  \"data\": [\n    {\n      \"id\": 2,\n      \"created_at\": \"2024-05-26T22:40:21.000000Z\",\n      \"updated_at\": \"2024-05-26T22:40:21.000000Z\",\n      \"short_description\": \"test update\",\n      \"long_description\": \"Fazendo teste de tal tal tal.\",\n      \"wage\": \"R$ 7,77\",\n      \"zip_code\": \"12345678\",\n      \"user\": {\n        \"id\": 1,\n        \"name\": \"Erick\",\n        \"email\": \"erick@jobs.com\",\n        \"email_verified_at\": \"erick_verify@jobs.com\",\n        \"created_at\": \"2024-06-04T01:42:02.000000Z\",\n        \"updated_at\": \"2024-06-04T01:42:02.000000Z\"\n      }\n    }\n  ]\n}\n```\n\n### Campos da Resposta\n\n- **data**: Array contendo uma lista de vagas publicadas pelo usuário.\n  - **id**: ID da vaga (inteiro).\n  - **created_at**: Data e hora de criação da vaga (string, formato ISO 8601).\n  - **updated_at**: Data e hora da última atualização da vaga (string, formato ISO 8601).\n  - **short_description**: Descrição curta da vaga (string).\n  - **long_description**: Descrição longa da vaga (string).\n  - **wage**: Salário da vaga formatado (string).\n  - **zip_code**: Código postal (CEP) da vaga (string).\n  - **user**: Objeto contendo informações do usuário que publicou a vaga.\n    - **id**: ID do usuário (inteiro).\n    - **name**: Nome do usuário (string).\n    - **email**: Email do usuário (string).\n    - **email_verified_at**: Email verificado do usuário (string).\n    - **created_at**: Data e hora de criação do usuário (string, formato ISO 8601).\n    - **updated_at**: Data e hora da última atualização do usuário (string, formato ISO 8601).\n\n### Exemplo de Requisição\n\n```http\nGET /api/vacancies_user/my_published_vacancies\nAuthorization: Bearer \u003cyour_access_token\u003e\n```\n\n---\n\n## Listar Vagas Aplicadas pelo Usuário\n\n**Endpoint:** `GET /api/vacancies_user/my_applications_vacancies`\n\n**Descrição:** Retorna uma lista de vagas para as quais o usuário autenticado se candidatou.\n\n**Autenticação:** Bearer Token (necessário para acessar este endpoint).\n\n### Resposta de Sucesso\n\n**Código de Status:** `200 OK`\n\n**Descrição:** Retorna uma lista de vagas aplicadas pelo usuário autenticado.\n\n**Formato da Resposta:**\n\n```json\n{\n  \"data\": [\n    {\n      \"id\": 2,\n      \"short_description\": \"test update\",\n      \"long_description\": \"Fazendo teste de tal tal tal.\",\n      \"wage\": \"R$ 7,77\",\n      \"zip_code\": \"12345678\",\n      \"user\": {\n        \"id\": 1,\n        \"name\": \"Erick\",\n        \"email\": \"erick@jobs.com\",\n        \"email_verified_at\": \"erick_verify@jobs.com\",\n        \"created_at\": \"2024-06-04T01:42:02.000000Z\",\n        \"updated_at\": \"2024-06-04T01:42:02.000000Z\"\n      }\n    }\n  ]\n}\n```\n\n### Campos da Resposta\n\n- **data**: Array contendo uma lista de vagas para as quais o usuário se candidatou.\n  - **id**: ID da vaga (inteiro).\n  - **short_description**: Descrição curta da vaga (string).\n  - **long_description**: Descrição longa da vaga (string).\n  - **wage**: Salário da vaga formatado (string).\n  - **zip_code**: Código postal (CEP) da vaga (string).\n  - **user**: Objeto contendo informações do usuário que publicou a vaga.\n    - **id**: ID do usuário (inteiro).\n    - **name**: Nome do usuário (string).\n    - **email**: Email do usuário (string).\n    - **email_verified_at**: Email verificado do usuário (string).\n    - **created_at**: Data e hora de criação do usuário (string, formato ISO 8601).\n    - **updated_at**: Data e hora da última atualização do usuário (string, formato ISO 8601).\n\n### Exemplo de Requisição\n\n```http\nGET /api/vacancies_user/my_applications_vacancies\nAuthorization: Bearer \u003cyour_access_token\u003e\n```\n\n---\n\n## Endpoint: Aplicar ou Desaplicar de uma Vaga\n\n**Endpoint:** `GET /api/vacancies_user/to_apply_or_unapply/{vacancy_id}`\n\n**Descrição:** Aplica ou desaplica o usuário autenticado a uma vaga específica.\n\n**Parâmetros:**\n\n- **vacancy_id** (Path): ID da vaga (inteiro).\n- **action** (Query): Ação a ser realizada, que pode ser \"attach\" (aplicar) ou \"detach\" (desaplicar).\n\n**Autenticação:** Bearer Token (necessário para acessar este endpoint).\n\n### Resposta de Sucesso\n\n**Código de Status:** `200 OK`\n\n**Descrição:** Mensagem de sucesso confirmando a ação realizada.\n\n**Formato da Resposta:**\n\n```json\n{\n  \"message\": \"User John applied to Vacancy XYZ\"\n}\n```\n\n### Resposta de Erro\n\n**Código de Status:** `404 Not Found`\n\n**Descrição:** Mensagem de erro indicando dados ou ação inválidos.\n\n**Formato da Resposta:**\n\n```json\n{\n  \"error\": \"Invalid data or action provided.\"\n}\n```\n\n### Exemplo de Requisição\n\n```http\nGET /api/vacancies_user/to_apply_or_unapply/2?action=attach\nAuthorization: Bearer \u003cyour_access_token\u003e\n```\n\n---\n\n## Endpoint: Listar Usuários que Aplicaram para uma Vaga\n\n**Endpoint:** `GET /api/vacancies_user/vacancy_applications/{vacancy_id}`\n\n**Descrição:** Retorna uma lista de usuários que se candidataram a uma vaga específica.\n\n**Parâmetros:**\n\n- **vacancy_id** (Path): ID da vaga (inteiro).\n\n**Autenticação:** Bearer Token (necessário para acessar este endpoint).\n\n### Resposta de Sucesso\n\n**Código de Status:** `200 OK`\n\n**Descrição:** Retorna uma lista de usuários que aplicaram para a vaga especificada.\n\n**Formato da Resposta:**\n\n```json\n{\n  \"data\": [\n    {\n      \"id\": 1,\n      \"name\": \"John Doe\",\n      \"email\": \"john@example.com\",\n      \"created_at\": \"2024-06-09T12:00:00.000000Z\",\n      \"updated_at\": \"2024-06-09T12:00:00.000000Z\"\n    }\n  ]\n}\n```\n\n### Campos da Resposta\n\n- **data**: Array contendo uma lista de usuários que aplicaram para a vaga.\n  - **id**: ID do usuário (inteiro).\n  - **name**: Nome do usuário (string).\n  - **email**: Email do usuário (string).\n  - **created_at**: Data e hora de criação da aplicação do usuário (string, formato ISO 8601).\n  - **updated_at**: Data e hora da última atualização da aplicação do usuário (string, formato ISO 8601).\n\n### Resposta de Erro\n\n**Código de Status:** `404 Not Found`\n\n**Descrição:** Mensagem de erro indicando que a vaga não foi encontrada.\n\n### Exemplo de Requisição\n\n```http\nGET /api/vacancies_user/vacancy_applications/2\nAuthorization: Bearer \u003cyour_access_token\u003e\n```\n\n---\n\n# App\n\nA aplicação Vue.JS que compõe o front-end começou a ser desenvolvida recentemente, portanto está consumindo apenas alguns endpoints da API.\n\n### 1. Registro e Login\n\n\u003cp \u003e\n    \u003cimg width=\"400\" height=\"300\" src=\"public/registro-e-login.gif\"\u003e\n\u003c/p\u003e\n\n### 2. Busca e Edição de Vagas\n\n\u003cp \u003e\n    \u003cimg width=\"400\" height=\"300\" src=\"public/busca-e-edicao-vagas.gif\"\u003e\n\u003c/p\u003e\n\n### 3. Cadastro e Exclusão de Vagas\n\n\n\u003cp \u003e\n    \u003cimg width=\"400\" height=\"300\" src=\"public/cadastro-e-exclusao-de-vagas.gif\"\u003e\n\u003c/p\u003e\n\n---\n\n**Especialmente no app front-end ainda existem muitas alterações a serem feitas, como validações e implementações, notificações e etc, mas julgo que está apto a ser compartilhado por aqui, hahaha! Graças a esse projeto, tenho conseguido estudar melhor o desenvolvimento web full stack com tecnologias modernas e um padrão de microsserviços bem estruturado.**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fr4mpo%2Fmy-jobs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fr4mpo%2Fmy-jobs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fr4mpo%2Fmy-jobs/lists"}