72 lines
2.7 KiB
Go
72 lines
2.7 KiB
Go
|
|
package domain
|
||
|
|
|
||
|
|
import (
|
||
|
|
"strings"
|
||
|
|
)
|
||
|
|
|
||
|
|
type DemandMapPhrase struct {
|
||
|
|
Text string `bson:"text" json:"text"`
|
||
|
|
Kind string `bson:"kind" json:"kind"`
|
||
|
|
BasisKind string `bson:"basis_kind,omitempty" json:"basis_kind,omitempty"`
|
||
|
|
BasisText string `bson:"basis_text,omitempty" json:"basis_text,omitempty"`
|
||
|
|
Origin string `bson:"origin" json:"origin"`
|
||
|
|
Enabled bool `bson:"enabled" json:"enabled"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type DemandMap struct {
|
||
|
|
ID string `bson:"_id" json:"id"`
|
||
|
|
OwnerUID int64 `bson:"owner_uid" json:"owner_uid"`
|
||
|
|
ProductID string `bson:"product_id" json:"product_id"`
|
||
|
|
DemandInputVersion string `bson:"demand_input_version" json:"demand_input_version"`
|
||
|
|
MapVersion int64 `bson:"map_version" json:"map_version"`
|
||
|
|
State string `bson:"state" json:"state"`
|
||
|
|
PainPhrases []DemandMapPhrase `bson:"pain_phrases" json:"pain_phrases"`
|
||
|
|
ScenarioPhrases []DemandMapPhrase `bson:"scenario_phrases" json:"scenario_phrases"`
|
||
|
|
DesiredOutcomes []DemandMapPhrase `bson:"desired_outcomes" json:"desired_outcomes"`
|
||
|
|
SolutionSignals []DemandMapPhrase `bson:"solution_signals" json:"solution_signals"`
|
||
|
|
ExclusionSignals []DemandMapPhrase `bson:"exclusion_signals" json:"exclusion_signals"`
|
||
|
|
SourceBasis []string `bson:"source_basis" json:"source_basis"`
|
||
|
|
CustomPhrases []DemandMapPhrase `bson:"custom_phrases" json:"custom_phrases"`
|
||
|
|
AIEnrichedAt int64 `bson:"ai_enriched_at,omitempty" json:"ai_enriched_at,omitempty"`
|
||
|
|
UpdatedAt int64 `bson:"updated_at" json:"updated_at"`
|
||
|
|
}
|
||
|
|
|
||
|
|
func (m *DemandMap) Normalize() error {
|
||
|
|
if m.OwnerUID <= 0 || strings.TrimSpace(m.ProductID) == "" || strings.TrimSpace(m.DemandInputVersion) == "" {
|
||
|
|
return ErrValidation
|
||
|
|
}
|
||
|
|
if m.MapVersion < 1 {
|
||
|
|
m.MapVersion = 1
|
||
|
|
}
|
||
|
|
if m.State != "ready" && m.State != "incomplete" && m.State != "stale" {
|
||
|
|
return ErrValidation
|
||
|
|
}
|
||
|
|
for i := range m.PainPhrases {
|
||
|
|
normalizeDemandPhrase(&m.PainPhrases[i])
|
||
|
|
}
|
||
|
|
for i := range m.ScenarioPhrases {
|
||
|
|
normalizeDemandPhrase(&m.ScenarioPhrases[i])
|
||
|
|
}
|
||
|
|
for i := range m.DesiredOutcomes {
|
||
|
|
normalizeDemandPhrase(&m.DesiredOutcomes[i])
|
||
|
|
}
|
||
|
|
for i := range m.SolutionSignals {
|
||
|
|
normalizeDemandPhrase(&m.SolutionSignals[i])
|
||
|
|
}
|
||
|
|
for i := range m.ExclusionSignals {
|
||
|
|
normalizeDemandPhrase(&m.ExclusionSignals[i])
|
||
|
|
}
|
||
|
|
for i := range m.CustomPhrases {
|
||
|
|
normalizeDemandPhrase(&m.CustomPhrases[i])
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func normalizeDemandPhrase(p *DemandMapPhrase) {
|
||
|
|
p.Text = strings.TrimSpace(p.Text)
|
||
|
|
p.Kind = strings.TrimSpace(p.Kind)
|
||
|
|
p.BasisKind = strings.TrimSpace(p.BasisKind)
|
||
|
|
p.BasisText = strings.TrimSpace(p.BasisText)
|
||
|
|
p.Origin = strings.TrimSpace(p.Origin)
|
||
|
|
}
|