@@ -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
164165func (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