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
58 lines
2.4 KiB
Go
Executable file
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"`
|
|
}
|