{"id":28546399,"url":"https://github.com/alysonsz/gopportunities","last_synced_at":"2025-08-19T04:44:12.819Z","repository":{"id":296865017,"uuid":"920024742","full_name":"alysonsz/gopportunities","owner":"alysonsz","description":"Problem Situation: Job notification systems often fail to deliver timely updates, causing users to miss opportunities. Gopportunities solves this with a scalable API that ensures real-time job notifications, improving responsiveness and user experience.","archived":false,"fork":false,"pushed_at":"2025-06-03T14:31:02.000Z","size":51,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-15T04:03:21.825Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","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/alysonsz.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,"zenodo":null}},"created_at":"2025-01-21T12:39:05.000Z","updated_at":"2025-06-03T14:31:04.000Z","dependencies_parsed_at":"2025-07-15T01:24:36.001Z","dependency_job_id":"cb5565c2-8ae2-4ef0-9081-4fe425b539f7","html_url":"https://github.com/alysonsz/gopportunities","commit_stats":null,"previous_names":["alysonsz/gopportunities"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alysonsz/gopportunities","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alysonsz%2Fgopportunities","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alysonsz%2Fgopportunities/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alysonsz%2Fgopportunities/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alysonsz%2Fgopportunities/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alysonsz","download_url":"https://codeload.github.com/alysonsz/gopportunities/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alysonsz%2Fgopportunities/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271102980,"owners_count":24699638,"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-19T02:00:09.176Z","response_time":63,"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-06-09T23:39:17.693Z","updated_at":"2025-08-19T04:44:12.806Z","avatar_url":"https://github.com/alysonsz.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📑 Gopportunities API\n### 📌 Descrição do Projeto\n\nO Gopportunities API é uma aplicação desenvolvida em Golang, com foco em fornecer um sistema robusto de notificações de vagas de emprego em tempo real. Utilizando boas práticas de arquitetura MVC, JWT para autenticação, e SSE (Server-Sent Events) para comunicação em tempo real, a API resolve o problema comum de usuários perderem oportunidades por atualizações tardias.\n\n### 🚀 Objetivos do Projeto\n\n  • Entregar atualizações instantâneas sobre novas oportunidades de emprego usando SSE.\n\n  • Oferecer controle total ao usuário por meio de preferências personalizadas (localização, tipo de vaga, palavras-chave).\n\n  • Seguir boas práticas de arquitetura em Golang (repository, service, controller).\n\n  • Garantir segurança e escalabilidade com JWT e segregação de responsabilidades.\n\n  • Demonstrar domínio em integração de tecnologias como GORM, Gin e Swagger.\n\n### 🛠️ Tecnologias Utilizadas\n\n**Backend**:\n\n  • Golang\n\n  • Gin (framework web)\n\n  • GORM (ORM)\n\n  • SQLite (para prototipagem)\n\n  • JWT (autenticação)\n\n  • Swagger (documentação)\n\n  • SSE (Server-Sent Events)\n\n**Padrões e Conceitos**:\n\n  • Arquitetura MVC\n\n  • Repository-Service-Controller\n\n  • Validação de entrada (binding do Gin)\n\n  • Comunicação real-time com SSE\n\n**📚 Funcionalidades Principais**:\n\n  • CRUD de oportunidades de emprego: Criação, leitura, atualização e exclusão.\n\n  • Autenticação segura com JWT: Login e registro de usuários.\n\n  • Preferências de notificação: Configuração de alertas personalizados.\n\n  • Notificações em tempo real (SSE): Receba alertas assim que novas oportunidades forem publicadas.\n\n  • Documentação completa com Swagger.\n\n**🔗 Estrutura das Entidades**:\n\n  • User: Usuários autenticados, com JWT.\n\n  • Opportunity: Representa vagas de emprego.\n\n  • UserPreference: Preferências configuráveis para notificações (localização, tipo, palavras-chave).\n\n### 🧩 Organização do Projeto\n\n```\ngopportunities/\n├── authentication/\n│   └── authJwt.go\n├── models/\n│   ├── user.go\n│   ├── opportunity.go\n│   ├── userPreference.go\n│   ├── loginRequest.go\n│   ├── loginResponse.go\n│   └── registerRequest.go\n├── controllers/\n│   ├── opportunityController.go\n│   ├── authController.go\n│   ├── notificationController.go\n│   └── userPreferenceController.go\n├── repositories/\n│   ├── opportunityRepository.go\n│   ├── userRepository.go\n│   └── userPreferenceRepository.go\n├── services/\n│   ├── opportunityService.go\n│   ├── authService.go\n│   ├── notificationService.go\n│   └── userPreferenceService.go\n├── router/\n│   ├── routes.go\n│   └── router.go\n├── utils/\n│   └── jwt.go\n├── docs/\n│   └── swagger docs (gerados com swag init)\n├── main.go\n└── README.md\n```\n\n### 🔐 Autenticação JWT\n\n  • /api/v1/register: Registra um novo usuário.\n\n  • /api/v1/login: Autentica e retorna um JWT.\n\n  • Use o token JWT como Bearer Token no Swagger para acessar rotas protegidas.\n\n### 📡 Notificações em Tempo Real (SSE)\n\n  • /api/v1/notifications [GET]\n\n      • Conecta ao servidor via SSE.\n\n      • Recebe alertas automáticos sempre que uma nova oportunidade for criada.\n\n      • Exemplo de consumo:\n\n  curl -H \"Accept: text/event-stream\" http://localhost:3030/api/v1/notifications\n\n      const evtSource = new EventSource(\"http://localhost:3030/api/v1/notifications\");\n      evtSource.onmessage = (e) =\u003e console.log(\"Nova oportunidade:\", e.data);\n\n### ⚙️ Preferências do Usuário\n\n  • /api/v1/preferences [POST]: Define preferências (localização, tipo, palavras-chave).\n\n  • /api/v1/preferences [GET]: Recupera as preferências salvas.\n\n### 📑 Documentação Swagger\n\n  • Acesse http://localhost:3030/swagger/index.html\n\n  • Explore e teste todas as rotas (incluindo JWT e SSE).\n\n### 📈 Futuras Implementações\n\n  • Migração do SQLite para um banco escalável (PostgreSQL, MySQL).\n\n  • Notificações personalizadas com base nas preferências do usuário.\n\n  • Sistema de papéis (admin, publisher) com RBAC.\n\n  • Deploy com Docker e Kubernetes.\n\n### 📌 Como Rodar o Projeto\n\n  • Clone o repositório.\n\n  • Rode go mod tidy para baixar dependências.\n\n  • Execute swag init para gerar documentação Swagger.\n\n  • Rode go run main.go ou go build -o gopportunities.git.exe e execute.\n\n  • Acesse a API via http://localhost:3030 e o Swagger via /swagger/index.html.\n\n### 👨‍💻 Autor\n\n  • Alyson Souza Carregosa 👨‍💻 Back-end Developer\n\n### 📝 Licença\n\nEste projeto está disponível sob a licença MIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falysonsz%2Fgopportunities","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falysonsz%2Fgopportunities","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falysonsz%2Fgopportunities/lists"}