Merge branch 'master' into P5-7626-fix-dev

This commit is contained in:
Anders Gustafsson
2021-08-12 11:58:40 +02:00
14 changed files with 166 additions and 84 deletions
+14 -4
View File
@@ -214,6 +214,12 @@ describe('GraphQL Apollo tests', () => {
);
const marketControlData = market_response.rows[0];
// Locale
const locale_response = await allContainers.db.raw(
`SELECT * FROM locales WHERE value='${orderControlData.locale}';`,
);
const localeControlData = locale_response.rows[0];
// Order row
const orderrow_response = await allContainers.db.raw(
`SELECT * FROM "order-rows" WHERE orderid = 1;`,
@@ -230,8 +236,10 @@ describe('GraphQL Apollo tests', () => {
{
order(id: 1) {
id
localeName
marketName
locale {
id
value
}
market {
id
name
@@ -254,8 +262,6 @@ describe('GraphQL Apollo tests', () => {
// Order
expect(order.id).toBe(`${orderControlData.id}`);
expect(order.marketName).toBe(orderControlData.country_code);
expect(order.localeName).toBe(orderControlData.locale);
// Market
expect(order.market.id).toBe(`${marketControlData.id}`);
@@ -266,6 +272,10 @@ describe('GraphQL Apollo tests', () => {
parseFloat(marketControlData.price_adjustment),
);
// Locale
expect(order.locale.id).toBe(`${localeControlData.id}`);
expect(order.locale.value).toBe(localeControlData.value);
// Order Rows
expect(order.rows.length).toBe(orderRowsControlData.length);
expect(order.rows[0].id).toBe('' + orderRowsControlData[0].rowid);
+3 -2
View File
@@ -135,9 +135,10 @@ const verifyToken = async (
if (claim.token_use === 'access') {
// Access token, check for scopes
const accessClaim = claim as AccessTokenClaim;
console.debug(`accessClaim confirmed for ${accessClaim.username}`);
const who = accessClaim.username ?? accessClaim.client_id;
console.debug(`accessClaim confirmed for ${who}`);
return {
userName: accessClaim.username,
userName: who,
isValid: true,
idToken: null,
accessToken: accessClaim,
+6 -7
View File
@@ -43,7 +43,7 @@ WHERE product_category.product_id = ?
/**
* TODO: should we have these?
* category keywords and texts
* category keywords
*
SELECT category_keyword.category_id, keywords.value
FROM category_keyword
@@ -52,12 +52,11 @@ WHERE product_category.product_id = ?
JOIN categorydatakeys cdk ON cd.datakey_id = cdk.id
*
* category texts
SELECT name,
text
FROM categorydata cd
JOIN categorydatakeys cdk ON cd.datakey_id = cdk.id
WHERE category_id = ?
AND locale_id = ?;
SELECT name, text
FROM categorydata cd
JOIN categorydatakeys cdk ON cd.datakey_id = cdk.id
WHERE category_id = ?
AND locale_id = ?;
* category teaser images???
-35
View File
@@ -1,35 +0,0 @@
import { SQLDataSource } from 'datasource-sql';
import { Market } from '../types/market-types';
const MINUTE = 60;
export class MarketAPI extends SQLDataSource {
constructor(config) {
super(config);
}
async getMarketById(id: number): Promise<Market> {
return this.knex
.select('*')
.from('markets')
.where('id', id)
.first()
.cache(MINUTE * 5);
}
async getMarketByName(name: string): Promise<Market> {
return this.knex
.select('*')
.from('markets')
.where('name', name)
.first()
.cache(MINUTE * 5);
}
async getMarkets(): Promise<Array<Market>> {
return this.knex
.select('*')
.from('markets')
.cache(MINUTE * 5);
}
}
+61
View File
@@ -0,0 +1,61 @@
import { SQLDataSource } from 'datasource-sql';
import { Market, Locale } from '../types/market-locale-types';
const MINUTE = 60;
// TODO: perhaps rename to MarketLocale API and add market_locales and locales here.
export class MarketLocaleAPI extends SQLDataSource {
constructor(config) {
super(config);
}
async getMarketById(id: number): Promise<Market> {
return this.knex
.select('*')
.from('markets')
.where('id', id)
.first()
.cache(MINUTE * 5);
}
async getMarketByName(name: string): Promise<Market> {
return this.knex
.select('*')
.from('markets')
.where('name', name)
.first()
.cache(MINUTE * 5);
}
async getMarkets(): Promise<Array<Market>> {
return this.knex
.select('*')
.from('markets')
.cache(MINUTE * 5);
}
async getLocaleById(id: number): Promise<Locale> {
return this.knex
.select('*')
.from('locales')
.where('id', id)
.first()
.cache(MINUTE * 5);
}
async getLocaleByValue(value: string): Promise<Locale> {
return this.knex
.select('*')
.from('locales')
.where('value', value)
.first()
.cache(MINUTE * 5);
}
async getLocales(): Promise<Array<Locale>> {
return this.knex
.select('*')
.from('locales')
.cache(MINUTE * 5);
}
}
+3 -3
View File
@@ -11,7 +11,7 @@ import { ProductAPI } from './datasources/product-api';
import { DesignerAPI } from './datasources/designer-api';
import { CategoryAPI } from './datasources/category-api';
import { KeywordAPI } from './datasources/keyword-api';
import { MarketAPI } from './datasources/market-api';
import { MarketLocaleAPI } from './datasources/market-locale-api';
import { ImageServerApi } from './datasources/imageserver-api';
import { InteriorAPI } from './datasources/interior-api';
@@ -26,7 +26,7 @@ const designerApi = new DesignerAPI(knexConfig);
const imageServerApi = new ImageServerApi();
const interiorApi = new InteriorAPI(knexConfig, imageServerApi);
const keywordApi = new KeywordAPI(knexConfig);
const marketApi = new MarketAPI(knexConfig);
const marketLocaleApi = new MarketLocaleAPI(knexConfig);
const orderApi = new OrderAPI(knexConfig);
const productApi = new ProductAPI(knexConfig);
@@ -36,7 +36,7 @@ const dataSources = () => ({
interiorApi,
imageServerApi,
keywordApi,
marketApi,
marketLocaleApi,
orderApi,
productApi,
});
+4 -1
View File
@@ -7,7 +7,10 @@ import {
import { designerQueryTypeDefs, designerTypeDefs } from './designers-resolver';
import { categoryQueryTypeDefs, categoryTypeDefs } from './categories-resolver';
import { keywordsQueryTypeDefs, keywordTypeDefs } from './keywords-resolver';
import { marketsQueryTypeDefs, marketTypeDefs } from './markets-resolver';
import {
marketsQueryTypeDefs,
marketTypeDefs,
} from './markets-locale-resolver';
import { DateTimeResolver, DateResolver, JSONResolver } from 'graphql-scalars';
import { interiorsQueryTypeDefs, interiorTypeDefs } from './interiors-resolver';
+31
View File
@@ -0,0 +1,31 @@
import { IResolverObject } from 'graphql-tools';
import { MarketLocaleAPI } from '../datasources/market-locale-api';
const Market: IResolverObject = {};
async function getMarkets(_, _args, { dataSources }) {
return (<MarketLocaleAPI>dataSources.marketLocaleApi).getMarkets();
}
async function getMarket(_, { name }, { dataSources }) {
return (<MarketLocaleAPI>dataSources.marketLocaleApi).getMarketByName(name);
}
const Locale: IResolverObject = {};
async function getLocales(_, _args, { dataSources }) {
return (<MarketLocaleAPI>dataSources.marketLocaleApi).getLocales();
}
async function getLocale(_, { value }, { dataSources }) {
return (<MarketLocaleAPI>dataSources.marketLocaleApi).getLocaleByValue(value);
}
export const marketTypeDefs = { Market, Locale };
export const marketsQueryTypeDefs = {
markets: getMarkets,
market: getMarket,
locales: getLocales,
locale: getLocale,
};
-19
View File
@@ -1,19 +0,0 @@
import { IResolverObject } from 'graphql-tools';
import { MarketAPI } from '../datasources/market-api';
const Market: IResolverObject = {};
async function getMarkets(_, _args, { dataSources }) {
return (<MarketAPI>dataSources.marketApi).getMarkets();
}
async function getMarket(_, { name }, { dataSources }) {
return (<MarketAPI>dataSources.marketApi).getMarketByName(name);
}
export const marketTypeDefs = { Market };
export const marketsQueryTypeDefs = {
markets: getMarkets,
market: getMarket,
};
+9 -2
View File
@@ -1,5 +1,5 @@
import { IResolverObject } from 'graphql-tools';
import { MarketAPI } from '../datasources/market-api';
import { MarketLocaleAPI } from '../datasources/market-locale-api';
import { OrderAPI } from '../datasources/order-api';
import { FilterInput } from '../types/types';
@@ -15,7 +15,14 @@ const Order: IResolverObject = {
return (<OrderAPI>dataSources.orderApi).getOrderRowsByOrderId(id);
},
async market({ market }, _args, { dataSources }) {
return (<MarketAPI>dataSources.marketApi).getMarketByName(market);
return (<MarketLocaleAPI>dataSources.marketLocaleApi).getMarketByName(
market,
);
},
async locale({ locale }, _args, { dataSources }) {
return (<MarketLocaleAPI>dataSources.marketLocaleApi).getLocaleByValue(
locale,
);
},
};
+4 -2
View File
@@ -5,12 +5,14 @@ import { CategoryAPI } from '../datasources/category-api';
import { Category } from '../types/category-types';
import { KeywordAPI } from '../datasources/keyword-api';
import { Keyword } from '../types/keyword-types';
import { MarketAPI } from '../datasources/market-api';
import { MarketLocaleAPI } from '../datasources/market-locale-api';
import { InteriorAPI } from '../datasources/interior-api';
const ProductBlacklist: IResolverObject = {
async market(parent, _args, { dataSources }) {
return (<MarketAPI>dataSources.marketApi).getMarketById(parent.marketId);
return (<MarketLocaleAPI>dataSources.marketLocaleApi).getMarketById(
parent.marketId,
);
},
};
+19 -9
View File
@@ -21,6 +21,8 @@ const typeDefs = gql`
designer(id: Int!): Designer
markets: [Market]
market(name: String!): Market
locales: [Locale]
locale(value: String!): Locale
interiors(filter: InteriorsFilterInput): [Interior]
}
@@ -52,7 +54,7 @@ const typeDefs = gql`
offset: Int!
}
"""
Later replace with implements ListResult
Later replace with implements ListResult when products support it
"""
type OrderResult {
total: Int!
@@ -63,10 +65,17 @@ const typeDefs = gql`
type Market {
id: ID!
name: String
vat: Float
currency: String
priceAdjustment: Float
name: String!
vat: Float!
currency: String!
priceAdjustment: Float!
}
type Locale {
id: ID!
value: String!
name: String!
fallbackId: Int
}
type Address {
@@ -132,14 +141,16 @@ const typeDefs = gql`
customerEmail: String
customerCellphone: String
flyerIds: String
marketName: String
localeName: String
billingInformation: ContactInformation
deliveryInformation: ContactInformation
billingAddressId: Int
deliveryAddressId: Int
rows: [OrderRow]
"""
pwinty needs to be updated with market being a subtype
"""
market: Market
locale: Locale
rows: [OrderRow]
}
type OrderRow {
@@ -292,7 +303,6 @@ const typeDefs = gql`
id: ID!
groupId: Int!
group: ProductGroup!
marketId: Int!
market: Market!
inserted: DateTime!
updated: DateTime!
@@ -5,3 +5,10 @@ export interface Market {
currency: string;
priceAdjustment: number;
}
export interface Locale {
id: number;
value: string;
fallbackId: number;
name: string;
}
+5
View File
@@ -85,6 +85,11 @@ export interface ProductFields {
printFileWidth?: number;
printFileHeight?: number;
printFileDpi?: number;
// Below exists for Canvas frame in DB but in shop limits.php is used
// minHeight: number;
// minWidth: number;
// maxHeight: number;
// maxWidth: number;
}
export function getProductGroupStringFromString(group: string): string {