Revert "Be more careful with default types (#34)" (#36)

This reverts commit 692b530623.
This commit is contained in:
Niklas Fondberg
2021-09-09 12:52:07 +02:00
committed by GitHub
parent 692b530623
commit 3365949920
11 changed files with 41 additions and 130 deletions
+1 -1
View File
@@ -47,7 +47,7 @@ export class InteriorAPI extends BaseSQLDataSource {
}
getInteriorRoomNumber(roomNumberPart: string): number {
return parseInt(roomNumberPart.slice(4), 10);
return convertToPossibleType(roomNumberPart.slice(4));
}
decorateRow(row: any): Interior {
-41
View File
@@ -1,41 +0,0 @@
import { RESTDataSource } from 'apollo-datasource-rest';
import { Product, ProductGroup } from '../types/product-types';
export class InteriorsLambdaAPI extends RESTDataSource {
constructor() {
super();
this.baseURL = process.env.INTERIOR_URL;
}
/**
*
* @param product Product with printProducts and fields
* Example usage in a resolver
* <code>
* const product = await (<ProductAPI>dataSources.productApi).getProduct(productId);
* await (<InteriorsLambdaAPI>dataSources.interiorsLambdaAPI).generateNewInteriors(product);
* </code>
*/
async generateNewInteriors(product: Product): Promise<any> {
const found = product.printProducts.find(
(pr) => pr.groupId === ProductGroup.WALLPAPER,
);
const isRepeating = found !== undefined;
const body = {
token: process.env.INTERIOR_TOKEN,
image: `products/${product.id}.jpg`,
primary_image_area: [
product.fields.focusXpoint2,
product.fields.focusYpoint2,
],
autodetect: true,
};
if (isRepeating) {
body['print_file_height'] = product.fields.printFileHeight;
body['print_file_dpi'] = product.fields.printFileDpi;
}
return this.post('/batch', body);
}
}
+1 -1
View File
@@ -66,7 +66,7 @@ export class OrderAPI extends BaseSQLDataSource {
.count()
.first()
.cache(MINUTE * 60);
return res['count'] as number; // Optimize later to return Promise
return convertToPossibleType(res['count']); // Optimize later to return Promise
}
async getOrders(input: Maybe<GeneralInput>): Promise<Array<Order>> {
+5 -32
View File
@@ -17,7 +17,7 @@ import {
ProductSizeTypes,
} from '../types/product-types';
import { Maybe } from '../types/types';
import { convertToPossibleType, nullOrNumber } from './utils';
import { convertToPossibleType } from './utils';
const MINUTE = 60;
@@ -75,40 +75,11 @@ export class ProductAPI extends BaseSQLDataSource {
if (!row.fields) {
return null; // 53460 for example
}
// Convert to camelCase first
const fields = Object.keys(row.fields).reduce((mem, key) => {
mem[camelcase(key)] = row.fields[key];
mem[camelcase(key)] = convertToPossibleType(row.fields[key]);
return mem;
}, {});
fields['artNo'] = fields['artNo'];
fields['name'] = fields['name'];
fields['copyright'] = fields['copyright'] ?? '';
fields['batch'] = fields['batch'] ?? '';
fields['height'] = nullOrNumber(fields['height'] ?? null);
fields['width'] = nullOrNumber(fields['width'] ?? null);
fields['printFileWidth'] = nullOrNumber(fields['printFileWidth'] ?? null);
fields['printFileHeight'] = nullOrNumber(fields['printFileHeight'] ?? null);
fields['printFileDpi'] = nullOrNumber(fields['printFileDpi'] ?? null);
fields['marginWidthMax'] = nullOrNumber(fields['marginWidthMax'] ?? null);
fields['marginWidthMin'] = nullOrNumber(fields['marginWidthMin'] ?? null);
fields['marginHeightMax'] = nullOrNumber(fields['marginHeightMax'] ?? null);
fields['marginHeightMin'] = nullOrNumber(fields['marginHeightMin'] ?? null);
fields['focusXpoint2'] = nullOrNumber(fields['focusXpoint2'] ?? null);
fields['focusYpoint2'] = nullOrNumber(fields['focusYpoint2'] ?? null);
fields['focusXpoint'] = nullOrNumber(fields['focusXpoint'] ?? null);
fields['focusYpoint'] = nullOrNumber(fields['focusYpoint'] ?? null);
fields['photowallResolution'] = nullOrNumber(
fields['photowallResolution'] ?? null,
);
fields['canvasResolution'] = nullOrNumber(
fields['canvasResolution'] ?? null,
);
fields['wallpaperResolution'] = nullOrNumber(
fields['wallpaperResolution'] ?? null,
);
fields['proportionsWarning?'] = fields['proportionsWarning?'] ?? '';
fields['imageResolution'] = nullOrNumber(fields['imageResolution'] ?? null);
return <ProductFields>fields;
}
@@ -133,6 +104,8 @@ export class ProductAPI extends BaseSQLDataSource {
row.fields = this.getProductFields(row);
row.designerId = row.designerid;
row.orientation = this.getOrientation(row.fields);
row.copyright = row.copyright ?? '';
row.batch = row.batch ?? '';
return row;
}
@@ -141,7 +114,7 @@ export class ProductAPI extends BaseSQLDataSource {
const res = await this.cachedRaw(query)
.cache(MINUTE * 60)
.then((data) => data.rows);
return res[0]['count'] as number; // Optimize later to return Promise
return convertToPossibleType(res[0]['count']); // Optimize later to return Promise
}
async getProducts(input: ProductsFilterInput): Promise<Array<Product>> {
+4 -10
View File
@@ -1,10 +1,8 @@
type InputType = string | undefined | null;
function isNumeric(n: InputType) {
return !isNaN(parseFloat(n));
function isNumeric(n: any) {
return !isNaN(n);
}
function isBoolean(n: InputType | boolean) {
function isBoolean(n: any) {
if (typeof n === 'boolean') {
return true;
}
@@ -15,13 +13,9 @@ function isBoolean(n: InputType | boolean) {
return false;
}
export function convertToPossibleType(n: InputType) {
export function convertToPossibleType(n: any) {
if ('' === n) return '';
if (isBoolean(n)) return Boolean(n);
if (isNumeric(n)) return Number(n);
return n;
}
export function nullOrNumber(n: InputType) {
return n === null || '' === n ? null : Number(n);
}
-3
View File
@@ -17,7 +17,6 @@ import { InteriorAPI } from './datasources/interior-api';
import { verifyToken } from './cognito/cognito-client';
import { readFileSync } from 'fs';
import { InteriorsLambdaAPI } from './datasources/interiors-lambda-api';
const path = require('path');
const typeDefs = readFileSync(
path.join(__dirname, './schema.graphql'),
@@ -30,7 +29,6 @@ const knexConfig = knexStringcase(dbConfig);
const categoryApi = new CategoryAPI(knexConfig);
const designerApi = new DesignerAPI(knexConfig);
const imageServerApi = new ImageServerApi();
const interiorsLambdaApi = new InteriorsLambdaAPI();
const interiorApi = new InteriorAPI(knexConfig, imageServerApi);
const keywordApi = new KeywordAPI(knexConfig);
const marketLocaleApi = new MarketLocaleAPI(knexConfig);
@@ -41,7 +39,6 @@ const dataSources = () => ({
categoryApi,
designerApi,
interiorApi,
interiorsLambdaApi,
imageServerApi,
keywordApi,
marketLocaleApi,
+1
View File
@@ -30,6 +30,7 @@ export const keywordsMutationTypeDefs = {
name,
type,
);
console.log(id);
return (<KeywordAPI>dataSources.keywordApi).getKeywordById(id);
},
};
+1 -8
View File
@@ -10,7 +10,6 @@ import { KeywordAPI } from '../datasources/keyword-api';
import { Keyword } from '../types/keyword-types';
import { MarketLocaleAPI } from '../datasources/market-locale-api';
import { InteriorAPI } from '../datasources/interior-api';
import { InteriorsLambdaAPI } from '../datasources/interiors-lambda-api';
const ProductBlacklist = {
async market(parent, _args, { dataSources }) {
@@ -112,13 +111,7 @@ export const productMutationTypeDefs = {
productId,
groupIds,
);
const product = await (<ProductAPI>dataSources.productApi).getProduct(
productId,
);
await (<InteriorsLambdaAPI>(
dataSources.interiorsLambdaApi
)).generateNewInteriors(product);
return product;
return (<ProductAPI>dataSources.productApi).getProduct(productId);
},
async productKeywords(_, { productId, keywordIds }, { dataSources }) {
await (<KeywordAPI>dataSources.keywordApi).setProductKeywords(
+1 -1
View File
@@ -267,7 +267,7 @@ type ProductFields {
focusYpoint: Float
focusXpoint2: Float
focusYpoint2: Float
batch: String
batch: String!
imageResolution: Int
printFileWidth: Int
printFileHeight: Int