gohorsejobs/docs/DATABASE.md
Tiago Yamamoto b09bd023ed feat: security refactor, server-side pagination, and docs update
- impl(frontend): server-side pagination for jobs listing
- impl(frontend): standardized api error handling and sonner integration
- test(frontend): added unit tests for JobCard
- impl(backend): added SanitizeMiddleware for XSS protection
- test(backend): added table-driven tests for JobService
- docs: updated READMES, created ROADMAP.md and DATABASE.md
- fix(routing): redirected landing page buttons to /jobs
2025-12-23 00:50:51 -03:00

3.2 KiB

Database Schema Documentation

This document outlines the database schema for the GoHorseJobs platform, based on the backend Go models.

Core Tables

Users (users)

Represents system users including Candidates, Recruiters, and Admins.

  • id: INTEGER (PK)
  • identifier: VARCHAR (Unique, Email or Username)
  • password_hash: VARCHAR
  • role: VARCHAR (superadmin, companyAdmin, recruiter, jobSeeker)
  • full_name: VARCHAR
  • language: VARCHAR (Default: 'pt')
  • active: BOOLEAN
  • created_at, updated_at, last_login_at: TIMESTAMP

Companies (companies)

Represents employer organizations.

  • id: INTEGER (PK)
  • name: VARCHAR
  • slug: VARCHAR (Unique)
  • type: VARCHAR
  • document: VARCHAR (Houjin Bangou / CNPJ)
  • address, region_id, city_id, phone, email, website: Contact info
  • logo_url, description: Branding
  • active, verified: BOOLEAN
  • created_at, updated_at: TIMESTAMP

Jobs (jobs)

Represents job postings.

  • id: INTEGER (PK)
  • company_id: INTEGER (FK -> companies.id)
  • created_by: INTEGER (FK -> users.id)
  • title: VARCHAR
  • description: TEXT
  • salary_min, salary_max: DECIMAL
  • salary_type: VARCHAR (hourly, monthly, yearly)
  • employment_type: VARCHAR (full-time, part-time, etc.)
  • work_mode: VARCHAR (onsite, hybrid, remote)
  • location, region_id, city_id: Location details
  • requirements, benefits: JSONB
  • visa_support: BOOLEAN
  • language_level: VARCHAR
  • status: VARCHAR (draft, published, closed, etc.)
  • is_featured: BOOLEAN
  • created_at, updated_at: TIMESTAMP

Applications (applications)

Represents job applications.

  • id: INTEGER (PK)
  • job_id: INTEGER (FK -> jobs.id)
  • user_id: INTEGER (FK -> users.id, Nullable for guests)
  • name, email, phone, line_id, whatsapp: Applicant info
  • message: TEXT
  • resume_url: VARCHAR
  • documents: JSONB
  • status: VARCHAR (pending, reviewed, hired, etc.)
  • notes: TEXT
  • created_at, updated_at: TIMESTAMP

Reference Tables

Regions (regions)

  • id: INTEGER (PK)
  • name: VARCHAR
  • country_code: VARCHAR
  • code: VARCHAR

Cities (cities)

  • id: INTEGER (PK)
  • region_id: INTEGER (FK -> regions.id)
  • name: VARCHAR

Tags (tags)

  • id: INTEGER (PK)
  • name: VARCHAR
  • category: VARCHAR
  • active: BOOLEAN

Relations & Logs

User Companies (user_companies)

Maps Users to Companies (N:M).

  • id: INTEGER (PK)
  • user_id: INTEGER (FK -> users.id)
  • company_id: INTEGER (FK -> companies.id)
  • role: VARCHAR (companyAdmin, recruiter)
  • permissions: JSONB

Favorite Jobs (favorite_jobs)

  • id: INTEGER (PK)
  • user_id: INTEGER
  • job_id: INTEGER

Login Audits (login_audits)

  • id: INTEGER (PK)
  • user_id: VARCHAR
  • identifier: VARCHAR
  • ip_address, user_agent: Metadata
  • created_at: TIMESTAMP

Password Resets (password_resets)

  • id: INTEGER (PK)
  • user_id: INTEGER
  • token: VARCHAR
  • expires_at: TIMESTAMP
  • used: BOOLEAN