P5 7617 cleanup market and locale (#10)

* Minor fixes

* Cleanup with adding Locale type

* Add locales to test
This commit is contained in:
Niklas Fondberg
2021-08-12 10:51:02 +02:00
committed by GitHub
parent 7047fe9851
commit 58ed7fbf6a
10 changed files with 115 additions and 44 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);
@@ -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
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,
);
},
};
+16 -11
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,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;
}