Skip to content

Commit

Permalink
get database endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
fontanierh committed Nov 16, 2023
1 parent 4862739 commit 03e0852
Showing 1 changed file with 104 additions and 0 deletions.
104 changes: 104 additions & 0 deletions front/pages/api/v1/w/[wId]/data_sources/[name]/databases/[id]/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
import { NextApiRequest, NextApiResponse } from "next";

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

type GetDatabaseResponseBody = {
database: CoreAPIDatabase;
};

async function handler(
req: NextApiRequest,
res: NextApiResponse<GetDatabaseResponseBody>
): 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();
const plan = auth.plan();
if (!owner || !plan) {
return apiError(req, res, {
status_code: 404,
api_error: {
type: "workspace_not_found",
message: "The workspace you requested was not found.",
},
});
}

if (!isDevelopmentOrDustWorkspace(owner)) {
res.status(404).end();
return;
}

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.",
},
});
}

const databaseId = req.query.id;
if (!databaseId || typeof databaseId !== "string") {
return apiError(req, res, {
status_code: 400,
api_error: {
type: "invalid_request_error",
message: "The database id is missing.",
},
});
}

switch (req.method) {
case "GET":
const databaseRes = await CoreAPI.getDatabase({
projectId: dataSource.dustAPIProjectId,
dataSourceName: dataSource.name,
databaseId,
});
if (databaseRes.isErr()) {
logger.error({
dataSourcename: dataSource.name,
workspaceId: owner.id,
error: databaseRes.error,
});
return apiError(req, res, {
status_code: 500,
api_error: {
type: "internal_server_error",
message: "Failed to get database.",
},
});
}

const { database } = databaseRes.value;

return res.status(200).json({ database });

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

export default withLogging(handler);

0 comments on commit 03e0852

Please sign in to comment.