Skip to content

Commit a158acc

Browse files
authored
Adjust openapi for SavedSearchResponse (#1267)
This change optionally returns bookmark status and role (if the user is authenticated) when looking at a single or list of saved searches. This data was already being returned by spanner but being discarded. This change modifies the adapter layer to read that data and return the bookmark status and role.
1 parent 966bfff commit a158acc

File tree

5 files changed

+114
-58
lines changed

5 files changed

+114
-58
lines changed

backend/pkg/httpserver/create_saved_search_test.go

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,14 @@ func TestCreateSavedSearch(t *testing.T) {
257257
Name: "test name",
258258
Query: `name:"test"`,
259259
Description: nil,
260-
CreatedAt: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC),
261-
UpdatedAt: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC),
260+
Permissions: &backend.UserSavedSearchPermissions{
261+
Role: valuePtr(backend.SavedSearchOwner),
262+
},
263+
BookmarkStatus: &backend.UserSavedSearchBookmark{
264+
Status: backend.BookmarkActive,
265+
},
266+
CreatedAt: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC),
267+
UpdatedAt: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC),
262268
},
263269
err: nil,
264270
},
@@ -274,7 +280,9 @@ func TestCreateSavedSearch(t *testing.T) {
274280
"id":"searchID1",
275281
"name":"test name",
276282
"query":"name:\"test\"",
277-
"updated_at":"2000-01-01T00:00:00Z"
283+
"updated_at":"2000-01-01T00:00:00Z",
284+
"bookmark_status":{"status":"bookmark_active"},
285+
"permissions":{"role":"saved_search_owner"}
278286
}`,
279287
),
280288
},
@@ -292,8 +300,14 @@ func TestCreateSavedSearch(t *testing.T) {
292300
Name: "test name",
293301
Query: `name:"test"`,
294302
Description: valuePtr("test description"),
295-
CreatedAt: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC),
296-
UpdatedAt: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC),
303+
Permissions: &backend.UserSavedSearchPermissions{
304+
Role: valuePtr(backend.SavedSearchOwner),
305+
},
306+
BookmarkStatus: &backend.UserSavedSearchBookmark{
307+
Status: backend.BookmarkActive,
308+
},
309+
CreatedAt: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC),
310+
UpdatedAt: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC),
297311
},
298312
err: nil,
299313
},
@@ -316,7 +330,9 @@ func TestCreateSavedSearch(t *testing.T) {
316330
"name":"test name",
317331
"description" : "test description",
318332
"query":"name:\"test\"",
319-
"updated_at":"2000-01-01T00:00:00Z"
333+
"updated_at":"2000-01-01T00:00:00Z",
334+
"bookmark_status":{"status":"bookmark_active"},
335+
"permissions":{"role":"saved_search_owner"}
320336
}`,
321337
),
322338
},

backend/pkg/httpserver/list_saved_searches.go

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,34 @@ func getSavedSearches() []backend.SavedSearchResponse {
2626

2727
return []backend.SavedSearchResponse{
2828
{
29-
CreatedAt: time.Date(2024, time.September, 1, 1, 0, 0, 0, time.UTC),
30-
UpdatedAt: time.Date(2024, time.September, 1, 1, 0, 0, 0, time.UTC),
31-
Description: &test1Description,
32-
Id: "1",
33-
Name: "a query I subscribe to",
34-
Query: "group:css",
29+
CreatedAt: time.Date(2024, time.September, 1, 1, 0, 0, 0, time.UTC),
30+
UpdatedAt: time.Date(2024, time.September, 1, 1, 0, 0, 0, time.UTC),
31+
Description: &test1Description,
32+
Id: "1",
33+
Name: "a query I subscribe to",
34+
Query: "group:css",
35+
BookmarkStatus: nil,
36+
Permissions: nil,
3537
},
3638
{
37-
CreatedAt: time.Date(2024, time.September, 1, 1, 0, 0, 0, time.UTC),
38-
UpdatedAt: time.Date(2024, time.September, 1, 1, 0, 0, 0, time.UTC),
39-
Description: nil,
40-
Id: "2",
41-
Name: "my personal query",
42-
Query: "available_on:chrome AND group:css",
39+
CreatedAt: time.Date(2024, time.September, 1, 1, 0, 0, 0, time.UTC),
40+
UpdatedAt: time.Date(2024, time.September, 1, 1, 0, 0, 0, time.UTC),
41+
Description: nil,
42+
Id: "2",
43+
Name: "my personal query",
44+
Query: "available_on:chrome AND group:css",
45+
BookmarkStatus: nil,
46+
Permissions: nil,
4347
},
4448
{
45-
CreatedAt: time.Date(2024, time.September, 1, 1, 0, 0, 0, time.UTC),
46-
UpdatedAt: time.Date(2024, time.September, 1, 1, 0, 0, 0, time.UTC),
47-
Description: nil,
48-
Id: "3",
49-
Name: "a new query",
50-
Query: "available_on:chrome",
49+
CreatedAt: time.Date(2024, time.September, 1, 1, 0, 0, 0, time.UTC),
50+
UpdatedAt: time.Date(2024, time.September, 1, 1, 0, 0, 0, time.UTC),
51+
Description: nil,
52+
Id: "3",
53+
Name: "a new query",
54+
Query: "available_on:chrome",
55+
BookmarkStatus: nil,
56+
Permissions: nil,
5157
},
5258
}
5359
}

lib/gcpspanner/spanneradapters/backend.go

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -391,15 +391,48 @@ func (s *Backend) CreateUserSavedSearch(ctx context.Context, userID string,
391391
}
392392

393393
return &backend.SavedSearchResponse{
394-
Id: *output,
395-
CreatedAt: createdSavedSearch.CreatedAt,
396-
UpdatedAt: createdSavedSearch.UpdatedAt,
397-
Name: createdSavedSearch.Name,
398-
Query: createdSavedSearch.Query,
399-
Description: createdSavedSearch.Description,
394+
Id: *output,
395+
CreatedAt: createdSavedSearch.CreatedAt,
396+
UpdatedAt: createdSavedSearch.UpdatedAt,
397+
Name: createdSavedSearch.Name,
398+
Query: createdSavedSearch.Query,
399+
Description: createdSavedSearch.Description,
400+
BookmarkStatus: convertSavedSearchIsBookmarkedFromGCP(createdSavedSearch.IsBookmarked),
401+
Permissions: convertSavedSearchRoleFromGCP(createdSavedSearch.Role),
400402
}, nil
401403
}
402404

405+
func convertSavedSearchIsBookmarkedFromGCP(isBookmarked *bool) *backend.UserSavedSearchBookmark {
406+
if isBookmarked == nil {
407+
return nil
408+
}
409+
410+
status := backend.BookmarkNone
411+
if *isBookmarked {
412+
status = backend.BookmarkActive
413+
}
414+
415+
return &backend.UserSavedSearchBookmark{
416+
Status: status,
417+
}
418+
}
419+
420+
// Roles can be found in lib/gcpspanner/saved_search_user_roles.go.
421+
func convertSavedSearchRoleFromGCP(role *string) *backend.UserSavedSearchPermissions {
422+
if role == nil {
423+
return nil
424+
}
425+
426+
switch gcpspanner.SavedSearchRole(*role) {
427+
case gcpspanner.SavedSearchOwner:
428+
return &backend.UserSavedSearchPermissions{
429+
Role: valuePtr(backend.SavedSearchOwner),
430+
}
431+
}
432+
433+
return nil
434+
}
435+
403436
func (s *Backend) DeleteUserSavedSearch(ctx context.Context, userID, savedSearchID string) error {
404437
err := s.client.DeleteUserSavedSearch(ctx, gcpspanner.DeleteUserSavedSearchRequest{
405438
SavedSearchID: savedSearchID,

lib/gcpspanner/spanneradapters/backend_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1466,6 +1466,12 @@ func TestCreateUserSavedSearch(t *testing.T) {
14661466
Name: "test search",
14671467
Description: valuePtr("test description"),
14681468
Query: "test query",
1469+
Permissions: &backend.UserSavedSearchPermissions{
1470+
Role: valuePtr(backend.SavedSearchOwner),
1471+
},
1472+
BookmarkStatus: &backend.UserSavedSearchBookmark{
1473+
Status: backend.BookmarkActive,
1474+
},
14691475
},
14701476
expectedError: nil,
14711477
},

openapi/backend/openapi.yaml

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -568,28 +568,6 @@ paths:
568568
parameters:
569569
- $ref: '#/components/parameters/paginationTokenParam'
570570
- $ref: '#/components/parameters/paginationSizeParam'
571-
- in: query
572-
name: role
573-
schema:
574-
type: string
575-
enum:
576-
- owner
577-
description: Filter by role (currently only 'owner' is supported).
578-
- in: query
579-
name: bookmark_status
580-
schema:
581-
type: string
582-
enum:
583-
- active
584-
description: Filter by bookmark status (currently only 'active' is supported).
585-
- in: query
586-
name: sort
587-
schema:
588-
type: string
589-
enum:
590-
- search_updated_at_asc
591-
- search_updated_at_desc
592-
description: Sort order to apply to the results.
593571
security:
594572
- bearerAuth:
595573
responses:
@@ -1264,22 +1242,39 @@ components:
12641242
query:
12651243
type: string
12661244
minLength: 1
1245+
UserSavedSearchBookmarkStatus:
1246+
type: string
1247+
description: |
1248+
The bookmark status for a saved search for a user.
1249+
enum:
1250+
- bookmark_none
1251+
- bookmark_active
12671252
UserSavedSearchBookmark:
12681253
type: object
12691254
properties:
12701255
status:
1271-
type: string
1272-
description: |
1273-
The bookmark status for a saved search for a user.
1274-
enum:
1275-
- none
1276-
- active
1256+
$ref: '#/components/schemas/UserSavedSearchBookmarkStatus'
12771257
required:
12781258
- status
12791259
SavedSearchResponse:
12801260
allOf:
12811261
- $ref: '#/components/schemas/GenericUpdatableUniqueModel'
12821262
- $ref: '#/components/schemas/SavedSearch'
1263+
- type: object
1264+
properties:
1265+
permissions:
1266+
$ref: '#/components/schemas/UserSavedSearchPermissions'
1267+
bookmark_status:
1268+
$ref: '#/components/schemas/UserSavedSearchBookmark'
1269+
UserSavedSearchRole:
1270+
type: string
1271+
enum:
1272+
- saved_search_owner
1273+
UserSavedSearchPermissions:
1274+
type: object
1275+
properties:
1276+
role:
1277+
$ref: '#/components/schemas/UserSavedSearchRole'
12831278
UserSavedSearchPage:
12841279
type: object
12851280
properties:

0 commit comments

Comments
 (0)