| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Link do projeto: https://final-project-recodework-7r6w.onrender.com/
| Categoria | Ferramentas/Frameworks |
|---|---|
| Front-end | HTML5, CSS3, JavaScript, Bootstrap |
| Back-end | Java 17, Spring Boot 3.5.3, Maven, MySQL 8.0 |
| Design | Figma (prototipagem) |
| Infra | Docker, Render (deploy), Railway (DB) |
| Ferramentas | IntelliJ IDEA, VS Code, Git, OpenAPI (documentação) |
git clone https://github.com/IuryDevJava/Final-Project---Recodework
cd Final-Project---Recodework
1.2 Estrutura de pastas do projeto:
📦Iurydev ┣ 📂.mvn ┣ 📂src ┃ ┣ 📂main ┃ ┃ ┣ 📂java ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┗ 📂recode ┃ ┃ ┃ ┃ ┃ ┗ 📂projectfinal ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂Iurydev ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂config # Configurações da aplicação ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂controller # Controladores REST ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dto # Data Transfer Objects ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂model # Entidades do domínio ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂repository # Acesso a dados ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂service # Lógica de negócios ┃ ┃ ┣ 📂resources ┃ ┃ ┃ ┣ 📜application.properties ┃ ┃ ┃ ┣ 📜application-dev.properties ┃ ┃ ┃ ┣ 📜application-docker.properties ┃ ┃ ┃ ┣ 📜application-prod.properties ┃ ┃ ┃ ┣ 📂static # Arquivos estáticos (CSS, JS, imagens) ┃ ┃ ┃ ┗ 📂templates # Templates Thymeleaf ┃ ┣ 📂test ┃ ┃ ┗ 📂java # Testes automatizados ┣ 📜.gitignore ┣ 📜Dockerfile # Docker build da aplicação ┣ 📜docker-compose.yml # Orquestração de contêineres ┣ 📜mvnw ┣ 📜mvnw.cmd ┣ 📜pom.xml # Dependências e build do Maven
Gere a chave key:
https://platform.openai.com/settings/organization/api-keys
clique em + Create new secret key Copie a sua chave e guarde em um local seguro. Observações: não compartilhe a sua chave.
No Intellij vá em Run / Debug Configurations -> Edit Configurations... -> Modify options -> Environment variables após isso vai aparecer um campo com Environment variables -> Edit -> + e crie sua variável de ambiente com Name: openai.api.key Value: sk-suachaveaqui...
Vá em resources e crie um arquivo application-docker.properties adicione:
spring.datasource.url=jdbc:mysql://db:3306/namedb?useSSL=false&serverTimezone=America/Sao_Paulo&allowPublicKeyRetrieval=true
spring.datasource.username=seuusuario
spring.datasource.password=suasenha
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.show-sql=true
spring.sql.init.mode=never
spring.flyway.locations=classpath:db/migration
spring.flyway.baseline-on-migrate=true
spring.flyway.enabled=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.check-template-location=true
spring.servlet.multipart.max-file-size=5MB
spring.servlet.multipart.max-request-size=5MB
openai.api.key=${openai.api.key}
openai.api.url=https://api.openai.com/v1/chat/completions
openai.api.model=gpt-3.5-turbo
openai.api.temperature=0.7
openai.api.max-tokens=500
spring.mvc.async.request-timeout=60000
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=America/Sao_Paulo
Procure application.properties e adicione:
#Isso vai chamar o application-docker.properties spring.profiles.active=docker
Na raiz do projeto e crie o arquivo docker-compose.yml e adicione:
version: '3.8'
services:
db:
image: mysql:8.0
container_name: name_db
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: suasenhaaqui
MYSQL_DATABASE: namedb
MYSQL_USER: seuusuario
MYSQL_PASSWORD: suasenha
healthcheck:
test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ]
interval: 10s
timeout: 5s
retries: 5
app:
build:
container_name: recodework_app
depends_on:
db:
condition: service_healthy
ports:
- "8080:8080"
environment:
SPRING_PROFILES_ACTIVE: docker
volumes:
mysql_data:
Na raiz do projeto crie um arquivo Dockerfile e adicione:
FROM maven:3.9.6-eclipse-temurin-17 AS build WORKDIR /app COPY pom.xml . COPY src ./src RUN mvn clean package -DskipTests FROM openjdk:17-jdk-slim WORKDIR /app COPY --from=build /app/target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
Aperte ALT+F12 ou abra o terminal(caminho inicial do projeto - raiz) e digite os comandos abaixo para deixar sua aplicação dockerizada:
mvn clean mvn clean package -DskipTests docker-compose up --build
Crie o banco de dados:
CREATE DATABASE namedb; USE namedb;
Crie as vagas:
INSERT INTO
vaga (
titulo,
empresa,
localizacao,
tipo_contrato,
descricao,
lgbtqia_friendly,
area
)
VALUES
(
'Social Media',
'Nomad',
'São Paulo',
'Tempo integral',
'Estamos buscando um Social Media criativo para gerenciar nossas redes sociais. Responsabilidades incluem criação de conteúdo, engajamento com a comunidade e análise de métricas. Requisitos: experiência com redes sociais, conhecimento em design básico e excelente comunicação.',
TRUE,
'Design'
),
(
'Social Media Assistant',
'Netlify',
'São Paulo',
'Tempo integral',
'Assistente de Social Media para apoiar na criação de conteúdo e gestão de comunidades online. Ideal para quem está começando na área e quer aprender com uma equipe experiente.',
TRUE,
'Design'
),
(
'Desenvolvedor Full Stack',
'Dropbox',
'Rio de Janeiro',
'Tempo integral',
'Desenvolvedor Full Stack para trabalhar em nossas aplicações web. Requisitos: experiência com React, Node.js, bancos de dados relacionais e conhecimento em arquitetura de software.',
TRUE,
'Full Stack'
),
(
'Brand Designer',
'Maze',
'San Francisco, USA',
'Tempo integral',
'Designer de marca para criar identidades visuais impactantes. Procuramos alguém com portfólio forte em design de marca e experiência em trabalhar com equipes internacionais.',
TRUE,
'Design'
),
(
'Interactive Developer',
'Oracle',
'São Paulo',
'Tempo integral',
'Desenvolvedor Interativo para criar experiências digitais inovadoras. Requisitos: conhecimento em JavaScript, CSS animations e frameworks modernos.',
TRUE,
'Front-End'
),
(
'Social Media',
'Udacity',
'Hamburg, Germany',
'Tempo integral',
'Estamos buscando um Social Media criativo para gerenciar nossas redes sociais. Responsabilidades incluem criação de conteúdo, engajamento com a comunidade e análise de métricas. Requisitos: experiência com redes sociais, conhecimento em design básico e excelente comunicação.',
TRUE,
'Design'
),
(
'Back-End Developer',
'Google',
'Belo Horizonte, MG',
'Tempo integral',
'Desenvolvedor Back-End para trabalhar em sistemas escaláveis. Requisitos: experiência com Java, Spring Boot, microsserviços e cloud computing.',
TRUE,
'Back-End'
),
(
'DevOps Engineer',
'Microsoft',
'Redmond, USA',
'Tempo integral',
'Engenheiro DevOps para implementar e manter pipelines de CI/CD. Requisitos: conhecimento em Docker, Kubernetes, Azure e infraestrutura como código.',
TRUE,
'DevOps'
),
(
'Data Scientist',
'IBM',
'Campinas, SP',
'Tempo integral',
'Cientista de Dados para desenvolver modelos preditivos e análises avançadas. Requisitos: experiência com Python, machine learning e big data.',
TRUE,
'Data Science'
),
(
'QA Tester',
'GitHub',
'Remoto',
'Freelancer',
'Testador de Qualidade para garantir a qualidade dos nossos produtos. Requisitos: experiência com testes manuais e automatizados, conhecimento em Selenium.',
TRUE,
'Qualidade'
),
(
'Machine Learning Engineer',
'NVIDIA',
'Austin, USA',
'Tempo integral',
'Engenheiro de Machine Learning para desenvolver modelos de IA. Requisitos: experiência com TensorFlow, PyTorch e processamento de grandes volumes de dados.',
TRUE,
'IA/ML'
),
(
'Cyber Security Analyst',
'Palo Alto Networks',
'Remoto',
'Tempo integral',
'Analista de Segurança para proteger nossos sistemas contra ameaças. Requisitos: conhecimento em firewalls, SIEM e técnicas de hacking ético.',
TRUE,
'Segurança'
),
(
'Product Manager',
'Atlassian',
'São Paulo',
'Tempo integral',
'Gerente de Produto para liderar o desenvolvimento de novas funcionalidades. Responsável por definir roadmap, priorizar features e trabalhar com equipes multidisciplinares.',
TRUE,
'Produto'
);
Veja as vagas:
SELECT * FROM vagas;
Em resources crie um arquivo application-dev.properties e adicione:
spring.datasource.url=jdbc:mysql://localhost:3306/namedb?useSSL=false&serverTimezone=America/Sao_Paulo
spring.datasource.username=seuusuario
spring.datasource.password=suasenha
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.sql.init.mode=never
spring.flyway.locations=classpath:db/migration
spring.flyway.baseline-on-migrate=true
spring.flyway.enabled=true
spring.datasource.hikari.connection-timeout=20000
spring.datasource.hikari.maximum-pool-size=5
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.check-template-location=true
spring.servlet.multipart.max-file-size=5MB
spring.servlet.multipart.max-request-size=5MB
openai.api.key=${openai.api.key}
openai.api.url=https://api.openai.com/v1/chat/completions
openai.api.model=gpt-3.5-turbo
openai.api.temperature=0.7
openai.api.max-tokens=500
spring.mvc.async.request-timeout=60000
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=America/Sao_Paulo
Em seguida, no application.properties, mude para:
spring.profiles.active=dev
Pode rodar o projeto normalmente e acesse:
localhost:8080/home
Arquivo completo localizado em: src/main/resources/application-prod.properties
spring.datasource.url=jdbc:mysql://${MYSQLHOST}:${MYSQLPORT}/${MYSQLDATABASE}
spring.datasource.username=${MYSQLUSER}
spring.datasource.password=${MYSQLPASSWORD}
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.sql.init.mode=always
spring.sql.init.continue-on-error=true
spring.jpa.defer-datasource-initialization=true
spring.jpa.properties.hibernate.hbm2ddl.create-constraints=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.check-template-location=true
spring.servlet.multipart.max-file-size=5MB
spring.servlet.multipart.max-request-size=5MB
openai.api.key=${openai.api.key}
openai.api.url=https://api.openai.com/v1/chat/completions
openai.api.model=gpt-3.5-turbo
openai.api.temperature=0.7
openai.api.max-tokens=500
spring.mvc.async.request-timeout=60000
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=America/Sao_Paulo
spring.datasource.hikari.connection-timeout=20000
spring.datasource.hikari.maximum-pool-size=5
logging.level.root=INFO
logging.level.org.springframework.web=INFO
logging.level.com.yourpackage=DEBUG
INSERT INTO
vaga (
titulo,
empresa,
localizacao,
tipo_contrato,
descricao,
lgbtqia_friendly,
area
)
VALUES
(
'Social Media',
'Nomad',
'São Paulo',
'Tempo integral',
'Estamos buscando um Social Media criativo para gerenciar nossas redes sociais. Responsabilidades incluem criação de conteúdo, engajamento com a comunidade e análise de métricas. Requisitos: experiência com redes sociais, conhecimento em design básico e excelente comunicação.',
TRUE,
'Design'
),
(
'Social Media Assistant',
'Netlify',
'São Paulo',
'Tempo integral',
'Assistente de Social Media para apoiar na criação de conteúdo e gestão de comunidades online. Ideal para quem está começando na área e quer aprender com uma equipe experiente.',
TRUE,
'Design'
),
(
'Desenvolvedor Full Stack',
'Dropbox',
'Rio de Janeiro',
'Tempo integral',
'Desenvolvedor Full Stack para trabalhar em nossas aplicações web. Requisitos: experiência com React, Node.js, bancos de dados relacionais e conhecimento em arquitetura de software.',
TRUE,
'Full Stack'
),
(
'Brand Designer',
'Maze',
'San Francisco, USA',
'Tempo integral',
'Designer de marca para criar identidades visuais impactantes. Procuramos alguém com portfólio forte em design de marca e experiência em trabalhar com equipes internacionais.',
TRUE,
'Design'
),
(
'Interactive Developer',
'Oracle',
'São Paulo',
'Tempo integral',
'Desenvolvedor Interativo para criar experiências digitais inovadoras. Requisitos: conhecimento em JavaScript, CSS animations e frameworks modernos.',
TRUE,
'Front-End'
),
(
'Social Media',
'Udacity',
'Hamburg, Germany',
'Tempo integral',
'Estamos buscando um Social Media criativo para gerenciar nossas redes sociais. Responsabilidades incluem criação de conteúdo, engajamento com a comunidade e análise de métricas. Requisitos: experiência com redes sociais, conhecimento em design básico e excelente comunicação.',
TRUE,
'Design'
),
(
'Back-End Developer',
'Google',
'Belo Horizonte, MG',
'Tempo integral',
'Desenvolvedor Back-End para trabalhar em sistemas escaláveis. Requisitos: experiência com Java, Spring Boot, microsserviços e cloud computing.',
TRUE,
'Back-End'
),
(
'DevOps Engineer',
'Microsoft',
'Redmond, USA',
'Tempo integral',
'Engenheiro DevOps para implementar e manter pipelines de CI/CD. Requisitos: conhecimento em Docker, Kubernetes, Azure e infraestrutura como código.',
TRUE,
'DevOps'
),
(
'Data Scientist',
'IBM',
'Campinas, SP',
'Tempo integral',
'Cientista de Dados para desenvolver modelos preditivos e análises avançadas. Requisitos: experiência com Python, machine learning e big data.',
TRUE,
'Data Science'
),
(
'QA Tester',
'GitHub',
'Remoto',
'Freelancer',
'Testador de Qualidade para garantir a qualidade dos nossos produtos. Requisitos: experiência com testes manuais e automatizados, conhecimento em Selenium.',
TRUE,
'Qualidade'
),
(
'Machine Learning Engineer',
'NVIDIA',
'Austin, USA',
'Tempo integral',
'Engenheiro de Machine Learning para desenvolver modelos de IA. Requisitos: experiência com TensorFlow, PyTorch e processamento de grandes volumes de dados.',
TRUE,
'IA/ML'
),
(
'Cyber Security Analyst',
'Palo Alto Networks',
'Remoto',
'Tempo integral',
'Analista de Segurança para proteger nossos sistemas contra ameaças. Requisitos: conhecimento em firewalls, SIEM e técnicas de hacking ético.',
TRUE,
'Segurança'
),
(
'Product Manager',
'Atlassian',
'São Paulo',
'Tempo integral',
'Gerente de Produto para liderar o desenvolvimento de novas funcionalidades. Responsável por definir roadmap, priorizar features e trabalhar com equipes multidisciplinares.',
TRUE,
'Produto'
);
Para ativar o modo produção, Mude para:
spring.profiles.active=prod
🌐 Conectando o Railway com Render 🌐 2. Configure o Banco de Dados no Railway Acesse Railway.
Crie um novo projeto e selecione o banco MySQL e iniciar deploy.
Copie as variáveis de ambiente geradas (database, host, port, usuário, senha).
🚀 3. Faça o Deploy da Aplicação no Render. Acesse Render.
Crie um novo Web Service.
Conecte seu repositório GitHub.
| Variável | Valor |
|---|---|
| MYSQLDATABASE | railway |
| MYSQLHOST | mainline.proxy.rlwy.net |
| MYSQLPORT | 21465 |
| MYSQLUSER | root |
| MYSQLPASSWORD | ************** |
| MYSQLPASSWORD | sk-... (sua chave da OpenAI) |
O Recodework nasceu com o propósito de ser um espaço seguro, inclusivo e transformador para a comunidade LGBTQIA+.
Combinando empregabilidade, capacitação e apoio emocional, a plataforma oferece um ecossistema completo para impulsionar trajetórias profissionais e pessoais.
| Back | FazBrowse Home | New Git URL |