Skip to content

Commit

Permalink
Merge branch 'ds-parents-front-api'
Browse files Browse the repository at this point in the history
  • Loading branch information
philipperolet committed Sep 5, 2023
2 parents 078c761 + 15b73a9 commit 8f232ee
Show file tree
Hide file tree
Showing 2 changed files with 140 additions and 0 deletions.
32 changes: 32 additions & 0 deletions front/lib/core_api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -698,6 +698,38 @@ export const CoreAPI = {

return _resultFromResponse(response);
},
async updateDataSourceDocumentParents({
projectId,
dataSourceName,
documentId,
parents,
}: {
projectId: string;
dataSourceName: string;
documentId: string;
parents: string[];
}): Promise<
CoreAPIResponse<{
data_source: CoreAPIDataSource;
}>
> {
const response = await fetch(
`${CORE_API}/projects/${projectId}/data_sources/${dataSourceName}/documents/${encodeURIComponent(
documentId
)}/parents`,
{
method: "PATCH",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
parents: parents,
}),
}
);

return _resultFromResponse(response);
},

async deleteDataSourceDocument({
projectId,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
import { NextApiRequest, NextApiResponse } from "next";

import { getDataSource } from "@app/lib/api/data_sources";
import { Authenticator, getAPIKey } from "@app/lib/auth";
import { CoreAPI } from "@app/lib/core_api";
import { ReturnedAPIErrorType } from "@app/lib/error";
import { apiError, withLogging } from "@app/logger/withlogging";

export type PostParentsResponseBody = {
updated: true;
};

async function handler(
req: NextApiRequest,
res: NextApiResponse<PostParentsResponseBody | ReturnedAPIErrorType>
): Promise<void> {
const keyRes = await getAPIKey(req);
if (keyRes.isErr()) {
return apiError(req, res, keyRes.error);
}
const { auth } = await Authenticator.fromKey(
keyRes.value,
req.query.wId as string
);

const owner = auth.workspace();
if (!owner) {
return apiError(req, res, {
status_code: 404,
api_error: {
type: "data_source_not_found",
message: "The data source you requested was not found.",
},
});
}

const dataSource = await getDataSource(auth, req.query.name as string);

if (!dataSource) {
return apiError(req, res, {
status_code: 404,
api_error: {
type: "data_source_not_found",
message: "The data source you requested was not found.",
},
});
}

switch (req.method) {
case "POST":
if (!auth.isBuilder()) {
return apiError(req, res, {
status_code: 403,
api_error: {
type: "data_source_auth_error",
message:
"You can only alter the data souces of the workspaces for which you are a builder.",
},
});
}

if (
!req.body ||
!Array.isArray(req.body.parents) ||
!req.body.parents.every((p: any) => typeof p === "string")
) {
return apiError(req, res, {
status_code: 400,
api_error: {
type: "invalid_request_error",
message: "Invalid request body, `parents` (string[]) is required.",
},
});
}

const updateRes = await CoreAPI.updateDataSourceDocumentParents({
projectId: dataSource.dustAPIProjectId,
dataSourceName: dataSource.name,
documentId: req.query.documentId as string,
parents: req.body.parents,
});

if (updateRes.isErr()) {
return apiError(req, res, {
status_code: 500,
api_error: {
type: "internal_server_error",
message: "There was an error updating the `parents` field.",
data_source_error: updateRes.error,
},
});
}

res.status(200).json({ updated: true });
return;

default:
return apiError(req, res, {
status_code: 405,
api_error: {
type: "method_not_supported_error",
message: "The method passed is not supported, POST is expected.",
},
});
}
}

export default withLogging(handler);

0 comments on commit 8f232ee

Please sign in to comment.