diff --git a/backend/internal/api/dto.go b/backend/internal/api/dto.go index 98163bba..0808cced 100644 --- a/backend/internal/api/dto.go +++ b/backend/internal/api/dto.go @@ -20,15 +20,6 @@ type apiPermissionResponseDto struct { Description *string `json:"description,omitempty"` } -// apiListItemDto is the lightweight representation used in list responses -type apiListItemDto struct { - ID string `json:"id"` - Name string `json:"name"` - Resource string `json:"resource"` - CreatedAt datatype.DateTime `json:"createdAt"` - PermissionCount int `json:"permissionCount"` -} - // apiCreateDto is the payload for creating an API // The resource identifier is only accepted here because changing it later would invalidate every token already minted for the API type apiCreateDto struct { diff --git a/backend/internal/api/handler.go b/backend/internal/api/handler.go index 1da33ccd..c4e588f8 100644 --- a/backend/internal/api/handler.go +++ b/backend/internal/api/handler.go @@ -39,19 +39,18 @@ func (h *handler) list(c *gin.Context) { return } - items := make([]apiListItemDto, len(apis)) + items := make([]apiResponseDto, len(apis)) for i, api := range apis { - var item apiListItemDto + var item apiResponseDto if err := dto.MapStruct(api, &item); err != nil { _ = c.Error(err) return } item.Resource = api.Audience - item.PermissionCount = len(api.Permissions) items[i] = item } - c.JSON(http.StatusOK, dto.Paginated[apiListItemDto]{ + c.JSON(http.StatusOK, dto.Paginated[apiResponseDto]{ Data: items, Pagination: pagination, }) diff --git a/frontend/src/lib/services/apis-service.ts b/frontend/src/lib/services/apis-service.ts index 29789722..07a525d9 100644 --- a/frontend/src/lib/services/apis-service.ts +++ b/frontend/src/lib/services/apis-service.ts @@ -1,7 +1,6 @@ import type { Api, ApiCreate, - ApiListItem, ApiPermissionInput, ApiUpdate, ClientApiAccess @@ -12,12 +11,12 @@ import APIService from './api-service'; export default class ApisService extends APIService { list = async (options?: ListRequestOptions) => { const res = await this.api.get('/apis', { params: options }); - return res.data as Paginated; + return res.data as Paginated; }; listAll = async () => { const res = await this.api.get('/apis', { params: { pagination: { page: 1, limit: 1000 } } }); - return (res.data as Paginated).data; + return (res.data as Paginated).data; }; get = async (id: string) => { diff --git a/frontend/src/lib/types/api.type.ts b/frontend/src/lib/types/api.type.ts index 7f03a29e..e71018a5 100644 --- a/frontend/src/lib/types/api.type.ts +++ b/frontend/src/lib/types/api.type.ts @@ -13,10 +13,6 @@ export type Api = { permissions: ApiPermission[]; }; -export type ApiListItem = Omit & { - permissionCount: number; -}; - export type ApiCreate = { name: string; resource: string; diff --git a/frontend/src/routes/settings/admin/apis/api-list.svelte b/frontend/src/routes/settings/admin/apis/api-list.svelte index 2f2310ac..48d1fb1b 100644 --- a/frontend/src/routes/settings/admin/apis/api-list.svelte +++ b/frontend/src/routes/settings/admin/apis/api-list.svelte @@ -8,26 +8,26 @@ AdvancedTableColumn, CreateAdvancedTableActions } from '$lib/types/advanced-table.type'; - import type { ApiListItem } from '$lib/types/api.type'; + import type { Api } from '$lib/types/api.type'; import { axiosErrorToast } from '$lib/utils/error-util'; import { LucidePencil, LucideTrash } from '@lucide/svelte'; import { toast } from 'svelte-sonner'; const apisService = new ApisService(); - let tableRef: AdvancedTable; + let tableRef: AdvancedTable; export function refresh() { return tableRef?.refresh(); } - const columns: AdvancedTableColumn[] = [ + const columns: AdvancedTableColumn[] = [ { label: 'ID', column: 'id', hidden: true }, { label: m.name(), column: 'name', sortable: true }, { label: m.api_resource(), column: 'resource', sortable: true }, - { label: m.api_permissions(), key: 'permissionCount', value: (item) => item.permissionCount } + { label: m.api_permissions(), key: 'permissions', value: (item) => item.permissions.length } ]; - const actions: CreateAdvancedTableActions = (api) => [ + const actions: CreateAdvancedTableActions = (api) => [ { label: m.edit(), primary: true, @@ -43,7 +43,7 @@ } ]; - async function deleteApi(api: ApiListItem) { + async function deleteApi(api: Api) { openConfirmDialog({ title: m.delete_name({ name: api.name }), message: m.are_you_sure_you_want_to_delete_this_api(), diff --git a/frontend/src/routes/settings/admin/oidc-clients/[id]/api-access-card.svelte b/frontend/src/routes/settings/admin/oidc-clients/[id]/api-access-card.svelte index 914034d9..3f7eb7dc 100644 --- a/frontend/src/routes/settings/admin/oidc-clients/[id]/api-access-card.svelte +++ b/frontend/src/routes/settings/admin/oidc-clients/[id]/api-access-card.svelte @@ -30,7 +30,7 @@ apisService.listAll(), apisService.getClientAccess(clientId) ]); - apis = await Promise.all(list.map((a) => apisService.get(a.id))); + apis = list; userSelected = new Set(access.userDelegatedPermissionIds); clientSelected = new Set(access.clientPermissionIds); } catch (e) {