Skip to content

Commit e0e1325

Browse files
fix(preference): update legacy handlers to return ValueTitle and InputOptions
- Add ValueTitle, ScopeType, ScopeId to transformPreferenceToPB - Add InputOptions to transformPreferenceTraitToPB - Update ListUserPreferences and ListCurrentUserPreferences to use LoadUserPreferences for consistent behavior with ConnectRPC handlers - Add LoadUserPreferences to PreferenceService interface Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent a058cdf commit e0e1325

2 files changed

Lines changed: 88 additions & 4 deletions

File tree

internal/api/v1beta1/mocks/preference_service.go

Lines changed: 59 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/api/v1beta1/preferences.go

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ type PreferenceService interface {
1616
Create(ctx context.Context, preference preference.Preference) (preference.Preference, error)
1717
Describe(ctx context.Context) []preference.Trait
1818
List(ctx context.Context, filter preference.Filter) ([]preference.Preference, error)
19+
LoadUserPreferences(ctx context.Context, filter preference.Filter) ([]preference.Preference, error)
1920
LoadPlatformPreferences(ctx context.Context) (map[string]string, error)
2021
}
2122

@@ -162,8 +163,14 @@ func (h Handler) CreateUserPreferences(ctx context.Context, request *frontierv1b
162163
}
163164

164165
func (h Handler) ListUserPreferences(ctx context.Context, request *frontierv1beta1.ListUserPreferencesRequest) (*frontierv1beta1.ListUserPreferencesResponse, error) {
165-
prefs, err := h.preferenceService.List(ctx, preference.Filter{
166-
UserID: request.GetId(),
166+
// LoadUserPreferences returns complete preference set with priority:
167+
// 1. Scoped DB values (if scope provided)
168+
// 2. Global DB values
169+
// 3. Trait defaults
170+
prefs, err := h.preferenceService.LoadUserPreferences(ctx, preference.Filter{
171+
UserID: request.GetId(),
172+
ScopeType: request.GetScopeType(),
173+
ScopeID: request.GetScopeId(),
167174
})
168175
if err != nil {
169176
return nil, status.Errorf(codes.Internal, err.Error())
@@ -217,8 +224,14 @@ func (h Handler) ListCurrentUserPreferences(ctx context.Context, request *fronti
217224
if err != nil {
218225
return nil, err
219226
}
220-
prefs, err := h.preferenceService.List(ctx, preference.Filter{
221-
UserID: principal.ID,
227+
// LoadUserPreferences returns complete preference set with priority:
228+
// 1. Scoped DB values (if scope provided)
229+
// 2. Global DB values
230+
// 3. Trait defaults
231+
prefs, err := h.preferenceService.LoadUserPreferences(ctx, preference.Filter{
232+
UserID: principal.ID,
233+
ScopeType: request.GetScopeType(),
234+
ScopeID: request.GetScopeId(),
222235
})
223236
if err != nil {
224237
return nil, status.Errorf(codes.Internal, err.Error())
@@ -242,8 +255,11 @@ func transformPreferenceToPB(pref preference.Preference) *frontierv1beta1.Prefer
242255
Id: pref.ID,
243256
Name: pref.Name,
244257
Value: pref.Value,
258+
ValueTitle: pref.ValueTitle,
245259
ResourceId: pref.ResourceID,
246260
ResourceType: pref.ResourceType,
261+
ScopeType: pref.ScopeType,
262+
ScopeId: pref.ScopeID,
247263
CreatedAt: timestamppb.New(pref.CreatedAt),
248264
UpdatedAt: timestamppb.New(pref.UpdatedAt),
249265
}
@@ -262,6 +278,15 @@ func transformPreferenceTraitToPB(pref preference.Trait) *frontierv1beta1.Prefer
262278
InputHints: pref.InputHints,
263279
Default: pref.Default,
264280
}
281+
282+
// Convert InputOptions to proto
283+
for _, opt := range pref.InputOptions {
284+
pbTrait.InputOptions = append(pbTrait.InputOptions, &frontierv1beta1.InputHintOption{
285+
Name: opt.Name,
286+
Title: opt.Title,
287+
})
288+
}
289+
265290
switch pref.Input {
266291
case preference.TraitInputText:
267292
pbTrait.InputType = frontierv1beta1.PreferenceTrait_INPUT_TYPE_TEXT

0 commit comments

Comments
 (0)