Files
geo/server/internal/tenant/repository/template_repo.go
T

109 lines
3.3 KiB
Go
Raw Normal View History

package repository
import (
"context"
"time"
"github.com/geo-platform/tenant-api/internal/tenant/prompts"
"github.com/geo-platform/tenant-api/internal/tenant/repository/generated"
)
type TemplateRecord struct {
ID int64
Scope string
TenantID *int64
OriginType string
TemplateKey string
TemplateName string
PromptTemplate *string
PromptVisibility string
ProtectedPromptAssetKey *string
CardConfigJSON []byte
Status string
VersionNo int
CreatedAt time.Time
UpdatedAt time.Time
}
type TemplateRepository interface {
ListTemplates(ctx context.Context, tenantID int64) ([]TemplateRecord, error)
GetTemplateByID(ctx context.Context, id, tenantID int64) (*TemplateRecord, error)
}
type templateRepository struct {
q generated.Querier
}
func NewTemplateRepository(db generated.DBTX) TemplateRepository {
return &templateRepository{q: newQuerier(db)}
}
func (r *templateRepository) ListTemplates(ctx context.Context, tenantID int64) ([]TemplateRecord, error) {
rows, err := r.q.ListTemplates(ctx, tenantID)
if err != nil {
return nil, err
}
templates := make([]TemplateRecord, 0, len(rows))
for _, row := range rows {
templates = append(templates, TemplateRecord{
ID: row.ID,
Scope: row.Scope,
TenantID: nullableInt64(row.TenantID),
OriginType: row.OriginType,
TemplateKey: row.TemplateKey,
TemplateName: row.TemplateName,
PromptTemplate: nullableText(row.PromptTemplate),
PromptVisibility: row.PromptVisibility,
CardConfigJSON: row.CardConfigJson,
Status: row.Status,
VersionNo: int(row.VersionNo),
CreatedAt: timeFromTimestamp(row.CreatedAt),
UpdatedAt: timeFromTimestamp(row.UpdatedAt),
})
applyPlatformTemplatePromptOverrides(&templates[len(templates)-1])
}
return templates, nil
}
func (r *templateRepository) GetTemplateByID(ctx context.Context, id, tenantID int64) (*TemplateRecord, error) {
row, err := r.q.GetTemplateByID(ctx, generated.GetTemplateByIDParams{
ID: id,
TenantID: tenantID,
})
if err != nil {
return nil, err
}
record := &TemplateRecord{
ID: row.ID,
Scope: row.Scope,
TenantID: nullableInt64(row.TenantID),
OriginType: row.OriginType,
TemplateKey: row.TemplateKey,
TemplateName: row.TemplateName,
PromptTemplate: nullableText(row.PromptTemplate),
PromptVisibility: row.PromptVisibility,
ProtectedPromptAssetKey: nullableText(row.ProtectedPromptAssetKey),
CardConfigJSON: row.CardConfigJson,
Status: row.Status,
VersionNo: int(row.VersionNo),
CreatedAt: timeFromTimestamp(row.CreatedAt),
UpdatedAt: timeFromTimestamp(row.UpdatedAt),
}
applyPlatformTemplatePromptOverrides(record)
return record, nil
}
func applyPlatformTemplatePromptOverrides(record *TemplateRecord) {
if record == nil || record.Scope != "platform" {
return
}
record.PromptTemplate, record.CardConfigJSON = prompts.ApplyPlatformTemplatePromptOverrides(
record.TemplateKey,
record.PromptTemplate,
record.CardConfigJSON,
)
}