Unverified Commit 25347eee authored by Alireza Heidari's avatar Alireza Heidari Committed by mvdbeek
Browse files

Refactors credentials API to include user credentials ID



Updates the credentials update and delete endpoints to require user credentials ID in the URL path, improving API consistency and enabling proper resource identification.

Modifies the PUT endpoint from `/credentials/group/{group_id}` to `/credentials/{user_credentials_id}/group/{group_id}` and updates the DELETE endpoint to include `/group/` segment for better REST API design.

Updates all related client code, tests, and API schema to handle the new endpoint structure with the additional user credentials ID parameter.

Co-authored-by: default avatarArash Kadkhodaei <arash77.kad@gmail.com>
parent 8ddd13ee
Loading
Loading
Loading
Loading
+22 −37
Original line number Diff line number Diff line
@@ -5194,23 +5194,6 @@ export interface paths {
        patch?: never;
        trace?: never;
    };
    "/api/users/{user_id}/credentials/group/{group_id}": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        /** Updates user credentials */
        put: operations["update_user_credentials_api_users__user_id__credentials_group__group_id__put"];
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/users/{user_id}/credentials/{user_credentials_id}": {
        parameters: {
            query?: never;
@@ -5228,7 +5211,7 @@ export interface paths {
        patch?: never;
        trace?: never;
    };
    "/api/users/{user_id}/credentials/{user_credentials_id}/{group_id}": {
    "/api/users/{user_id}/credentials/{user_credentials_id}/group/{group_id}": {
        parameters: {
            query?: never;
            header?: never;
@@ -5236,10 +5219,11 @@ export interface paths {
            cookie?: never;
        };
        get?: never;
        put?: never;
        /** Updates user credentials */
        put: operations["update_user_credentials_api_users__user_id__credentials__user_credentials_id__group__group_id__put"];
        post?: never;
        /** Deletes a specific credential */
        delete: operations["delete_credentials_api_users__user_id__credentials__user_credentials_id___group_id__delete"];
        /** Deletes a specific credential group */
        delete: operations["delete_credentials_api_users__user_id__credentials__user_credentials_id__group__group_id__delete"];
        options?: never;
        head?: never;
        patch?: never;
@@ -40472,7 +40456,7 @@ export interface operations {
            };
        };
    };
    update_user_credentials_api_users__user_id__credentials_group__group_id__put: {
    delete_service_credentials_api_users__user_id__credentials__user_credentials_id__delete: {
        parameters: {
            query?: never;
            header?: {
@@ -40481,24 +40465,18 @@ export interface operations {
            };
            path: {
                user_id: string | "current";
                group_id: string;
                user_credentials_id: string;
            };
            cookie?: never;
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["ServiceCredentialGroupPayload"];
            };
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
            204: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ServiceCredentialGroupResponse"];
                };
                content?: never;
            };
            /** @description Request Error */
            "4XX": {
@@ -40520,7 +40498,7 @@ export interface operations {
            };
        };
    };
    delete_service_credentials_api_users__user_id__credentials__user_credentials_id__delete: {
    update_user_credentials_api_users__user_id__credentials__user_credentials_id__group__group_id__put: {
        parameters: {
            query?: never;
            header?: {
@@ -40530,17 +40508,24 @@ export interface operations {
            path: {
                user_id: string | "current";
                user_credentials_id: string;
                group_id: string;
            };
            cookie?: never;
        };
        requestBody?: never;
        requestBody: {
            content: {
                "application/json": components["schemas"]["ServiceCredentialGroupPayload"];
            };
        };
        responses: {
            /** @description Successful Response */
            204: {
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content?: never;
                content: {
                    "application/json": components["schemas"]["ServiceCredentialGroupResponse"];
                };
            };
            /** @description Request Error */
            "4XX": {
@@ -40562,7 +40547,7 @@ export interface operations {
            };
        };
    };
    delete_credentials_api_users__user_id__credentials__user_credentials_id___group_id__delete: {
    delete_credentials_api_users__user_id__credentials__user_credentials_id__group__group_id__delete: {
        parameters: {
            query?: never;
            header?: {
+1 −1
Original line number Diff line number Diff line
@@ -384,7 +384,7 @@ async function updateGroup(groupId: string): Promise<void> {

        saveButtonText.value = busyMessage.value;

        await saveUserCredentials(groupId, groupToUpdate.groupPayload);
        await saveUserCredentials(props.serviceDefinition, groupId, groupToUpdate.groupPayload);

        discardGroupChanges(groupId);

+5 −1
Original line number Diff line number Diff line
@@ -198,7 +198,11 @@ async function onSaveChanges(): Promise<void> {

        saveButtonText.value = busyMessage.value;

        await saveUserCredentials(groupToUpdate.groupData.groupId, groupToUpdate.groupData.groupPayload);
        await saveUserCredentials(
            groupToUpdate.serviceDefinition,
            groupToUpdate.groupData.groupId,
            groupToUpdate.groupData.groupPayload,
        );

        Toast.success("Credentials group updated successfully");

+2 −2
Original line number Diff line number Diff line
@@ -185,14 +185,14 @@ describe("useUserToolCredentials", () => {
                return response(200).json(TEST_CREDENTIALS_GROUP);
            }),

            http.put("/api/users/{user_id}/credentials/group/{group_id}", ({ response }) => {
            http.put("/api/users/{user_id}/credentials/{user_credentials_id}/group/{group_id}", ({ response }) => {
                return response(200).json({
                    ...TEST_CREDENTIALS_GROUP,
                    variables: [{ name: "bucket_name", value: "updated-bucket" }],
                });
            }),

            http.delete("/api/users/{user_id}/credentials/{user_credentials_id}/{group_id}", ({ response }) => {
            http.delete("/api/users/{user_id}/credentials/{user_credentials_id}/group/{group_id}", ({ response }) => {
                return response(204).empty();
            }),

+3 −0
Original line number Diff line number Diff line
@@ -268,12 +268,14 @@ export function useUserToolCredentials(toolId: string, toolVersion: string) {

    /**
     * Save user credentials for the tool.
     * @param {ServiceCredentialsIdentifier} serviceIdentifier - Service name and version identifier.
     * @param {string} groupId - Group ID to update.
     * @param {ServiceCredentialGroupPayload} serviceGroupPayload - Service group payload to save.
     * @returns {Promise<void>}
     * @throws {Error} If the credential save fails.
     */
    async function saveUserCredentials(
        serviceIdentifier: ServiceCredentialsIdentifier,
        groupId: string,
        serviceGroupPayload: ServiceCredentialGroupPayload,
    ): Promise<void> {
@@ -281,6 +283,7 @@ export function useUserToolCredentials(toolId: string, toolVersion: string) {
            await userToolsServiceCredentialsStore.updateUserCredentialsForTool(
                toolId,
                toolVersion,
                serviceIdentifier,
                groupId,
                serviceGroupPayload,
            );
Loading