Skip to content

Commit

Permalink
Backend bugfixes, frontend userColumn as popover menu
Browse files Browse the repository at this point in the history
  • Loading branch information
big213 committed Mar 20, 2021
1 parent d4a6fa3 commit 99c192a
Show file tree
Hide file tree
Showing 15 changed files with 223 additions and 55 deletions.
12 changes: 9 additions & 3 deletions .github/workflows/frontend-deploy-alpha.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
name: Frontend Deploy (alpha)
on:
release:
types: [published]
workflow_dispatch:
inputs:
logLevel:
description: "Log level"
required: true
default: "warning"
tags:
description: "Test scenario tags"
jobs:
deploy:
name: Deploy
Expand All @@ -17,7 +23,7 @@ jobs:
run: npm run generate
env:
API_URL: https://api.cubepb.com
VER: ${{ github.ref }}
VER: ${{ github.sha }}
WCA_AUTH_URL: https://worldcubeassociation.org/oauth/authorize?client_id=6rfi-FvIwRXDlPiYzYEUlK5Jt8L6x7ucPZyM-aD8mu0&redirect_uri=https%3A%2F%2Falpha.cubepb.com%2Fwca-redirect&response_type=code&scope=public+dob+email+manage_competitions
WCA_ACCOUNT_MANAGEMENT_URL: https://worldcubeassociation.org/profile/edit
- name: Deploy to Firebase
Expand Down
1 change: 1 addition & 0 deletions backend/functions/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"lint": "eslint --ext .ts",
"build": "tsc",
"serve": "set DEV=1 && tsc && firebase emulators:start --only functions",
"serve:reload": "set DEV=1 && tsc -w --preserveWatchOutput | firebase emulators:start --only functions",
"db:sync": "set DEV=1 && ts-node src/scripts/syncDatabase.ts",
"generate:schema": "set DEV=1 && ts-node src/scripts/generateSchema.ts",
"generate:migration": "set DEV=1 && ts-node src/scripts/generateMigration.ts",
Expand Down
54 changes: 26 additions & 28 deletions backend/functions/src/schema/helpers/resolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ export async function createObjectType({
});
}

// assemble the mysql fields
// assemble the sql fields
const sqlFields = {};

// handle the custom setters
Expand All @@ -119,7 +119,7 @@ export async function createObjectType({
});
}

// if it is a mysql field, add to mysqlFields
// if it is a sql field, add to sqlFields
if (typeDef.definition.fields[field].sqlOptions) {
sqlFields[field] = addFields[field];
}
Expand All @@ -136,7 +136,7 @@ export async function createObjectType({

let addedResults;

// do the mysql fields first, if any
// do the sql fields first, if any
if (Object.keys(sqlFields).length > 0) {
addedResults = await insertTableRow(
typename,
Expand Down Expand Up @@ -183,7 +183,7 @@ export async function updateObjectType({
});
}

//assemble the mysql fields
//assemble the sql fields
const sqlFields = {};

//handle the custom setters
Expand All @@ -197,7 +197,7 @@ export async function updateObjectType({
});
}

// if it is a mysql field, add to mysqlFields
// if it is a sql field, add to sqlFields
if (typeDef.definition.fields[field].sqlOptions) {
sqlFields[field] = updateFields[field];
}
Expand All @@ -212,7 +212,7 @@ export async function updateObjectType({
}
}

// do the mysql first, if any fields
// do the sql first, if any fields
if (Object.keys(sqlFields).length > 0) {
await updateTableRow(
typename,
Expand Down Expand Up @@ -279,7 +279,7 @@ export async function deleteObjectType({
}
}

// do the mysql first
// do the sql first
if (hasSqlFields)
await removeTableRow(
typename,
Expand Down Expand Up @@ -346,25 +346,6 @@ export async function getObjectType({
fieldPath,
});

const requiredSqlFields: Set<string> = new Set();

for (const field in typeDef.definition.fields) {
const sqlFields = typeDef.definition.fields[field].requiredSqlFields;

if (sqlFields) {
sqlFields.forEach((field) => requiredSqlFields.add(field));
}
}

// ensure any requiredSqlFields are in validatedSqlSelectArray
requiredSqlFields.forEach((field) => {
if (!validatedSqlSelectArray.find((ele) => ele.field === field)) {
validatedSqlSelectArray.push({
field,
});
}
});

const sqlQuery = {
select: validatedSqlSelectArray,
from: typename,
Expand Down Expand Up @@ -449,8 +430,8 @@ function generateSqlQuerySelectObject({
})
);
} else {
// if not root level AND joinHidden, throw error
if (parentFields.length && sqlOptions.joinHidden) {
// if not root level AND nestHidden, throw error
if (parentFields.length && typeDef.nestHidden) {
throw new JomqlBaseError({
message: `Requested field not allowed to be accessed directly in an nested context`,
fieldPath: fieldPath.concat(parentPlusCurrentField),
Expand All @@ -470,6 +451,23 @@ function generateSqlQuerySelectObject({
}
}
}
} else {
// if no sqlOptions, still check if field is nestHidden
if (parentFields.length && typeDef.nestHidden) {
throw new JomqlBaseError({
message: `Requested field not allowed to be accessed directly in an nested context`,
fieldPath: fieldPath.concat(parentPlusCurrentField),
});
}

// also check to see if it has any requiredSqlFields
if (typeDef.requiredSqlFields) {
typeDef.requiredSqlFields.forEach((field) => {
sqlSelectObjectArray.push({
field: parentFields.concat(field).join("."),
});
});
}
}
}

Expand Down
4 changes: 2 additions & 2 deletions backend/functions/src/schema/helpers/sql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ export async function insertTableRow(
options?: InsertTableRowOptions
) {
try {
// check if there is a mysql setter on the field
// check if there is a sql setter on the field
const currentTypeDef = objectTypeDefs.get(table);
if (!currentTypeDef) {
throw new Error(`TypeDef for ${table} not found`);
Expand Down Expand Up @@ -260,7 +260,7 @@ export async function updateTableRow(
const previousJoins: JoinsMap = {};
const params = {};

// check if there is a mysql setter on the field
// check if there is a sql setter on the field
const currentTypeDef = objectTypeDefs.get(table);
if (!currentTypeDef) {
throw new Error(`TypeDef for ${table} not found`);
Expand Down
29 changes: 28 additions & 1 deletion backend/functions/src/schema/helpers/typeDef.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ type GenerateFieldParams = {
description?: string;
allowNull: boolean;
hidden?: boolean;
nestHidden?: boolean;
defaultValue?: unknown;
sqlDefinition?: Partial<SqlDefinition>;
sqlOptions?: Partial<ObjectTypeDefSqlOptions>;
Expand All @@ -56,6 +57,7 @@ export function generateStandardField(
allowNull,
arrayOptions,
hidden = false,
nestHidden = false,
defaultValue,
sqlType,
type,
Expand All @@ -80,6 +82,7 @@ export function generateStandardField(
}
: undefined,
hidden,
nestHidden,
addable: true, // default addable and updateable
updateable: true,
...typeDefOptions,
Expand All @@ -105,6 +108,7 @@ export function generateGenericScalarField(
arrayOptions,
defaultValue,
hidden,
nestHidden,
type,
sqlDefinition,
sqlOptions,
Expand All @@ -117,6 +121,7 @@ export function generateGenericScalarField(
arrayOptions,
defaultValue,
hidden,
nestHidden,
type: type ?? Scalars.string,
sqlDefinition,
sqlOptions,
Expand All @@ -135,6 +140,7 @@ export function generateStringField(
allowNull = true,
defaultValue,
hidden,
nestHidden,
type,
sqlDefinition,
sqlOptions,
Expand All @@ -146,6 +152,7 @@ export function generateStringField(
allowNull,
defaultValue,
hidden,
nestHidden,
sqlType: "string",
type: type ?? Scalars.string,
sqlDefinition,
Expand All @@ -166,6 +173,7 @@ export function generateUnixTimestampField(
allowNull = true,
defaultValue,
hidden,
nestHidden,
sqlDefinition,
sqlOptions,
typeDefOptions,
Expand All @@ -177,6 +185,7 @@ export function generateUnixTimestampField(
allowNull,
defaultValue,
hidden,
nestHidden,
sqlType: "dateTime",
type: Scalars.unixTimestamp,
sqlDefinition,
Expand All @@ -202,6 +211,7 @@ export function generateDateField(params: GenerateFieldParams) {
allowNull = true,
defaultValue,
hidden,
nestHidden,
sqlDefinition,
sqlOptions,
typeDefOptions,
Expand All @@ -212,6 +222,7 @@ export function generateDateField(params: GenerateFieldParams) {
allowNull,
defaultValue,
hidden,
nestHidden,
sqlType: "date",
type: Scalars.date,
sqlDefinition,
Expand All @@ -226,6 +237,7 @@ export function generateTextField(params: GenerateFieldParams) {
description,
allowNull = true,
hidden,
nestHidden,
sqlDefinition,
sqlOptions,
typeDefOptions,
Expand All @@ -235,6 +247,7 @@ export function generateTextField(params: GenerateFieldParams) {
description,
allowNull: allowNull,
hidden,
nestHidden,
sqlType: "text",
type: Scalars.string,
sqlDefinition,
Expand All @@ -250,6 +263,7 @@ export function generateIntegerField(params: GenerateFieldParams) {
allowNull = true,
defaultValue,
hidden,
nestHidden,
sqlDefinition,
sqlOptions,
typeDefOptions,
Expand All @@ -260,6 +274,7 @@ export function generateIntegerField(params: GenerateFieldParams) {
allowNull,
defaultValue,
hidden,
nestHidden,
sqlType: "integer",
type: Scalars.number,
sqlDefinition,
Expand All @@ -275,6 +290,7 @@ export function generateFloatField(params: GenerateFieldParams) {
allowNull = true,
defaultValue,
hidden,
nestHidden,
sqlDefinition,
sqlOptions,
typeDefOptions,
Expand All @@ -285,6 +301,7 @@ export function generateFloatField(params: GenerateFieldParams) {
allowNull,
defaultValue,
hidden,
nestHidden,
sqlType: "float",
type: Scalars.number,
sqlDefinition,
Expand All @@ -300,6 +317,7 @@ export function generateDecimalField(params: GenerateFieldParams) {
allowNull = true,
defaultValue,
hidden,
nestHidden,
sqlDefinition,
sqlOptions,
typeDefOptions,
Expand All @@ -310,6 +328,7 @@ export function generateDecimalField(params: GenerateFieldParams) {
allowNull,
defaultValue,
hidden,
nestHidden,
sqlType: "decimal",
type: Scalars.number,
sqlDefinition,
Expand All @@ -325,6 +344,7 @@ export function generateBooleanField(params: GenerateFieldParams) {
allowNull = true,
defaultValue,
hidden,
nestHidden,
sqlDefinition,
sqlOptions,
typeDefOptions,
Expand All @@ -335,6 +355,7 @@ export function generateBooleanField(params: GenerateFieldParams) {
allowNull,
defaultValue,
hidden,
nestHidden,
sqlType: "boolean",
type: Scalars.boolean,
sqlDefinition,
Expand All @@ -343,7 +364,7 @@ export function generateBooleanField(params: GenerateFieldParams) {
});
}

// array of [type], stored in mysql as JSON
// array of [type], stored in DB as JSON
export function generateArrayField(
params: {
type: JomqlScalarType | JomqlObjectTypeLookup | JomqlObjectType;
Expand All @@ -356,6 +377,7 @@ export function generateArrayField(
allowNull = true,
allowNullElement = false,
hidden,
nestHidden,
type,
sqlDefinition,
sqlOptions,
Expand All @@ -369,6 +391,7 @@ export function generateArrayField(
},
allowNull,
hidden,
nestHidden,
sqlType: "json",
type,
sqlDefinition,
Expand All @@ -390,6 +413,7 @@ export function generateJSONField(params: GenerateFieldParams) {
description,
allowNull = true,
hidden,
nestHidden,
sqlDefinition,
sqlOptions,
typeDefOptions,
Expand All @@ -399,6 +423,7 @@ export function generateJSONField(params: GenerateFieldParams) {
description,
allowNull,
hidden,
nestHidden,
sqlType: "json",
type: Scalars.jsonString,
sqlDefinition,
Expand Down Expand Up @@ -426,6 +451,7 @@ export function generateEnumField(
allowNull = true,
defaultValue,
hidden,
nestHidden,
scalarDefinition,
sqlDefinition,
sqlOptions,
Expand All @@ -444,6 +470,7 @@ export function generateEnumField(
? scalarDefinition.definition.parseValue(defaultValue)
: defaultValue,
hidden,
nestHidden,
sqlType: isKenum ? "integer" : "string",
type: scalarDefinition,
sqlDefinition,
Expand Down
Loading

0 comments on commit 99c192a

Please sign in to comment.