75 lines
2.2 KiB
Go
75 lines
2.2 KiB
Go
package aiprompts
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/descrybe/descrybe-v2/apps/api/internal/company"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// productEnhanceUpsertLanguages returns ISO 639-1 codes to store product_enhance
|
|
// under. Never returns LangPromptAny ("*") — ai_prompt_templates.language has
|
|
// CHECK (language ~ '^[a-z]{2}$'). Categories.prompt JSON may still use "*".
|
|
func productEnhanceUpsertLanguages(contentLangs []string, primary string) []string {
|
|
primary = company.NormalizeLanguage(primary)
|
|
if primary == "" || primary == company.LangPromptAny || !company.IsAllowedLanguage(primary) {
|
|
primary = company.DefaultLanguage
|
|
}
|
|
out := make([]string, 0, len(contentLangs)+1)
|
|
seen := map[string]struct{}{}
|
|
add := func(code string) {
|
|
code = company.NormalizeLanguage(code)
|
|
if code == "" || code == company.LangPromptAny || !company.IsAllowedLanguage(code) {
|
|
return
|
|
}
|
|
if _, ok := seen[code]; ok {
|
|
return
|
|
}
|
|
seen[code] = struct{}{}
|
|
out = append(out, code)
|
|
}
|
|
add(primary)
|
|
for _, lang := range contentLangs {
|
|
add(lang)
|
|
}
|
|
if len(out) == 0 {
|
|
return []string{company.DefaultLanguage}
|
|
}
|
|
return out
|
|
}
|
|
|
|
// ApplyBuiltInProductEnhance upserts BuiltInDefaults for product_enhance under
|
|
// the company primary language and each content language. Templates still use
|
|
// {{language}} at render time; Resolve falls back requested → primary → built-in.
|
|
// Do not store LangPromptAny ("*") in ai_prompt_templates (DB language CHECK).
|
|
func (s *Service) ApplyBuiltInProductEnhance(ctx context.Context, companyID uuid.UUID) (languagesApplied int, err error) {
|
|
def, ok := DefaultFor(KeyProductEnhance)
|
|
if !ok {
|
|
return 0, ErrInvalidKey
|
|
}
|
|
primary := company.LoadLanguage(ctx, s.Pool, companyID)
|
|
langs := productEnhanceUpsertLanguages(
|
|
company.LoadContentLanguages(ctx, s.Pool, companyID),
|
|
primary,
|
|
)
|
|
enabled := true
|
|
items := make([]UpdateItem, 0, len(langs))
|
|
for _, lang := range langs {
|
|
items = append(items, UpdateItem{
|
|
Key: KeyProductEnhance,
|
|
Language: lang,
|
|
SystemTemplate: def.SystemTemplate,
|
|
UserTemplate: def.UserTemplate,
|
|
IsEnabled: &enabled,
|
|
})
|
|
}
|
|
_, err = s.Update(ctx, companyID, UpdateInput{
|
|
Language: langs[0],
|
|
Prompts: items,
|
|
})
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return len(langs), nil
|
|
}
|