This commit is contained in:
Benjamin Toby 2024-10-22 18:17:59 +01:00
parent d774e8d35d
commit c2328116da
5 changed files with 28 additions and 86 deletions

View File

@ -316,42 +316,14 @@ export interface GetReturn {
schema?: DSQL_TableSchemaType; schema?: DSQL_TableSchemaType;
} }
interface PostReturn { interface GetSchemaRequestQuery {
success: boolean; database?: string;
payload?: PostInsertReturn | Object[] | string; table?: string;
field?: string;
} }
interface PostInsertReturn { interface GetSchemaAPICredentialsParam {
fieldCount: number; key: string;
affectedRows: number;
insertId: number;
serverStatus: number;
warningCount: number;
message: string;
protocol41: boolean;
changedRows: number;
} }
interface PostDataPayload { type GetSchemaAPIParam = GetSchemaRequestQuery & GetSchemaAPICredentialsParam;
action: "insert" | "update" | "delete";
table: string;
data?: object;
identifierColumnName?: string;
identifierValue?: string;
duplicateColumnName?: string;
duplicateColumnValue?: string;
update?: boolean;
}
interface LocalPostReturn {
success: boolean;
payload?: PostInsertReturn | Object[] | string;
msg?: string;
error?: string;
}
interface LocalPostQueryObject {
query: string | import("../../package-shared/types").PostDataPayload;
tableName?: string;
queryValues?: string[];
}

View File

@ -355,50 +355,17 @@ const http = require("http");
*/ */
/** /**
* @typedef {Object} PostReturn * @typedef {object} GetSchemaRequestQuery
* @property {boolean} success - Did the function run successfully? * @property {string} [database] - Db Name. eg `test_database`
* @property { PostInsertReturn | Object[] | string } [payload] - The Y Coordinate * @property {string} [table] - Table Name (slug) e.g `test_table`
* @property {string} [field]
*/ */
/** /**
* @typedef {object} PostInsertReturn * @typedef {object} GetSchemaAPICredentialsParam
* @property {number} fieldCount * @property {string} key - API FULL ACCESS Key
* @property {number} affectedRows
* @property {number} insertId
* @property {number} serverStatus
* @property {number} warningCount
* @property {string} message
* @property {boolean} protocol41
* @property {number} changedRows
*/ */
/** /**
* @typedef {object} PostDataPayload * @typedef {GetSchemaRequestQuery & GetSchemaAPICredentialsParam} GetSchemaAPIParam
* @property {"insert" | "update" | "delete"} action - The target action to take
* @property {string} table - Table name(slug) eg "blog_posts"
* @property {object} [data] - Table insert payload object => This must have keys that match
* table fields
* @property {string?} [identifierColumnName] - Table identifier field name => eg. "id" OR "email"
* @property {string?} [identifierValue] - Corresponding value of the selected field name => This
* checks identifies a the target row for "update" or "delete". Not needed for "insert"
* @property {string?} [duplicateColumnName] - Duplicate column name to check for
* @property {string?} [duplicateColumnValue] - Duplicate column value to match. If no "update" param
* provided, function will return null
* @property {boolean?} [update] - Should the "insert" action update the existing entry if indeed
* the entry with "duplicateColumnValue" exists?
*/
/**
* @typedef {Object} LocalPostReturn
* @property {boolean} success - Did the function run successfully?
* @property { PostInsertReturn | Object[] | string } [payload] - GET request results
* @property {string} [msg] - Message
* @property {string} [error] - Error Message
*/
/**
* @typedef {Object} LocalPostQueryObject
* @property {string | import("../../package-shared/types").PostDataPayload} query - Table Name
* @property {string} [tableName] - Table Name
* @property {string[]} [queryValues] - GET request results
*/ */

View File

@ -1,6 +1,6 @@
{ {
"name": "datasquirel", "name": "datasquirel",
"version": "2.2.7", "version": "2.2.8",
"description": "Cloud-based SQL data management tool", "description": "Cloud-based SQL data management tool",
"main": "index.js", "main": "index.js",
"bin": { "bin": {

View File

@ -9,7 +9,6 @@
// "skipLibCheck": true, // "skipLibCheck": true,
"lib": ["dom", "dom.iterable", "esnext"], "lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true, "allowJs": true,
"noEmit": true,
"incremental": true, "incremental": true,
"resolveJsonModule": true, "resolveJsonModule": true,
"isolatedModules": true, "isolatedModules": true,

View File

@ -22,17 +22,12 @@ const https = require("https");
*/ */
/** /**
* Make a get request to Datasquirel API * # Get Schema for Database, table, or field *
* ============================================================================== * @param {import("../package-shared/types").GetSchemaAPIParam} params
* @async
*
* @param {Object} params - Single object passed
* @param {string} params.key - `FULL ACCESS` API Key
* @param {string} [params.database] - The database schema to get
* *
* @returns { Promise<GetSchemaReturn> } - Return Object * @returns { Promise<GetSchemaReturn> } - Return Object
*/ */
async function getSchema({ key, database }) { async function getSchema({ key, database, field, table }) {
const scheme = process.env.DSQL_HTTP_SCHEME; const scheme = process.env.DSQL_HTTP_SCHEME;
const localHost = process.env.DSQL_LOCAL_HOST; const localHost = process.env.DSQL_LOCAL_HOST;
const localHostPort = process.env.DSQL_LOCAL_HOST_PORT; const localHostPort = process.env.DSQL_LOCAL_HOST_PORT;
@ -43,6 +38,15 @@ async function getSchema({ key, database }) {
* @description make a request to datasquirel.com * @description make a request to datasquirel.com
*/ */
const httpResponse = await new Promise((resolve, reject) => { const httpResponse = await new Promise((resolve, reject) => {
/** @type {import("../package-shared/types").GetSchemaRequestQuery} */
const queryObject = { database, field, table };
let query = Object.keys(queryObject)
// @ts-ignore
.filter((k) => queryObject[k])
// @ts-ignore
.map((k) => `${k}=${queryObject[k]}`)
.join("&");
(scheme?.match(/^http$/i) ? http : https) (scheme?.match(/^http$/i) ? http : https)
.request( .request(
{ {
@ -55,7 +59,7 @@ async function getSchema({ key, database }) {
hostname: localHost || "datasquirel.com", hostname: localHost || "datasquirel.com",
path: path:
"/api/query/get-schema" + "/api/query/get-schema" +
(database ? `?database=${database}` : ""), (query?.match(/./) ? `?${query}` : ""),
}, },
/** /**