fixes
This commit is contained in:
@@ -87,8 +87,11 @@ func (s *Service) GetBundle(ctx context.Context, companyID uuid.UUID, language s
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Resolve returns the effective templates for one key + language
|
||||
// (custom if enabled for lang, else built-in). No cross-language company fallback.
|
||||
// Resolve returns the effective templates for one key + language.
|
||||
// Fallback: requested lang → "*" → company primary language → built-in.
|
||||
// Language on the result is always the requested (normalized) lang so {{language}}
|
||||
// still resolves to the content language being generated — templates are shared,
|
||||
// not duplicated per language.
|
||||
func (s *Service) Resolve(ctx context.Context, companyID uuid.UUID, key, language string) (Resolved, error) {
|
||||
if !ValidPromptKey(key) {
|
||||
return Resolved{}, ErrInvalidKey
|
||||
@@ -101,11 +104,19 @@ func (s *Service) Resolve(ctx context.Context, companyID uuid.UUID, key, languag
|
||||
if err != nil {
|
||||
lang = company.DefaultLanguage
|
||||
}
|
||||
st, err := s.loadOne(ctx, companyID, key, lang)
|
||||
if err != nil && !errors.Is(err, pgx.ErrNoRows) {
|
||||
return Resolved{}, err
|
||||
primary := company.LoadLanguage(ctx, s.Pool, companyID)
|
||||
candidates := []string{lang, company.LangPromptAny}
|
||||
if primary != "" && primary != lang && primary != company.LangPromptAny {
|
||||
candidates = append(candidates, primary)
|
||||
}
|
||||
if err == nil && st.isEnabled {
|
||||
for _, cand := range candidates {
|
||||
st, err := s.loadOne(ctx, companyID, key, cand)
|
||||
if err != nil && !errors.Is(err, pgx.ErrNoRows) {
|
||||
return Resolved{}, err
|
||||
}
|
||||
if err != nil || !st.isEnabled {
|
||||
continue
|
||||
}
|
||||
sys := strings.TrimSpace(st.systemTemplate)
|
||||
user := strings.TrimSpace(st.userTemplate)
|
||||
if sys == "" {
|
||||
@@ -155,9 +166,15 @@ func (s *Service) Update(ctx context.Context, companyID uuid.UUID, in UpdateInpu
|
||||
if langRaw == "" {
|
||||
langRaw = defaultLang
|
||||
}
|
||||
lang, err := company.ParseLanguage(langRaw, false)
|
||||
if err != nil {
|
||||
return Bundle{}, fmt.Errorf("%w: language %q", ErrInvalidInput, langRaw)
|
||||
var lang string
|
||||
if langRaw == company.LangPromptAny {
|
||||
lang = company.LangPromptAny
|
||||
} else {
|
||||
parsed, err := company.ParseLanguage(langRaw, false)
|
||||
if err != nil {
|
||||
return Bundle{}, fmt.Errorf("%w: language %q", ErrInvalidInput, langRaw)
|
||||
}
|
||||
lang = parsed
|
||||
}
|
||||
lastLang = lang
|
||||
if item.Reset {
|
||||
@@ -196,7 +213,11 @@ func (s *Service) Update(ctx context.Context, companyID uuid.UUID, in UpdateInpu
|
||||
if err := tx.Commit(ctx); err != nil {
|
||||
return Bundle{}, err
|
||||
}
|
||||
return s.GetBundle(ctx, companyID, lastLang)
|
||||
bundleLang := lastLang
|
||||
if bundleLang == company.LangPromptAny {
|
||||
bundleLang = defaultLang
|
||||
}
|
||||
return s.GetBundle(ctx, companyID, bundleLang)
|
||||
}
|
||||
|
||||
func (s *Service) loadAll(ctx context.Context, companyID uuid.UUID) ([]stored, error) {
|
||||
|
||||
Reference in New Issue
Block a user