package dto // CreateJobRequest represents the request to create a new job type CreateJobRequest struct { CompanyID string `json:"companyId" validate:"required"` Title string `json:"title" validate:"required,min=5,max=255"` Description string `json:"description" validate:"required,min=20"` SalaryMin *float64 `json:"salaryMin,omitempty"` SalaryMax *float64 `json:"salaryMax,omitempty"` SalaryType *string `json:"salaryType,omitempty" validate:"omitempty,oneof=hourly daily weekly monthly yearly"` Currency *string `json:"currency,omitempty" validate:"omitempty,oneof=BRL USD EUR GBP JPY"` EmploymentType *string `json:"employmentType,omitempty" validate:"omitempty,oneof=full-time part-time dispatch contract temporary training voluntary permanent"` WorkingHours *string `json:"workingHours,omitempty"` Location *string `json:"location,omitempty"` RegionID *int `json:"regionId,omitempty"` CityID *int `json:"cityId,omitempty"` Requirements map[string]interface{} `json:"requirements,omitempty"` Benefits map[string]interface{} `json:"benefits,omitempty"` VisaSupport bool `json:"visaSupport"` LanguageLevel *string `json:"languageLevel,omitempty"` Status string `json:"status" validate:"oneof=draft open closed review published paused expired archived reported"` } // UpdateJobRequest represents the request to update a job type UpdateJobRequest struct { Title *string `json:"title,omitempty" validate:"omitempty,min=5,max=255"` Description *string `json:"description,omitempty" validate:"omitempty,min=20"` SalaryMin *float64 `json:"salaryMin,omitempty"` SalaryMax *float64 `json:"salaryMax,omitempty"` SalaryType *string `json:"salaryType,omitempty" validate:"omitempty,oneof=hourly daily weekly monthly yearly"` Currency *string `json:"currency,omitempty" validate:"omitempty,oneof=BRL USD EUR GBP JPY"` EmploymentType *string `json:"employmentType,omitempty" validate:"omitempty,oneof=full-time part-time dispatch contract temporary training voluntary permanent"` WorkingHours *string `json:"workingHours,omitempty"` Location *string `json:"location,omitempty"` RegionID *int `json:"regionId,omitempty"` CityID *int `json:"cityId,omitempty"` Requirements map[string]interface{} `json:"requirements,omitempty"` Benefits map[string]interface{} `json:"benefits,omitempty"` VisaSupport *bool `json:"visaSupport,omitempty"` LanguageLevel *string `json:"languageLevel,omitempty"` Status *string `json:"status,omitempty" validate:"omitempty,oneof=draft open closed review published paused expired archived reported"` } // CreateApplicationRequest represents a job application (guest or logged user) type CreateApplicationRequest struct { JobID string `json:"jobId" validate:"required"` UserID *string `json:"userId,omitempty"` Name *string `json:"name,omitempty"` Phone *string `json:"phone,omitempty"` LineID *string `json:"lineId,omitempty"` WhatsApp *string `json:"whatsapp,omitempty"` Email *string `json:"email,omitempty"` Message *string `json:"message,omitempty"` ResumeURL *string `json:"resumeUrl,omitempty"` Documents map[string]interface{} `json:"documents,omitempty"` } // UpdateApplicationStatusRequest represents updating application status (recruiter only) type UpdateApplicationStatusRequest struct { Status string `json:"status" validate:"required,oneof=pending reviewed shortlisted rejected hired"` Notes *string `json:"notes,omitempty"` } // CreateCompanyRequest represents creating a new company type CreateCompanyRequest struct { Name string `json:"name" validate:"required,min=3,max=255"` Slug string `json:"slug" validate:"required,min=3,max=255"` Type *string `json:"type,omitempty"` Document *string `json:"document,omitempty"` Address *string `json:"address,omitempty"` RegionID *int `json:"regionId,omitempty"` CityID *int `json:"cityId,omitempty"` Phone *string `json:"phone,omitempty"` Email *string `json:"email,omitempty"` Website *string `json:"website,omitempty"` LogoURL *string `json:"logoUrl,omitempty"` Description *string `json:"description,omitempty"` } // UpdateCompanyRequest represents updating company information type UpdateCompanyRequest struct { Name *string `json:"name,omitempty" validate:"omitempty,min=3,max=255"` Slug *string `json:"slug,omitempty" validate:"omitempty,min=3,max=255"` Type *string `json:"type,omitempty"` Document *string `json:"document,omitempty"` Address *string `json:"address,omitempty"` RegionID *int `json:"regionId,omitempty"` CityID *int `json:"cityId,omitempty"` Phone *string `json:"phone,omitempty"` Email *string `json:"email,omitempty"` Website *string `json:"website,omitempty"` LogoURL *string `json:"logoUrl,omitempty"` Description *string `json:"description,omitempty"` Active *bool `json:"active,omitempty"` Verified *bool `json:"verified,omitempty"` } // AssignUserToCompanyRequest represents assigning a user to a company type AssignUserToCompanyRequest struct { UserID string `json:"userId" validate:"required"` CompanyID string `json:"companyId" validate:"required"` Role string `json:"role" validate:"required,oneof=companyAdmin recruiter"` Permissions map[string]interface{} `json:"permissions,omitempty"` } // PaginationQuery represents pagination parameters type PaginationQuery struct { Page int `form:"page" validate:"min=1"` Limit int `form:"limit" validate:"min=1,max=100"` } // JobFilterQuery represents job filtering parameters type JobFilterQuery struct { PaginationQuery CompanyID *string `form:"companyId"` RegionID *int `form:"regionId"` CityID *int `form:"cityId"` EmploymentType *string `form:"employmentType"` WorkMode *string `form:"workMode"` // "remote", "hybrid", "onsite" Location *string `form:"location"` // Partial match Status *string `form:"status"` IsFeatured *bool `form:"isFeatured"` // Filter by featured status VisaSupport *bool `form:"visaSupport"` LanguageLevel *string `form:"languageLevel"` Search *string `form:"search"` // Covers title, description, company name } // PaginatedResponse represents a paginated API response type PaginatedResponse struct { Data interface{} `json:"data"` Pagination Pagination `json:"pagination"` } // Pagination represents pagination metadata type Pagination struct { Page int `json:"page"` Limit int `json:"limit"` Total int `json:"total"` } // APIResponse represents a standard API response type APIResponse struct { Success bool `json:"success"` Data interface{} `json:"data,omitempty"` Error *string `json:"error,omitempty"` Message *string `json:"message,omitempty"` }