P5 7617 cleanup market and locale (#10)
* Minor fixes * Cleanup with adding Locale type * Add locales to test
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { SQLDataSource } from 'datasource-sql';
|
||||
import { Market } from '../types/market-types';
|
||||
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 MarketAPI extends SQLDataSource {
|
||||
export class MarketLocaleAPI extends SQLDataSource {
|
||||
constructor(config) {
|
||||
super(config);
|
||||
}
|
||||
@@ -33,4 +33,29 @@ export class MarketAPI extends SQLDataSource {
|
||||
.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
@@ -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,
|
||||
});
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
@@ -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,
|
||||
};
|
||||
@@ -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,
|
||||
);
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
+16
-11
@@ -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,11 +141,6 @@ const typeDefs = gql`
|
||||
customerEmail: String
|
||||
customerCellphone: String
|
||||
flyerIds: String
|
||||
"""
|
||||
marketName and localeName will go away and be replaced with real objects
|
||||
"""
|
||||
marketName: String
|
||||
localeName: String
|
||||
billingInformation: ContactInformation
|
||||
deliveryInformation: ContactInformation
|
||||
billingAddressId: Int
|
||||
@@ -146,6 +150,8 @@ const typeDefs = gql`
|
||||
pwinty needs to be updated with market being a subtype
|
||||
"""
|
||||
market: Market
|
||||
locale: Locale
|
||||
rows: [OrderRow]
|
||||
}
|
||||
|
||||
type OrderRow {
|
||||
@@ -298,7 +304,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;
|
||||
}
|
||||
Reference in New Issue
Block a user