gohorsejobs/backend/internal/models/job.go
Tiago Yamamoto d6bb579260 feat: add salary options with toggle and candidate proposal
Backend:
- Added migration 030_add_salary_negotiable.sql
- Added SalaryNegotiable field to Job model

Frontend:
- Updated PostJobPage with salary mode toggle (fixed/range)
- Added 'Candidato envia proposta' checkbox to hide salary
- Updated job submission logic and confirmation display
2025-12-26 15:23:22 -03:00

56 lines
2.3 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"`
// 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"`
}