Skip to content

Latest commit

Β 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“„ Resume API β€” Express + PostgreSQL

REST API completa para um aplicativo de currΓ­culos, com 12 entidades e todos os relacionamentos.


πŸ—‚οΈ Entidades e Relacionamentos

users (1) ──────────── (N) resumes
resumes (1) ──────────── (1) personal_info
resumes (1) ──────────── (N) work_experiences
resumes (1) ──────────── (N) education
resumes (1) ──────────── (N) skills
resumes (1) ──────────── (N) languages
resumes (1) ──────────── (N) projects
resumes (1) ──────────── (N) certifications
resumes (1) ──────────── (N) awards
resumes (1) ──────────── (N) volunteer_experiences
resumes (1) ──────────── (N) publications
resumes (1) ──────────── (N) references_list

βš™οΈ Setup

1. Instalar dependΓͺncias

npm install

2. Configurar ambiente

cp .env.example .env
# Editar .env com suas credenciais do PostgreSQL

3. Criar o banco e rodar migrations

-- No psql:
CREATE DATABASE resume_db;
npm run migrate

4. Iniciar o servidor

npm run dev    # desenvolvimento (nodemon)
npm start      # produΓ§Γ£o

πŸ“‘ Endpoints

Base URL: http://localhost:3000/api/v1


πŸ‘€ Users

MΓ©todo Endpoint DescriΓ§Γ£o
GET /users Listar todos os usuΓ‘rios
GET /users/:id Buscar usuΓ‘rio por ID
GET /users/:id/resumes Listar currΓ­culos do usuΓ‘rio
POST /users Criar usuΓ‘rio
PUT /users/:id Atualizar usuΓ‘rio
DELETE /users/:id Remover usuΓ‘rio

POST /users β€” body:

{
  "email": "joao@email.com",
  "name": "JoΓ£o Silva",
  "password": "senha123"
}

πŸ“‹ Resumes

MΓ©todo Endpoint DescriΓ§Γ£o
GET /resumes Listar currΓ­culos pΓΊblicos
GET /resumes/:id Buscar currΓ­culo completo (all sections)
POST /resumes Criar currΓ­culo
PUT /resumes/:id Atualizar currΓ­culo
DELETE /resumes/:id Remover currΓ­culo (cascade)

POST /resumes β€” body:

{
  "user_id": "uuid",
  "title": "Meu CurrΓ­culo Dev",
  "summary": "Desenvolvedor fullstack com 5 anos de experiΓͺncia",
  "is_public": true,
  "slug": "joao-silva-dev",
  "template": "modern"
}

🧍 Personal Info (1:1 com Resume)

MΓ©todo Endpoint DescriΓ§Γ£o
GET /resumes/:resumeId/personal-info Buscar info pessoal
POST /resumes/:resumeId/personal-info Criar info pessoal
PUT /resumes/:resumeId/personal-info Atualizar
DELETE /resumes/:resumeId/personal-info Remover

πŸ’Ό Work Experiences / πŸŽ“ Education / πŸ› οΈ Skills / 🌍 Languages / πŸš€ Projects / πŸ“œ Certifications / πŸ† Awards / 🀝 Volunteer Experiences / πŸ“– Publications / πŸ‘₯ References

Todas as seΓ§Γ΅es seguem o mesmo padrΓ£o de rotas:

MΓ©todo Endpoint DescriΓ§Γ£o
GET /resumes/:resumeId/<section> Listar todos
GET /resumes/:resumeId/<section>/:id Buscar por ID
POST /resumes/:resumeId/<section> Criar
PUT /resumes/:resumeId/<section>/:id Atualizar
DELETE /resumes/:resumeId/<section>/:id Remover
PATCH /resumes/:resumeId/<section>/reorder Reordenar itens

SeΓ§Γ΅es disponΓ­veis:

  • work-experiences
  • education
  • skills
  • languages
  • projects
  • certifications
  • awards
  • volunteer-experiences
  • publications
  • references

PATCH /<section>/reorder β€” body:

{
  "order": [
    { "id": "uuid-1", "order_index": 0 },
    { "id": "uuid-2", "order_index": 1 },
    { "id": "uuid-3", "order_index": 2 }
  ]
}

πŸ“¦ Campos por Entidade

work_experiences

{
  "company": "Empresa XPTO",
  "job_title": "Desenvolvedor Senior",
  "location": "Recife, PE",
  "start_date": "2021-01-01",
  "end_date": null,
  "is_current": true,
  "description": "Desenvolvimento de APIs REST com Node.js",
  "order_index": 0
}

education

{
  "institution": "UFPE",
  "degree": "Bacharel",
  "field_of_study": "CiΓͺncia da ComputaΓ§Γ£o",
  "start_date": "2016-01-01",
  "end_date": "2020-12-01",
  "grade": "8.5",
  "description": "..."
}

skills

{ "name": "Node.js", "level": "advanced", "category": "Backend" }

level: beginner | intermediate | advanced | expert

languages

{ "name": "InglΓͺs", "proficiency": "professional" }

proficiency: basic | conversational | professional | native

certifications

{
  "name": "AWS Solutions Architect",
  "issuing_org": "Amazon Web Services",
  "issue_date": "2023-06-01",
  "expiry_date": "2026-06-01",
  "credential_id": "ABC123",
  "credential_url": "https://aws.amazon.com/verify/ABC123"
}

πŸ” GET /resumes/:id β€” Resposta completa

{
  "data": {
    "id": "uuid",
    "title": "Meu CurrΓ­culo",
    "personal_info": { ... },
    "work_experiences": [ ... ],
    "education": [ ... ],
    "skills": [ ... ],
    "languages": [ ... ],
    "projects": [ ... ],
    "certifications": [ ... ],
    "awards": [ ... ],
    "volunteer_experiences": [ ... ],
    "publications": [ ... ],
    "references": [ ... ]
  }
}

πŸ›‘οΈ Respostas de Erro

CΓ³digo Significado
400 Dados invΓ‘lidos
404 Recurso nΓ£o encontrado
409 Conflito (duplicidade)
422 Falha de validaΓ§Γ£o
500 Erro interno do servidor

πŸ“‚ Estrutura do Projeto

resume-api/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ config/
β”‚   β”‚   └── database.js          # Pool de conexΓ£o PostgreSQL
β”‚   β”œβ”€β”€ controllers/
β”‚   β”‚   β”œβ”€β”€ users.controller.js
β”‚   β”‚   β”œβ”€β”€ resumes.controller.js
β”‚   β”‚   β”œβ”€β”€ personalInfo.controller.js
β”‚   β”‚   └── section.factory.js   # Factory CRUD para todas as seΓ§Γ΅es
β”‚   β”œβ”€β”€ middlewares/
β”‚   β”‚   └── errorHandler.js
β”‚   β”œβ”€β”€ migrations/
β”‚   β”‚   β”œβ”€β”€ schema.sql            # Todas as tabelas e Γ­ndices
β”‚   β”‚   └── run.js
β”‚   β”œβ”€β”€ routes/
β”‚   β”‚   └── index.js              # Todas as rotas
β”‚   └── index.js                  # Entry point
β”œβ”€β”€ .env.example
β”œβ”€β”€ package.json
└── README.md

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages