202 lines
4.4 KiB
Go
202 lines
4.4 KiB
Go
package integration
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
dbtypes "git-molva.ru/Molva/molva-backend/services/api_gateway/internal/database/types"
|
|
)
|
|
|
|
type (
|
|
Candidate struct {
|
|
Id string
|
|
Name string
|
|
Email string
|
|
Phone string
|
|
Birthday string
|
|
Info string
|
|
CvLink string
|
|
}
|
|
|
|
HandleVacancy struct {
|
|
AgentId string
|
|
VacancyId string
|
|
SourceLid string
|
|
Candidate Candidate
|
|
}
|
|
)
|
|
|
|
type FieldType string
|
|
|
|
const (
|
|
BooleanFieldType FieldType = "bool"
|
|
IntegerFieldType FieldType = "int"
|
|
FloatFieldType FieldType = "float"
|
|
StringFieldType FieldType = "string"
|
|
StructFieldType FieldType = "struct"
|
|
)
|
|
|
|
func convertFieldtype(typ FieldType, value string) (any, error) {
|
|
switch typ {
|
|
case BooleanFieldType:
|
|
return strconv.ParseBool(value)
|
|
case IntegerFieldType:
|
|
return strconv.ParseInt(value, 10, 64)
|
|
case FloatFieldType:
|
|
return strconv.ParseFloat(value, 64)
|
|
case StringFieldType:
|
|
return value, nil
|
|
case StructFieldType:
|
|
// TODO: maybe convert it to map[string]any?
|
|
return value, nil
|
|
default:
|
|
return nil, ErrUnknownFieldType
|
|
}
|
|
}
|
|
|
|
type (
|
|
CompanyMetadata map[string]string
|
|
|
|
ValidValue struct {
|
|
DisplayName string `json:"display_name"`
|
|
Value string `json:"value"`
|
|
}
|
|
|
|
/*
|
|
CompanyExtraFieldTemplate describes single
|
|
additional field of company additional fields template
|
|
*/
|
|
CompanyExtraFieldTemplate struct {
|
|
SystemName string `json:"system_name"`
|
|
DisplayName string `json:"display_name"`
|
|
Type FieldType `json:"type"`
|
|
Required bool `json:"required"`
|
|
MultipleChoice bool `json:"multiple_choice"`
|
|
ValidValues []ValidValue `json:"valid_values"`
|
|
}
|
|
|
|
/*
|
|
CompanyExtraFieldsTemplate describes additional fields
|
|
needed to integrate company
|
|
*/
|
|
CompanyExtraFieldsTemplate struct {
|
|
Fields []CompanyExtraFieldTemplate `json:"fields"`
|
|
}
|
|
|
|
/*
|
|
CompanyIntegrationInfo describes full metadata stored for company
|
|
*/
|
|
CompanyIntegrationInfo struct {
|
|
Metadata CompanyMetadata `json:"metadata"`
|
|
ExtraFieldsTemplate CompanyExtraFieldsTemplate `json:"template"`
|
|
}
|
|
)
|
|
|
|
func (m *CompanyMetadata) From(msg *dbtypes.CompanyMetadata) *CompanyMetadata {
|
|
if msg == nil {
|
|
return nil
|
|
}
|
|
|
|
for k, v := range *msg {
|
|
(*m)[k] = v
|
|
}
|
|
|
|
return m
|
|
}
|
|
|
|
func (t *CompanyExtraFieldsTemplate) From(msg *dbtypes.CompanyExtraFieldsTemplate) *CompanyExtraFieldsTemplate {
|
|
if msg == nil {
|
|
return nil
|
|
}
|
|
|
|
var res CompanyExtraFieldsTemplate
|
|
|
|
res.Fields = make([]CompanyExtraFieldTemplate, len(msg.Fields))
|
|
|
|
for i, v := range msg.Fields {
|
|
res.Fields[i] = CompanyExtraFieldTemplate{
|
|
SystemName: v.SystemName,
|
|
DisplayName: v.DisplayName,
|
|
Type: FieldType(v.Type),
|
|
Required: v.Required,
|
|
MultipleChoice: v.MultipleChoice,
|
|
ValidValues: make([]ValidValue, len(v.ValidValues)),
|
|
}
|
|
|
|
for j, vv := range v.ValidValues {
|
|
res.Fields[i].ValidValues[j] = ValidValue{
|
|
DisplayName: vv.DisplayName,
|
|
Value: vv.Value,
|
|
}
|
|
}
|
|
}
|
|
|
|
return &res
|
|
}
|
|
|
|
type (
|
|
/*
|
|
VacancyExtraField describes single filled
|
|
additional field of vacancy additional fields
|
|
*/
|
|
VacancyExtraField struct {
|
|
SystemName string `json:"system_name"`
|
|
Type FieldType `json:"type"`
|
|
MultipleChoice bool `json:"multiple_choice"`
|
|
IsValidValue bool `json:"is_valid_value"`
|
|
Value []string `json:"value"`
|
|
}
|
|
|
|
/*
|
|
VacancyExtraFields describes additional fields
|
|
filled during vacancy creation
|
|
*/
|
|
VacancyExtraFields struct {
|
|
Fields []VacancyExtraField `json:"fields"`
|
|
}
|
|
|
|
/*
|
|
VacancyIntegrationInfo describes full metadata stored for vacancy
|
|
*/
|
|
VacancyIntegrationInfo struct {
|
|
CompanyId string `json:"company_id"`
|
|
ExtraFields VacancyExtraFields `json:"extra_fields"`
|
|
}
|
|
)
|
|
|
|
func (f *VacancyExtraField) From(msg *dbtypes.VacancyExtraFieldTemplate) *VacancyExtraField {
|
|
if msg == nil {
|
|
return nil
|
|
}
|
|
|
|
res := VacancyExtraField{
|
|
SystemName: msg.SystemName,
|
|
Type: FieldType(msg.Type),
|
|
IsValidValue: msg.IsValidValue,
|
|
Value: msg.Value,
|
|
}
|
|
|
|
return &res
|
|
}
|
|
|
|
func (f *VacancyExtraFields) From(msg *dbtypes.VacancyExtraFieldsTemplate) *VacancyExtraFields {
|
|
if msg == nil {
|
|
return nil
|
|
}
|
|
|
|
var res VacancyExtraFields
|
|
|
|
res.Fields = make([]VacancyExtraField, len(msg.Fields))
|
|
|
|
for i, v := range msg.Fields {
|
|
res.Fields[i] = *new(VacancyExtraField).From(&v)
|
|
}
|
|
|
|
return &res
|
|
}
|
|
|
|
const (
|
|
companyNameMetadataKey = "company_name"
|
|
|
|
VkusvillCompanyName = "vkusvill"
|
|
)
|