1
This commit is contained in:
201
internal/integration/domain.go
Normal file
201
internal/integration/domain.go
Normal file
@@ -0,0 +1,201 @@
|
||||
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"
|
||||
)
|
Reference in New Issue
Block a user