From 4ba769a49e9427fd52fb7fcbf061f7a2a6a005fe Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 20 Aug 2024 13:49:12 +0200 Subject: [PATCH] updated space api endpoint to list all spaces + addtional /current/ endpoint --- cookbook/serializer.py | 1 + cookbook/views/api.py | 8 ++++++- vue3/src/openapi/apis/ApiApi.ts | 28 +++++++++++++++++++++++++ vue3/src/openapi/models/PatchedSpace.ts | 12 ++++++++--- vue3/src/openapi/models/Space.ts | 12 ++++++++--- 5 files changed, 54 insertions(+), 7 deletions(-) diff --git a/cookbook/serializer.py b/cookbook/serializer.py index a941f3e8d..0100d2f60 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -312,6 +312,7 @@ class UserFileViewSerializer(serializers.ModelSerializer): class SpaceSerializer(WritableNestedModelSerializer): + created_by = UserSerializer(read_only=True) user_count = serializers.SerializerMethodField('get_user_count') recipe_count = serializers.SerializerMethodField('get_recipe_count') file_size_mb = serializers.SerializerMethodField('get_file_size_mb') diff --git a/cookbook/views/api.py b/cookbook/views/api.py index f4b2e4fe8..4f8e0233b 100644 --- a/cookbook/views/api.py +++ b/cookbook/views/api.py @@ -422,7 +422,13 @@ class SpaceViewSet(viewsets.ModelViewSet): http_method_names = ['get', 'patch'] def get_queryset(self): - return self.queryset.filter(id=self.request.space.id) + return self.queryset.filter(id__in=UserSpace.objects.filter(user=self.request.user)) + + @extend_schema(responses=SpaceSerializer(many=False)) + @decorators.action(detail=False, pagination_class=None, methods=['GET'], serializer_class=SpaceSerializer, ) + def current(self, request): + self.queryset.filter(id=self.request.space.id) + return Response(self.serializer_class(self.request.space, many=False).data) # TODO what is internal_note for? diff --git a/vue3/src/openapi/apis/ApiApi.ts b/vue3/src/openapi/apis/ApiApi.ts index 62b02f5e2..de5670439 100644 --- a/vue3/src/openapi/apis/ApiApi.ts +++ b/vue3/src/openapi/apis/ApiApi.ts @@ -9300,6 +9300,34 @@ export class ApiApi extends runtime.BaseAPI { return await response.value(); } + /** + */ + async apiSpaceCurrentRetrieveRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/space/current/`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => SpaceFromJSON(jsonValue)); + } + + /** + */ + async apiSpaceCurrentRetrieve(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiSpaceCurrentRetrieveRaw(initOverrides); + return await response.value(); + } + /** */ async apiSpaceListRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { diff --git a/vue3/src/openapi/models/PatchedSpace.ts b/vue3/src/openapi/models/PatchedSpace.ts index 713b11490..2dfd793aa 100644 --- a/vue3/src/openapi/models/PatchedSpace.ts +++ b/vue3/src/openapi/models/PatchedSpace.ts @@ -31,6 +31,12 @@ import { SpaceThemeEnumFromJSONTyped, SpaceThemeEnumToJSON, } from './SpaceThemeEnum'; +import type { User } from './User'; +import { + UserFromJSON, + UserFromJSONTyped, + UserToJSON, +} from './User'; import type { UserFileView } from './UserFileView'; import { UserFileViewFromJSON, @@ -58,10 +64,10 @@ export interface PatchedSpace { name?: string; /** * - * @type {number} + * @type {User} * @memberof PatchedSpace */ - readonly createdBy?: number; + readonly createdBy?: User; /** * * @type {Date} @@ -227,7 +233,7 @@ export function PatchedSpaceFromJSONTyped(json: any, ignoreDiscriminator: boolea 'id': json['id'] == null ? undefined : json['id'], 'name': json['name'] == null ? undefined : json['name'], - 'createdBy': json['created_by'] == null ? undefined : json['created_by'], + 'createdBy': json['created_by'] == null ? undefined : UserFromJSON(json['created_by']), 'createdAt': json['created_at'] == null ? undefined : (new Date(json['created_at'])), 'message': json['message'] == null ? undefined : json['message'], 'maxRecipes': json['max_recipes'] == null ? undefined : json['max_recipes'], diff --git a/vue3/src/openapi/models/Space.ts b/vue3/src/openapi/models/Space.ts index 9ad773da2..8375a85a3 100644 --- a/vue3/src/openapi/models/Space.ts +++ b/vue3/src/openapi/models/Space.ts @@ -31,6 +31,12 @@ import { SpaceThemeEnumFromJSONTyped, SpaceThemeEnumToJSON, } from './SpaceThemeEnum'; +import type { User } from './User'; +import { + UserFromJSON, + UserFromJSONTyped, + UserToJSON, +} from './User'; import type { UserFileView } from './UserFileView'; import { UserFileViewFromJSON, @@ -58,10 +64,10 @@ export interface Space { name?: string; /** * - * @type {number} + * @type {User} * @memberof Space */ - readonly createdBy: number | null; + readonly createdBy: User; /** * * @type {Date} @@ -238,7 +244,7 @@ export function SpaceFromJSONTyped(json: any, ignoreDiscriminator: boolean): Spa 'id': json['id'] == null ? undefined : json['id'], 'name': json['name'] == null ? undefined : json['name'], - 'createdBy': json['created_by'], + 'createdBy': UserFromJSON(json['created_by']), 'createdAt': (new Date(json['created_at'])), 'message': json['message'] == null ? undefined : json['message'], 'maxRecipes': json['max_recipes'],