gohorsejobs/backend/internal/models/job.go
NANDO9322 9a1fca0c36 feat: (TASK: Mudança na forma de operar os usuarios)
refatoração fluxo de vagas e correção login automático
- Frontend:
  - Implementa componente JobFormBuilder para perguntas dinâmicas
  - Atualiza página /post-job com fluxo de 3 etapas e integração do builder
  - Corrige payload de registro (auth.ts) enviando campo password corretamente
  - Implementa auto-login após cadastro da empresa (redirecionamento e token)
  - Remove páginas obsoletas de registro de candidato
- Backend:
  - Atualiza CreateCompanyUseCase para retornar token JWT
  - Ajusta JobService para persistência correta de campos JSON (Questions, Benefits)
  - Atualiza DTOs de Job e Company para refletir novas estruturas
  - Adiciona migração (033) para novas colunas de refatoração
  - Ajustes nos repositórios para suporte aos novos modelos
Ref: #refactor-jobs #fix-auth
2026-01-17 17:07:35 -03:00

58 lines
2.4 KiB
Go
Executable file

package models
import "time"
// Job represents a job posting
type Job struct {
ID string `json:"id" db:"id"`
CompanyID string `json:"companyId" db:"company_id"`
CreatedBy string `json:"createdBy" db:"created_by"`
// Job Details
Title string `json:"title" db:"title"`
Description string `json:"description" db:"description"`
// Salary
SalaryMin *float64 `json:"salaryMin,omitempty" db:"salary_min"`
SalaryMax *float64 `json:"salaryMax,omitempty" db:"salary_max"`
SalaryType *string `json:"salaryType,omitempty" db:"salary_type"` // hourly, daily, weekly, monthly, yearly
Currency *string `json:"currency,omitempty" db:"currency"` // BRL, USD, EUR, GBP, JPY
SalaryNegotiable bool `json:"salaryNegotiable" db:"salary_negotiable"` // Candidate proposes salary
// Employment
EmploymentType *string `json:"employmentType,omitempty" db:"employment_type"` // full-time, part-time, dispatch, contract
WorkMode *string `json:"workMode,omitempty" db:"work_mode"` // onsite, hybrid, remote
WorkingHours *string `json:"workingHours,omitempty" db:"working_hours"`
// Location
Location *string `json:"location,omitempty" db:"location"`
RegionID *int `json:"regionId,omitempty" db:"region_id"`
CityID *int `json:"cityId,omitempty" db:"city_id"`
// Requirements & Benefits (JSONB arrays)
Requirements JSONMap `json:"requirements,omitempty" db:"requirements"`
Benefits JSONMap `json:"benefits,omitempty" db:"benefits"`
Questions JSONMap `json:"questions,omitempty" db:"questions"`
// Visa & Language
VisaSupport bool `json:"visaSupport" db:"visa_support"`
LanguageLevel *string `json:"languageLevel,omitempty" db:"language_level"` // N5-N1, beginner, none
// Status
Status string `json:"status" db:"status"` // draft, review, published, paused, expired, archived, reported, open, closed
IsFeatured bool `json:"isFeatured" db:"is_featured"` // Featured job flag
// Metadata
CreatedAt time.Time `json:"createdAt" db:"created_at"`
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
}
// JobWithCompany includes company information
type JobWithCompany struct {
Job
CompanyName string `json:"companyName"`
CompanyLogoURL *string `json:"companyLogoUrl,omitempty"`
RegionName *string `json:"regionName,omitempty"`
CityName *string `json:"cityName,omitempty"`
ApplicationsCount int `json:"applicationsCount"`
}