3010: Apollo 4 major update and complete security overhaul to prepare for public api support

* 2919: rewrite for update to apollo 4 (#131)

* rewrite for update to apollo 4

* removed container tests, edited make to publish any branch to staging

* revert makefile

* cleanup

* update 1

* more fixes to get it working on aws

* enabled csrf prevention protection, testing if build works

* switched to express version

* changed the healthcheck url

* added cache to restdatasources

* 3011: create a login mutation on graphql server that responds with a access token (#133)

* 3011 added login rest endpoint and general scope fixes

* changed login auth to basic auth username and password

* minor changes from CR feedback

* force update

* added tighter timeout for idle knex connection

* Refactor authentication and scopes (#134)

* big refactor of scopes in graphql

* cr fixes

* some security fixes (#135)

* some security fixes

* cleanup

* update staging

* minor readme change
This commit is contained in:
Arwid Thornström
2022-12-12 12:58:24 +01:00
committed by GitHub
parent 4248465031
commit c68c182b64
78 changed files with 3783 additions and 14606 deletions
+5
View File
@@ -1,5 +1,10 @@
DATABASE_URL=postgresql://fondberg:@docker.for.mac.localhost/photowall
COGNITO_POOL_ID=eu-west-1_3O4VfvPn7
COGNITO_LOGIN_CLIENT_ID=
COGNITO_LOGIN_CLIENT_SECRET=
COGNITO_LOGIN_CLIENT_URL=https://photowall-test-admin.auth.eu-west-1.amazoncognito.com
WEB_CLIENT_USERNAME=webclient
WEB_CLIENT_PASSWORD=
INTERIORS_TOKEN=
INTERIORS_URL=https://0hrq0zel2h.execute-api.eu-west-1.amazonaws.com/Prod
AWS_SECRET_ACCESS_KEY=
+1 -1
View File
@@ -1 +1 @@
v16.12
v16.13
+1 -1
View File
@@ -1,5 +1,5 @@
# Uses the node base image with the latest LTS version
FROM node:16.12
FROM node:16.13.0
# Informs Docker that the container listens on the
# specified network ports at runtime
EXPOSE 4000
+1 -1
View File
@@ -1,5 +1,5 @@
# Uses the node base image with the latest LTS version
FROM node:16.12.0
FROM node:16.13.0
# Informs Docker that the container listens on the
# specified network ports at runtime
EXPOSE 4000
+20 -17
View File
@@ -2,10 +2,22 @@
Apollo graphql api server for Photowall
This servers runs in two instances on AWS. `graphql.photowall.com` is used for photowall admin. `data.photowall.com` is used by the website (client).
When clients want to use the public `data.photowall.com` they use the `/login` REST endpoint to retreive a BearerToken with restricted cognito scopes. They can then access certain product and designer information with the token.
Third party systems like Unbox (Synergy) will use the `graphql.photowall.com` to read their data like they are doing now. This is to make sure the website wont be affected by larger downloads of data like unbox does. Unbox has their own cognito app client with limited scopes.
## Run it locally
Create an .env file (see .env.example for what to set).
`COGNITO_LOGIN_CLIENT_SECRET`, `COGNITO_LOGIN_CLIENT_ID` is found in cognito `photowall-test-staff` pool. In `photowall-web-test-client` app.
### Development
This project does only run in docker, so when developing start the docker environment and let it updated when changing files. Sometimes the watch for files doesnt trigger. Like when you edit the .graphql file. Then just edit a .ts file and it will reload.
Run
```
$ npm install
$ docker compose build
@@ -18,8 +30,13 @@ If you wish the Bearer Token used in prodlike environment also works.
If you dont have access to photowall shared lastpass please contact any collegaue.
If you use Insomnia ask a colleague for the queries that can be exported/imported from Insomnia.
To tests the data.photowall.com its possible to run the login rest endpoint to get a Bearer accessToken. Check code for username and password.
### Run prod-like container locally
Run
```
$ docker compose -f docker-compose-prodlike.yml build
$ docker compose -f docker-compose-prodlike.yml up
@@ -31,26 +48,12 @@ The token is valid for 2-3 hours.
## Run tests
Scripts will create the insert sql files for a randomized fake data postgres database. This database is based of the actual db in photowall project.
Tests
```
npm test
```
### Writing tests
### Force update the staging
The tests are held in testcontainers [testcontainers-node](https://github.com/testcontainers/testcontainers-node). One container holding a test postgres database and one container started from the Dockerfile containing the Apollo GraphQL server. These containers have connections with each other.
Each test is build around inserting fake data in the empty db, fetching that data through the GraphQL and with raw Sql queries and then comparing the results.
To write new inserts into the DB generate sql files with js in the src/**test**/db_generator tool. Then load the new sql file in the containerSetup.ts file.
When you have the data you need in the db, write tests in all.test.ts file following the pattern already set.
### Dump database schema
pg_dump \
--schema-only \
--no-owner \
--no-acl \
photowall > src/__test__/db/schema.sql
update 3
+11 -1
View File
@@ -52,7 +52,7 @@ Parameters:
Default: 443
HealthCheckPath:
Type: String
Default: /.well-known/apollo/server-health
Default: /health
Certificate:
Type: String
@@ -134,6 +134,16 @@ Resources:
ValueFrom: !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${EnvironmentName}/graphql-api/DATABASE_URL'
- Name: 'COGNITO_POOL_ID'
ValueFrom: !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${EnvironmentName}/cognito/ADMIN_POOL_ID'
- Name: 'COGNITO_LOGIN_CLIENT_ID'
ValueFrom: !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${EnvironmentName}/cognito/GRAPHQL_WEB_CLIENT_ID'
- Name: 'COGNITO_LOGIN_CLIENT_SECRET'
ValueFrom: !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${EnvironmentName}/cognito/GRAPHQL_WEB_CLIENT_SECRET'
- Name: 'COGNITO_LOGIN_CLIENT_URL'
ValueFrom: !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${EnvironmentName}/cognito/GRAPHQL_AUTH_URL'
- Name: 'WEB_CLIENT_USERNAME'
ValueFrom: !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${EnvironmentName}/GRAPHQL_WEB_CLIENT_USERNAME'
- Name: 'WEB_CLIENT_PASSWORD'
ValueFrom: !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${EnvironmentName}/GRAPHQL_WEB_CLIENT_PASSWORD'
- Name: 'INTERIORS_URL'
ValueFrom: !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${EnvironmentName}/INTERIORS_URL'
- Name: 'INTERIORS_TOKEN'
+3
View File
@@ -12,6 +12,9 @@ services:
environment:
- ENVIRONMENT_NAME=${ENVIRONMENT_NAME}
- COGNITO_POOL_ID=eu-west-1_3O4VfvPn7
- COGNITO_LOGIN_CLIENT_ID=${COGNITO_LOGIN_CLIENT_ID}
- COGNITO_LOGIN_CLIENT_SECRET=${COGNITO_LOGIN_CLIENT_SECRET}
- COGNITO_LOGIN_CLIENT_URL=${COGNITO_LOGIN_CLIENT_URL}
- DATABASE_URL=${DATABASE_URL}
- INTERIORS_TOKEN=${INTERIORS_TOKEN}
- INTERIORS_URL=${INTERIORS_URL}
+3
View File
@@ -14,6 +14,9 @@ services:
environment:
- ENVIRONMENT_NAME=${ENVIRONMENT_NAME}
- COGNITO_POOL_ID=eu-west-1_3O4VfvPn7
- COGNITO_LOGIN_CLIENT_ID=${COGNITO_LOGIN_CLIENT_ID}
- COGNITO_LOGIN_CLIENT_SECRET=${COGNITO_LOGIN_CLIENT_SECRET}
- COGNITO_LOGIN_CLIENT_URL=${COGNITO_LOGIN_CLIENT_URL}
- DATABASE_URL=${DATABASE_URL}
- INTERIORS_TOKEN=${INTERIORS_TOKEN}
- INTERIORS_URL=${INTERIORS_URL}
+2606 -3896
View File
File diff suppressed because it is too large Load Diff
+24 -30
View File
@@ -4,11 +4,8 @@
"description": "Photowall GraphQL API",
"main": "src/index.ts",
"scripts": {
"exportSQL": "cd src/__test__/db_generator/ && npm install && node index.js && cd ../../../",
"test": "npm run exportSQL && jest --detectOpenHandles",
"test:dev": "npm run exportSQL && jest --watch",
"unit": "jest --testPathIgnorePatterns=\"src/__test__/all.test.ts\"",
"unit:dev": "jest --testPathIgnorePatterns=\"src/__test__/all.test.ts\" --watch src/**/*",
"test": "jest",
"test:dev": "jest --watch src/**/*",
"test:manual": "cd manual-tests && ts-node test-scopes.ts"
},
"engines": {
@@ -17,47 +14,44 @@
"author": "",
"license": "ISC",
"dependencies": {
"@aws-sdk/client-s3": "^3.194.0",
"@aws-sdk/client-sqs": "^3.194.0",
"@aws-sdk/client-translate": "^3.195.0",
"@aws-sdk/s3-request-presigner": "^3.194.0",
"@newrelic/apollo-server-plugin": "^2.0.1",
"apollo-datasource": "^3.3.2",
"apollo-datasource-rest": "^3.7.0",
"apollo-server": "^3.10.3",
"apollo-server-caching": "^3.3.0",
"async-redis": "^2.0.0",
"axios": "^1.1.3",
"@apollo/datasource-rest": "^4.3.2",
"@apollo/server": "^4.2.0",
"@apollo/utils.keyvaluecache": "^2.0.0",
"@aws-sdk/client-s3": "^3.216.0",
"@aws-sdk/client-sqs": "^3.216.0",
"@aws-sdk/client-translate": "^3.216.0",
"@aws-sdk/s3-request-presigner": "^3.216.0",
"@newrelic/apollo-server-plugin": "^2.1.0",
"axios": "^1.2.0",
"body-parser": "^1.20.1",
"cors": "^2.8.5",
"datasource-sql": "^2.0.1",
"dotenv": "^16.0.3",
"express": "^4.18.2",
"graphql": "^16.6.0",
"graphql-scalars": "^1.20.0",
"graphql-scalars": "^1.20.1",
"jsonwebtoken": "^8.5.1",
"jwk-to-pem": "^2.0.5",
"knex": "^2.3.0",
"knex-stringcase": "^1.4.6",
"newrelic": "^9.4.0",
"newrelic": "^9.7.0",
"nodemon": "^2.0.20",
"pg": "^8.8.0",
"pg-hstore": "^2.3.4",
"prettier": "^2.7.1",
"prettier": "^2.8.0",
"slug": "^8.2.2",
"stringcase": "^4.3.1",
"ts-node": "^10.9.1",
"typescript": "^4.8.4",
"util": "^0.12.5",
"validator": "^13.7.0"
"typescript": "^4.9.3",
"util": "^0.12.5"
},
"devDependencies": {
"@types/jest": "^29.2.0",
"@typescript-eslint/eslint-plugin": "^5.41.0",
"@typescript-eslint/parser": "^5.41.0",
"eslint": "^8.26.0",
"@types/jest": "^29.2.3",
"@typescript-eslint/eslint-plugin": "^5.44.0",
"@typescript-eslint/parser": "^5.44.0",
"eslint": "^8.28.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.2.1",
"isomorphic-fetch": "^3.0.0",
"jest": "^29.2.2",
"testcontainers": "^8.16.0",
"jest": "^29.3.1",
"ts-jest": "^29.0.3"
}
}
-281
View File
@@ -1,281 +0,0 @@
import fetch from 'isomorphic-fetch';
import { IAllTestContainers, createAllTestContainers } from './containerSetup';
jest.setTimeout(18000_000);
describe('GraphQL Apollo tests', () => {
let allContainers: IAllTestContainers;
beforeAll(async () => {
allContainers = await createAllTestContainers();
});
afterAll(async () => {
await allContainers.stopAll();
});
describe('Setup containers', () => {
it('should have a trivial test', () => {
expect(true).toBe(true);
});
it('should have access to containers', () => {
expect(allContainers).toBeDefined();
});
it('test date on db testcontainer', async () => {
const res = await allContainers.db.raw('select now()');
expect(res.rows[0]['now']).toBeInstanceOf(Date);
});
it('healthcheck on api testcontainer', async () => {
const port = allContainers.apiContainer.getMappedPort(4000);
const response = await fetch(
`http://localhost:${port}/.well-known/apollo/server-health`,
{
method: 'GET',
},
);
const resp = await response.json();
expect(resp.status).toBe('pass');
});
it('should have some basedata', async () => {
const response = await allContainers.db.raw(
`SELECT * FROM locales LIMIT 1;`,
);
expect(response.rows[0].value).toBe('sv_SE');
expect(response.rows[0].name).toBe('Swedish (Sweden)');
});
});
describe('Designer(id: x)', () => {
it('should be possible to fetch a design from id', async () => {
// CONTROL
const db_response = await allContainers.db.raw(
`SELECT * FROM designers WHERE designerid=2;`,
);
const controlData = db_response.rows[0];
// --------------
const port = allContainers.apiContainer.getMappedPort(4000);
const response = await fetch(`http://localhost:${port}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
query: `
{
designer(id: 2) {
id
name
path
}
}`,
}),
});
const resp = await response.json();
const designer = resp.data.designer;
expect(designer.id).toBe('2');
expect(designer.name).toBe(controlData.name);
expect(designer.path).toBe(controlData.path);
});
it('should be possible to fetch a designers with limit', async () => {
// CONTROL
const db_response = await allContainers.db.raw(
`SELECT * FROM designers ORDER BY name LIMIT 3;`,
);
const controlData = db_response.rows;
// -------------------
const port = allContainers.apiContainer.getMappedPort(4000);
const response = await fetch(`http://localhost:${port}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
query: `
{
designers(limit: 3) {
id
name
path
}
}`,
}),
});
const resp = await response.json();
const designers = resp.data.designers;
expect(designers.length).toBe(3);
expect(designers[0].name).toBe(controlData[0].name);
expect(designers[1].name).toBe(controlData[1].name);
expect(designers[2].name).toBe(controlData[2].name);
});
});
// describe('Order(id: x)', () => {
// it('should get correct order data', async () => {
// // CONTROL
// // Order
// const order_response = await allContainers.db.raw(
// `SELECT * FROM orders WHERE id = 1;`,
// );
// const orderControlData = order_response.rows[0];
// // Market
// const market_response = await allContainers.db.raw(
// `SELECT * FROM markets WHERE name='${orderControlData.market}';`,
// );
// 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;`,
// );
// const orderRowsControlData = orderrow_response.rows;
// // ----------------------------------
// const port = allContainers.apiContainer.getMappedPort(4000);
// const response = await fetch(`http://localhost:${port}`, {
// method: 'POST',
// headers: { 'Content-Type': 'application/json' },
// body: JSON.stringify({
// query: `
// {
// order(id: 1) {
// id
// locale {
// id
// value
// }
// market {
// id
// name
// vat
// currency
// priceAdjustment
// }
// rows {
// id
// artNo
// orderId
// }
// }
// }
// `,
// }),
// });
// const resp = await response.json();
// const order = resp.data.order;
// // Order
// expect(order.id).toBe(`${orderControlData.id}`);
// // Market
// expect(order.market.id).toBe(`${marketControlData.id}`);
// expect(order.market.name).toBe(marketControlData.name);
// expect(order.market.vat).toBe(parseFloat(marketControlData.vat));
// expect(order.market.currency).toBe(marketControlData.currency);
// expect(order.market.priceAdjustment).toBe(
// 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);
// expect(order.rows[1].id).toBe('' + orderRowsControlData[1].rowid);
// expect(order.rows[2].id).toBe('' + orderRowsControlData[2].rowid);
// expect(order.rows[1].orderId).toBe(orderRowsControlData[1].orderid);
// });
// });
describe('product(id: x)', () => {
it('should respond with same id for trivial test', async () => {
// CONTROL
// product
const product_response = await allContainers.db.raw(
`SELECT productid FROM "product-products" WHERE productid = 1;`,
);
const productControlData = product_response.rows[0];
// ---------------------------------------------
const port = allContainers.apiContainer.getMappedPort(4000);
const response = await fetch(`http://localhost:${port}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
query: `
{
product(id: 1) {
id
}
}
`,
}),
});
const resp = await response.json();
const product = resp.data.product;
expect(product.id).toBe('' + productControlData.productid);
});
});
describe('products(pagination: .., limit: ..)', () => {
it('should return products with a limit', async () => {
// CONTROL
// products
const products_response = await allContainers.db.raw(
`SELECT productid FROM "product-products" LIMIT 10;`,
);
const productsControlData = products_response.rows.map((item) => {
return '' + item.productid;
});
// --------------------------------------------------
const port = allContainers.apiContainer.getMappedPort(4000);
const response = await fetch(`http://localhost:${port}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
query: `
{
products(pagination: {
limit: 10
}, filter: {
visible: true,
browsable: true
}) {
items {
id
}
}
}
`,
}),
});
const resp = await response.json();
const products = resp.data.products.items.map((item) => {
return item.id;
});
expect(products).toEqual(expect.arrayContaining(productsControlData));
});
});
});
-147
View File
@@ -1,147 +0,0 @@
import fs from 'fs';
import { resolve } from 'path';
import {
GenericContainer,
Network,
StartedNetwork,
StartedTestContainer,
Wait,
} from 'testcontainers';
import { Knex, knex } from 'knex';
// import knexTinyLogger from 'knex-tiny-logger';
export const DbNetworkName = 'postgres_container';
export const ApiNetworkName = 'api_container';
const allContainers = {
version: 0,
};
const runFile = async (db, file) => {
const sql = fs.readFileSync(resolve(__dirname, file)).toString();
await db.raw(sql);
};
const createKnexDb = (host: string, mappedPort: number, database: string) => {
const connection = `postgresql://testuser:test@${host}:${mappedPort}/${database}`;
// console.log(`connection`, connection);
const db = knex({
client: 'pg',
connection: connection,
pool: { min: 0 },
});
// knexTinyLogger(db);
return db;
};
export interface IAllTestContainers {
version: number;
dbContainer?: StartedTestContainer;
db?: Knex;
apiContainer?: StartedTestContainer;
network?: StartedNetwork;
stopAll?: any;
}
export const createAllTestContainers =
async (): Promise<IAllTestContainers> => {
const network = await new Network().start();
// ----------------------------------
// DB container
const dbContainer = await new GenericContainer('postgres')
.withNetworkMode(network.getName())
.withNetworkAliases(DbNetworkName)
.withEnv('POSTGRES_USER', 'testuser')
.withEnv('POSTGRES_PASSWORD', 'test')
.withEnv('POSTGRES_DB', 'apidb')
.withExposedPorts(5432)
.start();
// const dbLogStream = await dbContainer.logs();
// dbLogStream
// .on('data', (line) => console.log(line))
// .on('err', (line) => console.error(line))
// .on('end', () => console.log('Stream closed'));
const dbMappedPort = dbContainer.getMappedPort(5432);
const dbHost = dbContainer.getHost();
// ----------------------------------
// Knex DB
const initialDb = createKnexDb(dbHost, dbMappedPort, 'postgres');
await initialDb.raw('CREATE DATABASE photowalltest1');
await initialDb.destroy();
const db = createKnexDb(dbHost, dbMappedPort, 'photowalltest1');
await runFile(db, 'db/schema.sql');
await runFile(db, 'db/base/locales.sql');
await runFile(db, 'db/base/product-currencies.sql');
await runFile(db, 'db/base/markets.sql');
await runFile(db, 'db/base/market_locales.sql');
await runFile(db, 'db/base/i18n-territories.sql');
// Other
await runFile(db, 'db/data/addresses.sql');
// Designers
await runFile(db, 'db/data/designers.sql');
await runFile(db, 'db/data/designer_texts.sql');
await runFile(db, 'db/data/designers-blocked.sql');
// Orders
await runFile(db, 'db/data/orders.sql');
// Products
await runFile(db, 'db/data/product-products.sql');
// Set the public as the default schema
await db.raw('set search_path to "public"');
// ----------------------------------
// Api Container
const buildContext = resolve(__dirname, '../../');
const nodeContainer = await GenericContainer.fromDockerfile(
buildContext,
).build();
const dbIpAddress = dbContainer.getIpAddress(network.getName());
const apiContainer = await nodeContainer
.withNetworkMode(network.getName())
.withNetworkAliases(ApiNetworkName)
.withExposedPorts(4000)
.withEnv(
'DATABASE_URL',
`postgresql://testuser:test@${dbIpAddress}:5432/photowalltest1`,
)
.withEnv('NODE_ENV', 'test')
.withEnv('COGNITO_POOL_ID', 'eu-west-1_3O4VfvPn7')
.withWaitStrategy(
Wait.forLogMessage('Server is running on http://localhost:4000'),
)
.start();
const stream = await apiContainer.logs();
stream
.on('data', (line) => console.log(line))
.on('err', (line) => console.error(line))
.on('end', () => console.log('Stream closed'));
Object.assign(allContainers, {
version: Math.round(Math.random() * 999999),
dbContainer,
db,
apiContainer,
network,
stopAll: async () => {
await dbContainer.stop();
await apiContainer.stop();
await network.stop();
await db.destroy();
},
});
return allContainers;
};
-52
View File
@@ -1,52 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: delivery-methods; Type: TABLE DATA; Schema: public; Owner: postgres
--
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (1, 'postenStandard', '2009-04-22 16:00:49.576417+02', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (2, 'postenBusiness', '2009-04-22 16:01:01.451183+02', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (3, 'noDelivery', '2009-05-12 10:25:55.659379+02', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (4, 'myPack', '2009-09-14 11:02:15.958453+02', '2009-09-22 15:53:35.896786+02');
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (5, 'dbSchenker', '2012-05-15 15:06:36.718661+02', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (6, 'dbSchenkerBHP', '2012-09-04 17:13:46.63224+02', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (7, 'dbSchenkerBPA', '2012-09-04 17:13:46.63224+02', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (8, 'bringPrivate', '2015-10-14 17:50:39.041084+02', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (9, 'bringCompany', '2015-10-14 17:50:39.041084+02', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (10, 'dhl', '2015-10-30 11:25:13.821867+01', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (11, 'samplesDelivery', '2018-10-24 13:15:11.201806+02', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (12, 'dhlFreightPrivate', '2019-05-23 00:19:45.934549+02', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (13, 'dhlFreightBusiness', '2019-05-23 00:19:45.934549+02', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (14, 'dhlExpress', '2019-05-23 00:19:45.934549+02', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (15, 'dhlEconomyEU', '2020-09-28 15:52:11.988645+02', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (16, 'dhlEconomyWorld', '2020-09-28 15:52:11.988645+02', NULL);
INSERT INTO public."delivery-methods" (id, name, inserted, updated) VALUES (17, 'dhlEconomyUK', '2020-12-21 12:24:35.376572+01', NULL);
--
-- Name: Delivery-methods_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres
--
SELECT pg_catalog.setval('public."Delivery-methods_id_seq"', 4, true);
--
-- PostgreSQL database dump complete
--
-295
View File
@@ -1,295 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: i18n-territories; Type: TABLE DATA; Schema: public; Owner: postgres
--
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AD', '2009-09-11 14:21:48.359545+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AE', '2009-09-11 14:21:48.473597+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AF', '2009-09-11 14:21:48.481851+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AG', '2009-09-11 14:21:48.490814+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AI', '2009-09-11 14:21:48.499602+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AL', '2009-09-11 14:21:48.507899+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AM', '2009-09-11 14:21:48.516151+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AN', '2009-09-11 14:21:48.524817+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AO', '2009-09-11 14:21:48.533183+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AQ', '2009-09-11 14:21:48.541496+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AR', '2009-09-11 14:21:48.549794+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AS', '2009-09-11 14:21:48.558571+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AU', '2009-09-11 14:21:48.575207+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AW', '2009-09-11 14:21:48.583469+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AX', '2009-09-11 14:21:48.592206+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AZ', '2009-09-11 14:21:48.600662+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BA', '2009-09-11 14:21:48.608984+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BB', '2009-09-11 14:21:48.617311+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BD', '2009-09-11 14:21:48.626067+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BF', '2009-09-11 14:21:48.642871+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BH', '2009-09-11 14:21:48.660668+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BI', '2009-09-11 14:21:48.668959+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BJ', '2009-09-11 14:21:48.677244+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BL', '2009-09-11 14:21:48.685473+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BM', '2009-09-11 14:21:48.693728+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BN', '2009-09-11 14:21:48.702055+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BO', '2009-09-11 14:21:48.710416+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BR', '2009-09-11 14:21:48.718698+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BS', '2009-09-11 14:21:48.726934+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BT', '2009-09-11 14:21:48.735247+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BV', '2009-09-11 14:21:48.743504+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BW', '2009-09-11 14:21:48.751763+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BY', '2009-09-11 14:21:48.763735+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BZ', '2009-09-11 14:21:48.772066+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CA', '2009-09-11 14:21:48.780465+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CC', '2009-09-11 14:21:48.788834+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CD', '2009-09-11 14:21:48.79711+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CF', '2009-09-11 14:21:48.805416+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CG', '2009-09-11 14:21:48.813711+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CH', '2009-09-11 14:21:48.821992+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CI', '2009-09-11 14:21:48.830315+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CK', '2009-09-11 14:21:48.838629+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CL', '2009-09-11 14:21:48.846914+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CM', '2009-09-11 14:21:48.855183+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CN', '2009-09-11 14:21:48.863462+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CO', '2009-09-11 14:21:48.871788+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CR', '2009-09-11 14:21:48.880079+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CS', '2009-09-11 14:21:48.888431+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CU', '2009-09-11 14:21:48.896702+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CV', '2009-09-11 14:21:48.905052+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CX', '2009-09-11 14:21:48.913332+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('DJ', '2009-09-11 14:21:48.946603+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('DM', '2009-09-11 14:21:48.963323+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('DO', '2009-09-11 14:21:48.971667+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('DZ', '2009-09-11 14:21:48.979989+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('EC', '2009-09-11 14:21:48.988356+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('EG', '2009-09-11 14:21:49.004988+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('EH', '2009-09-11 14:21:49.013295+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('ER', '2009-09-11 14:21:49.021624+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('ET', '2009-09-11 14:21:49.038324+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('FJ', '2009-09-11 14:21:49.055159+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('FK', '2009-09-11 14:21:49.064213+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('FM', '2009-09-11 14:21:49.072887+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('FO', '2009-09-11 14:21:49.081242+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GA', '2009-09-11 14:21:49.098606+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GD', '2009-09-11 14:21:49.115717+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GE', '2009-09-11 14:21:49.124034+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GF', '2009-09-11 14:21:49.13406+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GG', '2009-09-11 14:21:49.142766+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GH', '2009-09-11 14:21:49.151121+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GI', '2009-09-11 14:21:49.159562+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GL', '2009-09-11 14:21:49.168556+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GM', '2009-09-11 14:21:49.177286+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GN', '2009-09-11 14:21:49.185639+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GP', '2009-09-11 14:21:49.19395+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GQ', '2009-09-11 14:21:49.203071+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GS', '2009-09-11 14:21:49.22012+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GT', '2009-09-11 14:21:49.228481+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GU', '2009-09-11 14:21:49.236821+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GW', '2009-09-11 14:21:49.245244+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GY', '2009-09-11 14:21:49.25359+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('HK', '2009-09-11 14:21:49.262134+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('HM', '2009-09-11 14:21:49.270537+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('HN', '2009-09-11 14:21:49.278958+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('HT', '2009-09-11 14:21:49.295669+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('ID', '2009-09-11 14:21:49.312469+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('IL', '2009-09-11 14:21:49.329283+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('IM', '2009-09-11 14:21:49.33766+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('IN', '2009-09-11 14:21:49.346056+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('IO', '2009-09-11 14:21:49.354417+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('IQ', '2009-09-11 14:21:49.362842+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('IR', '2009-09-11 14:21:49.372169+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('IS', '2009-09-11 14:21:49.380569+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('JE', '2009-09-11 14:21:49.397412+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('JM', '2009-09-11 14:21:49.405806+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('JO', '2009-09-11 14:21:49.414204+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('JP', '2009-09-11 14:21:49.422599+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('KE', '2009-09-11 14:21:49.431026+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('KG', '2009-09-11 14:21:49.439486+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('KH', '2009-09-11 14:21:49.448048+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('KI', '2009-09-11 14:21:49.456425+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('KM', '2009-09-11 14:21:49.464784+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('KN', '2009-09-11 14:21:49.473625+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('KP', '2009-09-11 14:21:49.482337+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('KR', '2009-09-11 14:21:49.491191+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('KW', '2009-09-11 14:21:49.499933+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('KY', '2009-09-11 14:21:49.508373+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('KZ', '2009-09-11 14:21:49.516703+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('LA', '2009-09-11 14:21:49.525007+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('LB', '2009-09-11 14:21:49.533318+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('LC', '2009-09-11 14:21:49.542203+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('LI', '2009-09-11 14:21:49.550845+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('LK', '2009-09-11 14:21:49.559292+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('LR', '2009-09-11 14:21:49.567623+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('LS', '2009-09-11 14:21:49.576619+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('LY', '2009-09-11 14:21:49.611123+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MA', '2009-09-11 14:21:49.619941+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MC', '2009-09-11 14:21:49.628294+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MD', '2009-09-11 14:21:49.636606+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('ME', '2009-09-11 14:21:49.644965+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MF', '2009-09-11 14:21:49.653372+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MG', '2009-09-11 14:21:49.661736+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MH', '2009-09-11 14:21:49.670092+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MK', '2009-09-11 14:21:49.678464+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('ML', '2009-09-11 14:21:49.686893+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MM', '2009-09-11 14:21:49.695247+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MN', '2009-09-11 14:21:49.703599+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MO', '2009-09-11 14:21:49.712075+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MP', '2009-09-11 14:21:49.720459+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MQ', '2009-09-11 14:21:49.728857+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MR', '2009-09-11 14:21:49.737161+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MS', '2009-09-11 14:21:49.745506+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MU', '2009-09-11 14:21:49.762465+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MV', '2009-09-11 14:21:49.773923+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MW', '2009-09-11 14:21:49.782402+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MX', '2009-09-11 14:21:49.790857+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MY', '2009-09-11 14:21:49.799214+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MZ', '2009-09-11 14:21:49.807579+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('NA', '2009-09-11 14:21:49.815924+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('NC', '2009-09-11 14:21:49.824254+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('NE', '2009-09-11 14:21:49.832649+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('NF', '2009-09-11 14:21:49.841015+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('NG', '2009-09-11 14:21:49.847925+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('NI', '2009-09-11 14:21:49.856892+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('NP', '2009-09-11 14:21:49.882406+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('NR', '2009-09-11 14:21:49.89142+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('NU', '2009-09-11 14:21:49.900234+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('NZ', '2009-09-11 14:21:49.908775+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('OM', '2009-09-11 14:21:49.917329+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PA', '2009-09-11 14:21:49.926374+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PE', '2009-09-11 14:21:49.935309+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PF', '2009-09-11 14:21:49.943626+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PG', '2009-09-11 14:21:49.951928+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PH', '2009-09-11 14:21:49.961258+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PK', '2009-09-11 14:21:49.970109+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PM', '2009-09-11 14:21:49.986796+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PN', '2009-09-11 14:21:49.995913+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PR', '2009-09-11 14:21:50.004712+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PS', '2009-09-11 14:21:50.013073+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PW', '2009-09-11 14:21:50.029779+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PY', '2009-09-11 14:21:50.038185+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('QA', '2009-09-11 14:21:50.04652+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('QO', '2009-09-11 14:21:50.054851+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('QU', '2009-09-11 14:21:50.063199+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('RE', '2009-09-11 14:21:50.071605+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('RS', '2009-09-11 14:21:50.088273+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('RU', '2009-09-11 14:21:50.096693+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('RW', '2009-09-11 14:21:50.105059+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SA', '2009-09-11 14:21:50.113396+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SB', '2009-09-11 14:21:50.121735+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SC', '2009-09-11 14:21:50.131459+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SD', '2009-09-11 14:21:50.139829+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SG', '2009-09-11 14:21:50.156524+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SH', '2009-09-11 14:21:50.16493+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SJ', '2009-09-11 14:21:50.18172+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SL', '2009-09-11 14:21:50.198564+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SM', '2009-09-11 14:21:50.206887+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SN', '2009-09-11 14:21:50.215248+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SO', '2009-09-11 14:21:50.223573+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SR', '2009-09-11 14:21:50.231944+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('ST', '2009-09-11 14:21:50.240464+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SV', '2009-09-11 14:21:50.248718+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SY', '2009-09-11 14:21:50.256932+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SZ', '2009-09-11 14:21:50.266061+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TC', '2009-09-11 14:21:50.274742+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TD', '2009-09-11 14:21:50.282964+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TF', '2009-09-11 14:21:50.291184+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TG', '2009-09-11 14:21:50.300216+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TH', '2009-09-11 14:21:50.308786+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TJ', '2009-09-11 14:21:50.31706+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TK', '2009-09-11 14:21:50.325292+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TL', '2009-09-11 14:21:50.334162+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TM', '2009-09-11 14:21:50.342765+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TN', '2009-09-11 14:21:50.351122+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TO', '2009-09-11 14:21:50.359415+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TR', '2009-09-11 14:21:50.369228+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TT', '2009-09-11 14:21:50.377852+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TV', '2009-09-11 14:21:50.386079+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TW', '2009-09-11 14:21:50.394273+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('TZ', '2009-09-11 14:21:50.403214+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('UA', '2009-09-11 14:21:50.411864+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('UG', '2009-09-11 14:21:50.420161+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('UM', '2009-09-11 14:21:50.428436+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('US', '2009-09-11 14:21:50.436635+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('UY', '2009-09-11 14:21:50.444901+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('UZ', '2009-09-11 14:21:50.453148+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('VA', '2009-09-11 14:21:50.461376+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('VC', '2009-09-11 14:21:50.472681+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('VE', '2009-09-11 14:21:50.48098+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('VG', '2009-09-11 14:21:50.489231+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('VI', '2009-09-11 14:21:50.497457+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('VN', '2009-09-11 14:21:50.50568+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('VU', '2009-09-11 14:21:50.513923+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('WF', '2009-09-11 14:21:50.52215+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('WS', '2009-09-11 14:21:50.530416+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('YE', '2009-09-11 14:21:50.538664+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('YT', '2009-09-11 14:21:50.546885+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('ZA', '2009-09-11 14:21:50.555159+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('ZM', '2009-09-11 14:21:50.56334+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('ZW', '2009-09-11 14:21:50.57228+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('ZZ', '2009-09-11 14:21:50.580983+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BQ', '2009-09-11 14:21:53.448014+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CT', '2009-09-11 14:21:53.503665+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('DD', '2009-09-11 14:21:53.523317+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('FQ', '2009-09-11 14:21:53.57364+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('FX', '2009-09-11 14:21:53.58423+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('JT', '2009-09-11 14:21:53.682856+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MI', '2009-09-11 14:21:53.775088+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('NQ', '2009-09-11 14:21:53.842611+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('NT', '2009-09-11 14:21:53.85353+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PC', '2009-09-11 14:21:53.871294+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PU', '2009-09-11 14:21:53.906542+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PZ', '2009-09-11 14:21:53.920157+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SU', '2009-09-11 14:21:53.983085+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('VD', '2009-09-11 14:21:54.052855+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('WK', '2009-09-11 14:21:54.075708+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('YD', '2009-09-11 14:21:54.086867+02', '2016-12-20 14:25:00.070619+01', 1);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SE', '2009-09-11 14:21:50.148203+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('DK', '2009-09-11 14:21:48.954969+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('FI', '2009-09-11 14:21:49.046661+02', '2016-12-20 14:25:00.070619+01', 1.24);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('NO', '2009-09-11 14:21:49.874065+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GB', '2009-09-11 14:21:49.107364+02', '2016-12-20 14:25:00.070619+01', 1.20);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('NL', '2009-09-11 14:21:49.86574+02', '2016-12-20 14:25:00.070619+01', 1.21);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('AT', '2009-09-11 14:21:48.566873+02', '2016-12-20 14:25:00.070619+01', 1.20);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('LT', '2009-09-11 14:21:49.585432+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('HR', '2009-09-11 14:21:49.287368+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BE', '2009-09-11 14:21:48.634564+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('BG', '2009-09-11 14:21:48.651178+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CY', '2009-09-11 14:21:48.921622+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('CZ', '2009-09-11 14:21:48.929968+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('EE', '2009-09-11 14:21:48.996629+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('GR', '2009-09-11 14:21:49.211729+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('HU', '2009-09-11 14:21:49.304041+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('IE', '2009-09-11 14:21:49.320905+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('LU', '2009-09-11 14:21:49.593745+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('LV', '2009-09-11 14:21:49.602105+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('MT', '2009-09-11 14:21:49.753887+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PT', '2009-09-11 14:21:50.021405+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('RO', '2009-09-11 14:21:50.079937+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SI', '2009-09-11 14:21:50.173375+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('SK', '2009-09-11 14:21:50.190172+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('EU', '2012-05-15 15:06:36.718661+02', '2016-12-20 14:25:00.070619+01', 1.25);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('FR', '2009-09-11 14:21:49.089608+02', '2017-02-01 09:04:44.68669+01', 1.2);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('ES', '2009-09-11 14:21:49.029972+02', '2018-09-05 15:00:41.322312+02', 1.21);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('PL', '2009-09-11 14:21:49.978446+02', '2018-10-05 14:15:33.079792+02', 1.23);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('IT', '2009-09-11 14:21:49.38905+02', '2020-12-18 09:36:55.721148+01', 1.22);
INSERT INTO public."i18n-territories" (iso2char, inserted, updated, vat) VALUES ('DE', '2009-09-11 14:21:48.938302+02', '2021-01-01 11:55:04.349216+01', 1.19);
--
-- PostgreSQL database dump complete
--
-53
View File
@@ -1,53 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: locales; Type: TABLE DATA; Schema: public; Owner: postgres
--
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (1, 'sv_SE', NULL, 'Swedish (Sweden)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (2, 'nn_NO', NULL, 'Norwegian Nynorsk (Norway)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (3, 'en_GB', NULL, 'English (United Kingdom)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (4, 'da_DK', NULL, 'Danish (Denmark)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (5, 'fi_FI', NULL, 'Finnish (Finland)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (7, 'en_EU', NULL, 'English (Europe)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (8, 'de_DE', NULL, 'German (Germany)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (9, 'nl_NL', NULL, 'Dutch (Netherlands)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (10, 'de_AT', 8, 'German (Austria)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (11, 'en_US', NULL, 'English (United States)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (12, 'es_ES', NULL, 'Spanish (Spain)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (13, 'fr_FR', NULL, 'French (France)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (14, 'pl_PL', NULL, 'Polish (Poland)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (15, 'it_IT', NULL, 'Italian (Italy)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (16, 'fr_BE', 13, 'French (Belgium)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (17, 'nl_BE', 9, 'Dutch (Belgium)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (20, 'en_CA', 3, 'English (Canada)');
INSERT INTO public.locales (id, value, fallback_id, name) VALUES (21, 'fr_CA', 13, 'French (Canada)');
--
-- Name: locales_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres
--
SELECT pg_catalog.setval('public.locales_id_seq', 21, true);
--
-- PostgreSQL database dump complete
--
-53
View File
@@ -1,53 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: market_locales; Type: TABLE DATA; Schema: public; Owner: postgres
--
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (1, 1, 1, 'Sweden');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (2, 2, 2, 'Norway');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (3, 3, 3, 'United Kingdom');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (4, 4, 4, 'Denmark');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (5, 5, 5, 'Finland');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (6, 7, 7, 'International');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (7, 8, 8, 'Germany');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (8, 9, 9, 'Netherlands');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (9, 10, 10, 'Austria');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (10, 11, 11, 'USA');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (11, 12, 12, 'Spain');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (12, 13, 13, 'France');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (13, 14, 14, 'Poland');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (14, 15, 15, 'Italy');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (15, 16, 16, 'Belgium (French)');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (16, 16, 17, 'Belgium (Dutch)');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (21, 19, 20, 'Canada (English)');
INSERT INTO public.market_locales (id, market_id, locale_id, name) VALUES (22, 19, 21, 'Canada (French)');
--
-- Name: market_locales_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres
--
SELECT pg_catalog.setval('public.market_locales_id_seq', 22, true);
--
-- PostgreSQL database dump complete
--
-51
View File
@@ -1,51 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: markets; Type: TABLE DATA; Schema: public; Owner: postgres
--
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (1, 'SE', 1.25, 'SEK', 1);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (2, 'NO', 1.25, 'NOK', 1.032);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (3, 'GB', 1.20, 'GBP', 1.19);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (4, 'DK', 1.25, 'DKK', 1.2);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (5, 'FI', 1.24, 'EUR', 1.1165);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (7, 'GLOBAL', 1.25, 'EUR', 1.13);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (8, 'DE', 1.19, 'EUR', 1.13);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (9, 'NL', 1.21, 'EUR', 1.15);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (10, 'AT', 1.20, 'EUR', 1.1);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (11, 'US', 1, 'USD', 1.06);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (12, 'ES', 1.21, 'EUR', 1.13);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (13, 'FR', 1.20, 'EUR', 1.13);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (14, 'PL', 1.23, 'EUR', 0.8);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (15, 'IT', 1.22, 'EUR', 1);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (16, 'BE', 1.21, 'EUR', 1.15);
INSERT INTO public.markets (id, name, vat, currency, price_adjustment) VALUES (19, 'CA', 1, 'CAD', 1);
--
-- Name: markets_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres
--
SELECT pg_catalog.setval('public.markets_id_seq', 19, true);
--
-- PostgreSQL database dump complete
--
@@ -1,37 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: product-currencies; Type: TABLE DATA; Schema: public; Owner: postgres
--
INSERT INTO public."product-currencies" (iso3char, exchange_rate) VALUES ('SEK', 1);
INSERT INTO public."product-currencies" (iso3char, exchange_rate) VALUES ('CAD', 0.12);
INSERT INTO public."product-currencies" (iso3char, exchange_rate) VALUES ('DKK', 0.775000);
INSERT INTO public."product-currencies" (iso3char, exchange_rate) VALUES ('EUR', 0.100000);
INSERT INTO public."product-currencies" (iso3char, exchange_rate) VALUES ('GBP', 0.077600);
INSERT INTO public."product-currencies" (iso3char, exchange_rate) VALUES ('NOK', 0.915500);
INSERT INTO public."product-currencies" (iso3char, exchange_rate) VALUES ('PLN', 0.443200);
INSERT INTO public."product-currencies" (iso3char, exchange_rate) VALUES ('RUB', 5.232700);
INSERT INTO public."product-currencies" (iso3char, exchange_rate) VALUES ('USD', 0.119800);
--
-- PostgreSQL database dump complete
--
-66
View File
@@ -1,66 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: product-fields; Type: TABLE DATA; Schema: public; Owner: postgres
--
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (1, 'artNo', '2009-10-12 13:02:21.213474+02', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (2, 'name', '2009-10-12 13:02:21.230972+02', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (3, 'height', '2009-10-12 13:02:21.244131+02', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (4, 'orgArtNo', '2009-10-12 13:02:21.256221+02', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (5, 'width', '2009-10-12 13:02:21.269256+02', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (6, 'widths', '2009-10-12 13:02:22.008722+02', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (13, 'min-height', '2010-12-03 16:30:52.18902+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (14, 'min-width', '2010-12-03 16:30:52.18902+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (15, 'max-height', '2010-12-03 16:30:52.18902+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (16, 'max-width', '2010-12-03 16:30:52.18902+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (17, 'photowall_resolution', '2011-01-26 17:11:40.644271+01', '2011-02-24 16:23:18.871906+01');
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (18, 'canvas_resolution', '2011-02-24 16:23:18.871906+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (19, 'wallpaper_resolution', '2011-02-24 16:23:18.871906+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (20, 'lock_height', '2011-07-06 15:25:16.898145+02', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (21, 'additionalprice', '2012-01-24 13:15:18.053708+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (25, 'copyright', '2014-11-03 13:10:22.40505+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (26, 'proportions_warning', '2015-03-09 10:30:50.360263+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (27, 'margin_width_max', '2015-03-09 10:30:50.367125+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (28, 'margin_width_min', '2015-03-09 10:30:50.373814+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (29, 'margin_height_max', '2015-03-09 10:30:50.380639+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (30, 'margin_height_min', '2015-03-09 10:30:50.387071+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (31, 'focusXpoint', '2016-01-13 10:53:02.410018+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (32, 'focusYpoint', '2016-01-13 10:53:02.410018+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (33, 'focusXpoint2', '2016-01-13 10:53:02.410018+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (34, 'focusYpoint2', '2016-01-13 10:53:02.410018+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (35, 'repeating_pattern', '2016-01-13 10:53:02.410018+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (36, 'batch', '2016-01-13 10:53:02.410018+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (37, 'image_resolution', '2016-01-13 10:53:02.410018+01', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (41, 'print_file_width', '2017-06-27 18:42:46.213367+02', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (42, 'print_file_height', '2017-06-27 18:42:46.213367+02', NULL);
INSERT INTO public."product-fields" (fieldid, field, inserted, updated) VALUES (43, 'print_file_dpi', '2017-06-27 18:42:46.213367+02', NULL);
--
-- Name: product-fields_fieldid_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres
--
SELECT pg_catalog.setval('public."product-fields_fieldid_seq"', 43, true);
--
-- PostgreSQL database dump complete
--
-47
View File
@@ -1,47 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: addresses; Type: TABLE DATA; Schema: public; Owner: postgres
--
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '39668 Oswald Junctions', 'Treutel, Mayer and Tillman', 'IT', 'Jacobsfurt', '51622-8307', 'Izaiah', 'Johns', '', 'Arkansas - MN');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '23474 Marcus Spur', 'Keebler LLC', 'CA', 'West Llewellyn', '85249', 'Bessie', 'Stark', '', 'Alaska - MN');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '69697 Forrest Curve', 'Roob - Flatley', 'CA', 'South Ardith', '03343', 'Everette', 'Gutmann', '', 'New Mexico - TN');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '4963 Lebsack Mission', 'Russel - Sipes', 'BE', 'Willardmouth', '61382', 'Concepcion', 'Rodriguez', 'Haag Plaza', 'New Jersey - RI');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '9849 Orlo Plain', 'Wintheiser, Stoltenberg and Grant', 'PL', 'Georgettefort', '37245-4929', 'Kelton', 'Hamill', '', 'New Mexico - OR');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '500 Asha Mount', 'Rowe - Berge', 'DE', 'New Felipeberg', '05958-2134', 'Isaiah', 'Schuster', '', 'Alabama - AL');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '833 Torphy Canyon', 'Grant, Daugherty and Gorczany', 'NL', 'Mohrport', '21503-3865', 'Camylle', 'Morar', 'Runolfsdottir Estate', 'New Hampshire - HI');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '2535 Annalise Corner', 'Schowalter - Moen', 'IT', 'North Gaylord', '01220', 'Erika', 'Kilback', '', 'California - MN');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '33326 Bonita Harbor', 'Bechtelar, Littel and Lebsack', 'DE', 'Kuhicborough', '64112', 'Lourdes', 'Schneider', '', 'North Carolina - PA');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '8926 Strosin River', 'Weimann, Purdy and Hane', 'NO', 'Demondberg', '26478-3402', 'Cesar', 'OConner', 'Watsica Isle', 'Colorado - WY');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '4760 Konopelski Avenue', 'Zulauf Inc', 'GB', 'Lake Terrence', '30810-2357', 'Willard', 'Wintheiser', '', 'Idaho - MA');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '925 Ziemann Loop', 'Beahan Inc', 'NL', 'West Aniyahport', '55371-6794', 'Melvina', 'Wyman', '', 'New York - NC');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '808 Mike Avenue', 'Stiedemann - Haley', 'BE', 'Koeppside', '03629', 'Bulah', 'Reichel', '', 'Kansas - ID');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '95116 Romaguera Extensions', 'Zieme - Conn', 'CA', 'Wisozkburgh', '34631', 'Reuben', 'Veum', '', 'Ohio - AZ');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '5267 Whitney Road', 'Hodkiewicz, Upton and Blanda', 'AT', 'Lake Enid', '18934-3113', 'Mable', 'Haley', '', 'North Carolina - ID');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '2534 Stacy Shoal', 'Adams - Harvey', 'CA', 'OConnellport', '50629-5130', 'Jaleel', 'Kuhlman', 'Balistreri Pine', 'Connecticut - WA');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '13725 Electa Trafficway', 'Nicolas - Becker', 'IT', 'Jacobsonhaven', '64074-4276', 'Jayden', 'Lindgren', '', 'Georgia - IA');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '8484 Ryann Mission', 'Mayert - Monahan', 'AT', 'Robinberg', '79937', 'Libbie', 'Heathcote', 'Gleichner Flats', 'Michigan - ID');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '811 Ruthe Via', 'Hilpert - Goldner', 'GB', 'Lake Joaquin', '08670', 'Aiden', 'Howe', 'Ima Forest', 'Montana - ID');
INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (DEFAULT, '24977 Koepp Station', 'Vandervort, Wilkinson and Koepp', 'SE', 'Goodwinshire', '94552', 'Marcus', 'Hansen', 'Kelsie Point', 'Maryland - MO');
--
-- PostgreSQL database dump complete
--
-208
View File
@@ -1,208 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: designer_texts; Type: TABLE DATA; Schema: public; Owner: postgres
--
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 1, 'Ex proident', 'Ut ut irure minim ut minim proident dolor ex cupidatat id proident minim veniam qui velit. Non commodo sunt cillum dolore est do cillum aute velit eiusmod. Culpa enim consequat reprehenderit ad id et et cillum et irure. Ex adipisicing consectetur nostrud non fugiat mollit fugiat culpa excepteur nostrud tempor. Sit ad eu quis culpa ipsum.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 2, 'Quis ullamco', 'Nostrud ut irure sunt incididunt consectetur. Incididunt exercitation et consectetur sint proident id pariatur mollit do excepteur eu commodo deserunt quis. Et irure anim eiusmod amet voluptate non nulla occaecat aliqua. Veniam culpa aute adipisicing fugiat amet nisi est ut aliqua dolore anim in occaecat esse voluptate. Dolor est sunt ad deserunt cupidatat sit enim deserunt ea non occaecat sunt quis consectetur.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 3, 'Est', 'Ullamco aliqua dolor mollit non aliqua excepteur cillum duis. Exercitation minim veniam adipisicing tempor magna. Adipisicing nisi eu nulla excepteur excepteur sint cillum qui labore. Aute labore ea est magna magna aute culpa duis cillum culpa ea et et.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 4, 'Aute', 'Anim aute aute laboris cupidatat non id. Aliqua amet Lorem veniam duis enim sint nostrud sit ut est magna consequat nisi. Magna eu nulla cupidatat cupidatat proident et fugiat. Officia pariatur dolor elit elit do veniam est excepteur do officia officia duis anim.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 5, 'Ipsum in enim', 'Incididunt non quis laborum reprehenderit cillum cupidatat incididunt fugiat. Irure culpa amet et aliqua culpa enim in amet id sint do. Pariatur fugiat nulla officia dolor adipisicing eiusmod dolore ea occaecat esse. Veniam tempor sunt voluptate consectetur irure ex nulla labore eiusmod officia amet adipisicing enim. Tempor culpa mollit ad consectetur quis id qui sunt commodo quis fugiat pariatur tempor proident ipsum.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 7, 'Fugiat', 'Irure quis esse adipisicing deserunt dolor consequat est cillum fugiat esse sit. Aliquip deserunt excepteur laborum duis sunt ullamco. Ad et consequat non exercitation eiusmod dolor aute commodo mollit minim tempor pariatur deserunt quis. Quis elit id sint non eiusmod do consequat eiusmod tempor commodo nostrud excepteur exercitation minim. Esse voluptate incididunt mollit ipsum aliquip eu exercitation ea eu veniam exercitation aliqua.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 8, 'Ea ut', 'Cupidatat ea proident tempor dolor dolore. Consectetur commodo labore excepteur occaecat deserunt dolore esse voluptate irure nisi officia proident proident adipisicing. In aliquip mollit magna tempor labore velit ipsum.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 9, 'Elit', 'Velit qui qui nisi. Irure veniam dolor nisi ex est mollit. Commodo nostrud in minim aliqua exercitation pariatur. Laborum in nisi est eu aute laborum sunt sunt culpa velit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 10, 'Sunt sint voluptate', 'Veniam nisi dolore pariatur deserunt duis id officia aute. Voluptate amet consectetur Lorem exercitation dolore ut eiusmod ullamco tempor laboris. Veniam esse quis Lorem officia esse ipsum magna fugiat exercitation laboris mollit excepteur est. Officia ad excepteur ut tempor nulla. Laborum quis officia adipisicing ipsum.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 11, 'Eu officia ut', 'Lorem ipsum sit esse labore duis laborum duis. Consequat aute in minim ipsum anim. Veniam Lorem exercitation consequat eiusmod nostrud irure ea qui sunt cupidatat ut sunt cillum esse. Aute tempor et cillum amet labore cupidatat excepteur pariatur duis.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 12, 'Velit', 'Veniam commodo in pariatur minim consectetur amet in ipsum esse fugiat veniam nisi sunt voluptate. Anim est anim nostrud esse elit mollit. Id sint velit officia dolor laborum culpa veniam labore ullamco aliqua cupidatat. Ea minim consectetur nulla ut. Culpa aliqua amet exercitation exercitation ad.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 13, 'Do ullamco', 'Consectetur ut voluptate ea tempor labore culpa elit qui nisi veniam minim dolore. Officia ea est incididunt est officia occaecat tempor non id consequat ullamco proident et. Sunt sunt non nulla exercitation consectetur mollit ad pariatur nostrud laborum duis. Veniam ad officia cillum cupidatat do do consectetur. Lorem nulla pariatur magna dolor labore in in consectetur ut sint pariatur incididunt aliquip.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 14, 'Commodo', 'Tempor sint non aute pariatur tempor ea velit pariatur labore in officia anim irure Lorem magna. Laboris magna cupidatat sint ex sit nulla aliquip exercitation fugiat dolor elit deserunt et velit. Laboris occaecat adipisicing est. Et nulla id nostrud dolor.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 16, 'Labore proident', 'Proident officia et eu exercitation aliqua proident fugiat reprehenderit eu cupidatat dolore culpa id consectetur. Reprehenderit quis eiusmod reprehenderit culpa mollit voluptate pariatur exercitation. Ex aute dolore mollit esse fugiat anim laborum tempor officia dolore sunt. Minim labore labore eu.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 17, 'Laborum', 'Ex ea sit sit sunt fugiat id tempor mollit minim esse elit nulla deserunt. Ad voluptate do id qui ullamco. Irure pariatur dolore nisi mollit elit. Ipsum aliquip labore fugiat.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 20, 'Reprehenderit', 'Magna nostrud nisi consequat officia est non non proident est enim non. Cupidatat voluptate fugiat culpa sunt. Incididunt cillum sunt sint duis dolor et enim minim aliquip. Velit ullamco sit duis eu non mollit enim irure velit occaecat eiusmod.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 1, 21, 'Officia', 'Dolor tempor culpa pariatur eu aute dolore elit consequat eiusmod laboris laboris proident. Id eu esse est laborum labore amet proident veniam consequat voluptate. Excepteur dolore sit exercitation labore velit nisi pariatur do nostrud non pariatur tempor laboris minim. Labore tempor cupidatat ipsum dolore nisi veniam Lorem. Aliqua Lorem sit eu amet in quis.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 1, 'Consequat', 'Amet excepteur ullamco officia ullamco sit id id deserunt. In minim dolor elit eiusmod ullamco quis id aliquip officia laborum sit. Sunt ut labore in sunt et elit laboris consequat duis commodo excepteur pariatur dolor aute cillum. Lorem ipsum minim ea mollit deserunt enim eu cillum voluptate veniam nulla dolore ad. Minim do veniam veniam id culpa aute sit sit qui cupidatat in in incididunt amet.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 2, 'Commodo ut', 'Minim dolore incididunt sint velit. Consequat ut nostrud amet incididunt voluptate irure veniam veniam ut ex excepteur labore consectetur. Sint excepteur commodo esse pariatur magna exercitation cillum. Consectetur Lorem non laborum non duis laborum amet est exercitation cillum consectetur. Anim sit occaecat do commodo.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 3, 'Sit', 'Duis commodo est consectetur commodo esse commodo commodo occaecat do ad nisi esse mollit. Velit voluptate non esse anim consequat qui esse ex ex officia occaecat. Ipsum dolore officia consequat labore ullamco. Laborum tempor nulla proident nostrud cupidatat Lorem id fugiat ipsum elit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 4, 'Adipisicing anim', 'Nostrud proident Lorem qui nisi est eiusmod occaecat aliqua sunt ullamco aliqua dolor cillum reprehenderit. Ea fugiat officia ullamco esse id dolor. Sint esse cupidatat occaecat. Nisi sunt aute ea magna exercitation et id nisi labore excepteur ullamco commodo.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 5, 'Non laboris', 'Nulla deserunt duis labore sit. Deserunt esse cillum adipisicing duis proident nulla cupidatat. Nostrud nostrud aliquip occaecat.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 7, 'Elit et', 'Fugiat cupidatat aliqua non non pariatur in voluptate consectetur ut qui tempor fugiat commodo excepteur in. Dolore dolore laboris magna proident nulla labore fugiat cillum do occaecat quis cupidatat do eu. Duis incididunt deserunt ullamco reprehenderit ipsum culpa dolore. Magna do culpa pariatur ipsum deserunt voluptate consectetur nulla commodo tempor sint labore tempor nostrud culpa.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 8, 'Qui', 'Aliquip officia consectetur esse. Sit ad non nulla eiusmod ipsum sit dolor ullamco nisi elit laboris laborum exercitation eu cillum. Consequat sit duis commodo ad pariatur ullamco id reprehenderit cupidatat nisi reprehenderit nisi reprehenderit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 9, 'Enim esse', 'Ad labore anim incididunt proident qui. Fugiat id est laborum excepteur veniam aliqua nostrud. In in irure est mollit labore est Lorem incididunt. Velit ea do incididunt aliquip tempor anim ea incididunt quis. Culpa deserunt aliquip esse aliqua exercitation.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 10, 'Eiusmod', 'Duis consectetur culpa mollit sint ut id culpa aliquip minim consectetur aliqua. Pariatur commodo dolore duis eiusmod commodo minim labore dolore irure. In ipsum nostrud velit magna sit ea laborum ipsum. Non laboris excepteur consectetur ex non eu cillum.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 11, 'Et labore', 'Elit commodo veniam duis mollit in Lorem id incididunt et irure occaecat. Enim sunt minim do ipsum irure et aute elit. Anim minim eu non ea aute.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 12, 'Aliquip', 'Amet officia elit veniam occaecat. Magna amet adipisicing qui quis dolore ipsum reprehenderit est in ullamco aliqua excepteur proident. Ullamco voluptate proident deserunt velit incididunt velit velit Lorem dolor amet pariatur.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 13, 'Elit ex', 'Labore dolor voluptate aliqua dolor mollit nostrud sunt ea labore nostrud id. Quis irure do incididunt laborum labore commodo irure dolore aliquip aute. Ullamco sint esse veniam. Quis nulla fugiat duis id non excepteur ipsum laboris cupidatat. Ea cillum excepteur velit qui nisi esse est tempor reprehenderit sint esse amet.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 14, 'Veniam', 'Veniam sint occaecat duis. Mollit sunt in dolore sint consectetur adipisicing proident aute nostrud deserunt dolore Lorem mollit. Mollit labore ex occaecat exercitation reprehenderit do anim cupidatat enim quis qui ut qui. Quis aliquip ex sunt pariatur. Pariatur quis nostrud voluptate fugiat commodo deserunt qui qui enim fugiat reprehenderit dolor duis.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 16, 'Nostrud quis', 'Commodo dolor fugiat cupidatat anim commodo. Occaecat anim veniam elit commodo excepteur minim. Et consectetur officia nisi.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 17, 'Nisi', 'Adipisicing aute excepteur sunt anim deserunt aliquip aute Lorem aute fugiat irure. Officia elit exercitation ut adipisicing nulla sit. Aute laborum mollit voluptate adipisicing culpa voluptate anim elit exercitation culpa. Et id sunt eu cillum culpa.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 20, 'Minim dolor ipsum', 'In quis cillum exercitation consequat nulla elit. Minim fugiat est laborum pariatur sint eu nulla veniam mollit officia sit. Culpa tempor quis culpa pariatur anim pariatur voluptate ex veniam mollit ut ad consequat. Laboris velit consequat quis Lorem laborum non consectetur pariatur duis laboris laborum. Esse exercitation exercitation eiusmod ea reprehenderit reprehenderit ad.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 2, 21, 'Mollit duis', 'Commodo qui est elit nisi mollit officia laborum. Est nostrud ullamco id dolore irure anim. Occaecat laboris exercitation aliquip tempor dolore aute do do nisi dolor officia amet ex. Id adipisicing consequat occaecat sit elit adipisicing reprehenderit dolor aute proident ullamco id.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 1, 'Pariatur', 'Exercitation cillum sit mollit officia ullamco veniam aliqua elit id officia. Velit sunt consectetur non ut. Duis enim ut proident in ad laboris ad fugiat ex eu reprehenderit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 2, 'Proident non minim', 'Ex excepteur do ex quis proident fugiat eu labore. Mollit do sunt et incididunt aliquip id exercitation cupidatat et laborum nisi amet. Qui aliquip nulla quis laborum adipisicing tempor.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 3, 'Ex non in', 'Veniam deserunt velit eu ullamco consectetur mollit magna ipsum adipisicing. Exercitation excepteur sint ex ea exercitation aute nostrud anim exercitation ullamco ullamco velit consequat duis. Do laborum id culpa dolore consequat deserunt minim culpa in Lorem. Consequat cillum deserunt est irure fugiat quis eiusmod labore occaecat dolor reprehenderit velit mollit enim qui. Labore eu mollit ea dolor duis tempor reprehenderit cillum cupidatat dolore incididunt.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 4, 'Id deserunt', 'Ad adipisicing duis Lorem mollit aliqua id ea dolore aliquip ad cillum anim. Labore esse do consequat nulla reprehenderit ex excepteur mollit dolor. Ullamco est elit qui et veniam elit aliquip enim anim id est consequat culpa dolor cupidatat.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 5, 'Sunt eu', 'Minim eiusmod amet mollit nostrud excepteur dolore non et ea exercitation do proident. Laborum fugiat in amet voluptate Lorem laboris sunt sit ad est esse duis consequat do exercitation. Nisi veniam commodo eiusmod quis non ipsum nostrud aute enim enim ad culpa. Laborum in officia deserunt deserunt fugiat elit Lorem. Irure ullamco in pariatur ullamco aute eu enim.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 7, 'Ad veniam', 'Culpa id labore velit veniam ex non. Excepteur proident nostrud excepteur non eiusmod ullamco cillum dolor quis non. Voluptate exercitation occaecat amet.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 8, 'Sit occaecat', 'Sit consectetur nostrud est occaecat. Laborum do ipsum ipsum qui nulla ex esse labore mollit commodo mollit incididunt mollit. Do esse dolore cupidatat ullamco deserunt adipisicing deserunt sunt irure sint magna duis magna culpa.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 9, 'Fugiat', 'Sint duis fugiat labore ad sit fugiat dolor proident anim elit fugiat id veniam officia adipisicing. Incididunt adipisicing labore ut incididunt. Consequat irure ullamco nostrud mollit qui. Sint laborum laboris veniam exercitation est nulla in esse.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 10, 'Laboris', 'Elit reprehenderit nulla sunt mollit consequat nostrud commodo adipisicing reprehenderit aute ex sunt. Fugiat aute dolore dolore ullamco et eiusmod ea enim cillum irure duis fugiat elit exercitation ea. Dolor aute culpa tempor id nulla nostrud.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 11, 'Tempor voluptate in', 'Amet id sunt excepteur cillum et cupidatat nisi esse sunt in id consectetur magna. Ea tempor aliquip nulla do. Esse elit culpa ex sint exercitation laboris ex aute ut officia aliquip amet exercitation.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 12, 'Id aute aliquip', 'Adipisicing enim laborum fugiat. Qui eiusmod consectetur magna aute sint excepteur nisi. Officia id nulla culpa officia sint eu eu incididunt aliquip cillum cillum quis occaecat. Velit commodo esse qui adipisicing aute aliquip enim quis enim et officia laboris. Magna occaecat cillum aliqua cillum enim ex proident dolore duis.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 13, 'Ex', 'Exercitation labore sit incididunt. Lorem laboris laboris nulla tempor elit esse enim dolor. Deserunt amet eu magna labore elit fugiat duis. Excepteur nostrud esse consequat velit aliqua fugiat esse culpa et ullamco.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 14, 'Culpa eu nisi', 'Do fugiat adipisicing amet enim amet laboris aliquip reprehenderit pariatur nostrud sunt tempor. Sunt sunt laborum proident excepteur pariatur nisi ipsum laborum. Adipisicing magna commodo aliqua. Lorem nisi pariatur sunt proident exercitation ad culpa exercitation in et.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 16, 'Lorem', 'Ut pariatur amet elit cupidatat culpa laborum esse. Veniam ea ex non magna laborum excepteur laborum minim veniam occaecat. Aliqua id reprehenderit adipisicing do sit nisi. In ipsum consequat reprehenderit anim incididunt esse exercitation id labore nisi esse esse quis excepteur.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 17, 'Do pariatur aliquip', 'Culpa consequat ullamco consequat. Fugiat sunt veniam in elit. Labore est non voluptate aliqua commodo sint adipisicing do qui nulla. Ipsum veniam nostrud labore cillum nostrud anim irure laborum. Tempor id reprehenderit commodo deserunt aliqua dolor laboris non veniam sit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 20, 'Amet ipsum aliqua', 'Et culpa cillum excepteur mollit irure aliquip ex velit esse sit qui nisi veniam irure ullamco. Qui minim do reprehenderit in ex aliquip labore ex magna amet quis. Aliqua incididunt qui dolore dolore sunt aute enim. Aute nulla reprehenderit quis amet commodo. Ex fugiat fugiat excepteur nisi reprehenderit amet exercitation amet.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 3, 21, 'Commodo quis non', 'Irure commodo et eu elit laboris nostrud. Laborum commodo eu non aliquip non tempor voluptate nulla et. In eu eiusmod Lorem non. Irure minim do commodo eiusmod eiusmod quis labore cillum non ipsum cupidatat.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 1, 'Culpa dolor', 'Do esse adipisicing irure excepteur esse ipsum reprehenderit excepteur velit exercitation non enim aute nostrud incididunt. Aliqua laboris do eiusmod qui eiusmod pariatur nulla in enim proident occaecat aliqua laborum mollit occaecat. Esse minim mollit voluptate nulla nostrud eu excepteur et excepteur magna nostrud. Enim deserunt Lorem veniam reprehenderit ipsum pariatur ut officia ipsum ullamco sunt sit aute ipsum et.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 2, 'Do laborum ea', 'Tempor et tempor exercitation ullamco dolore anim aliquip nisi veniam esse minim laboris aliquip cillum nulla. Consequat fugiat proident tempor sunt minim laboris cupidatat nostrud sunt laboris amet. Consectetur magna laboris proident.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 3, 'Do ea', 'Tempor laboris sint ex incididunt mollit voluptate id sunt commodo aliquip est elit duis commodo dolore. Dolore excepteur et magna qui cupidatat ut nulla non laborum pariatur qui. Nostrud fugiat quis occaecat velit ullamco nulla esse officia elit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 4, 'Id', 'Pariatur deserunt anim ipsum consectetur fugiat voluptate qui veniam ea cupidatat ex fugiat in proident nisi. Ad esse proident voluptate ipsum velit sint eiusmod est. Ullamco magna proident sit duis ut qui sunt do cillum exercitation aliqua. Elit non magna reprehenderit deserunt incididunt laboris exercitation in excepteur.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 5, 'Excepteur nostrud eu', 'Sunt est nisi ut commodo est anim labore in pariatur occaecat. Voluptate velit culpa sunt sit. Sunt esse ullamco anim anim magna ex in adipisicing adipisicing nisi aliqua aute elit minim.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 7, 'Ipsum ut', 'Veniam et dolore incididunt ad et mollit mollit nulla exercitation pariatur ipsum ipsum qui. Labore aute duis est. Officia consectetur anim adipisicing proident ad magna fugiat culpa.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 8, 'Irure', 'Minim laborum dolore ut in id sunt anim dolore. Dolor ea veniam tempor anim laborum excepteur incididunt non deserunt sit tempor laboris officia Lorem laboris. Aliqua eu duis ad cupidatat ea amet ullamco quis Lorem dolor. Magna duis commodo pariatur amet mollit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 9, 'Minim', 'In est Lorem nisi ut reprehenderit eiusmod dolor culpa dolore adipisicing est sunt. Elit tempor voluptate exercitation ad ullamco veniam duis esse veniam est labore do. Minim nostrud laborum sunt in magna minim.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 10, 'Quis', 'Nulla in sunt cillum dolore duis exercitation dolore id ullamco nostrud non velit ea. Reprehenderit minim aliquip deserunt velit ea officia voluptate mollit ullamco exercitation eu consequat irure. Quis pariatur dolore est in quis esse nisi pariatur labore ea magna adipisicing elit fugiat mollit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 11, 'Nulla', 'Mollit deserunt pariatur enim sunt proident. Duis labore adipisicing nulla. Qui cupidatat id incididunt nostrud. Amet enim aliqua excepteur duis. Ipsum voluptate mollit laborum ad cupidatat duis et veniam est esse deserunt amet amet in.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 12, 'Consectetur irure tempor', 'Sint cupidatat voluptate culpa id fugiat commodo eiusmod incididunt ex mollit. Ea pariatur est enim non culpa pariatur non veniam dolor. Incididunt irure quis deserunt laborum aute est ad enim pariatur velit commodo.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 13, 'Elit dolore culpa', 'Veniam pariatur sunt consectetur consequat do sint exercitation minim Lorem cupidatat Lorem ullamco anim ullamco. Adipisicing ad eiusmod non anim sint do occaecat sunt nulla deserunt qui anim amet veniam. Eu aute ipsum nisi fugiat ea pariatur pariatur tempor. Exercitation exercitation elit excepteur excepteur commodo.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 14, 'Nostrud ex', 'Pariatur duis dolor eiusmod laborum reprehenderit cillum velit sunt quis. Eiusmod pariatur consectetur dolore veniam sit amet anim mollit culpa consequat. Adipisicing magna aliqua mollit sint sunt quis incididunt. Aliquip mollit officia culpa consequat Lorem enim nostrud in ea nostrud consequat velit. Reprehenderit aliqua officia veniam.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 16, 'Nulla eiusmod occaecat', 'Cillum qui ea eu exercitation laborum veniam aute fugiat nulla dolor. Consectetur labore mollit minim commodo proident aliqua nisi sit labore exercitation sunt. Ut proident nisi proident consectetur dolore ea consequat.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 17, 'Officia occaecat', 'Sint mollit adipisicing proident est fugiat qui commodo consequat Lorem fugiat non elit. Occaecat cillum aliquip dolore anim. Velit sit non excepteur nostrud aute quis quis commodo sunt pariatur eu ipsum est. Veniam duis dolor exercitation Lorem est deserunt dolore nulla ea aliqua nisi ipsum velit elit. Non id nulla officia quis veniam exercitation sint magna pariatur nostrud tempor reprehenderit dolore.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 20, 'Aliqua', 'Laboris culpa sunt culpa minim ut non. Esse reprehenderit et anim nulla reprehenderit deserunt est ut exercitation dolor nulla sit anim elit sint. Ipsum duis dolor cupidatat. Enim proident Lorem et eu qui adipisicing excepteur amet.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 4, 21, 'Nulla ea', 'Ullamco do ad amet veniam pariatur elit sint labore et quis laboris nisi ea ullamco occaecat. Dolore veniam qui irure in aliquip culpa cillum adipisicing veniam consequat nostrud. Sunt veniam fugiat enim cillum cupidatat adipisicing ut. Esse tempor commodo esse mollit Lorem anim nulla. Commodo aliqua amet anim sit fugiat aliquip aute est consequat sint elit consequat consectetur.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 1, 'Non exercitation', 'Proident elit nostrud aliquip velit aliquip id culpa nostrud. Tempor eiusmod voluptate adipisicing labore proident officia dolor amet aliqua ex tempor aliquip. Et incididunt sint ullamco duis et adipisicing excepteur. Adipisicing anim voluptate deserunt ut ut aute ut laborum reprehenderit duis.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 2, 'Fugiat commodo do', 'Eiusmod nisi dolore dolor fugiat occaecat commodo incididunt sit. Adipisicing esse sit elit minim mollit. Magna elit anim qui.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 3, 'Minim est', 'Excepteur amet consectetur laborum culpa culpa. Reprehenderit consectetur non eu eiusmod proident commodo. Duis ea incididunt cupidatat velit commodo fugiat.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 4, 'Consectetur culpa', 'Ex mollit sit sint eu id sint elit anim veniam cupidatat nisi pariatur et qui. Eu veniam nisi commodo. Ullamco id elit irure nisi aute culpa. Pariatur dolore tempor laborum voluptate do nisi elit ea tempor.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 5, 'Tempor adipisicing', 'Labore nisi do deserunt id deserunt esse do ipsum dolor qui esse et enim qui. Proident ipsum sint laborum excepteur elit nisi do proident quis aliquip occaecat amet. Aliquip adipisicing qui laborum id adipisicing nostrud deserunt enim esse tempor. Enim proident proident aliquip cillum ipsum culpa reprehenderit. Enim voluptate enim adipisicing non irure labore velit esse elit esse voluptate non cupidatat.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 7, 'Tempor', 'Ea laborum nostrud irure id. Nisi nulla irure adipisicing eu ut proident in ut reprehenderit incididunt veniam non excepteur. Consequat in exercitation consequat veniam duis adipisicing occaecat irure aliqua quis laboris non culpa ea anim. Veniam ad tempor reprehenderit velit et et ex duis aute.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 8, 'Enim ullamco esse', 'Eiusmod sunt officia aliquip elit et dolor amet nulla ipsum proident elit consequat excepteur id officia. Lorem enim est ullamco officia reprehenderit elit nisi fugiat. Aliqua aliqua eu voluptate culpa ullamco ipsum elit ea eu excepteur eu minim mollit do. Esse pariatur eiusmod magna eiusmod eu et consequat.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 9, 'Quis', 'Mollit mollit voluptate reprehenderit et. Magna Lorem voluptate veniam consequat sunt laboris do. Consectetur cillum proident commodo minim Lorem laboris laborum elit velit. Quis commodo dolor irure cupidatat culpa et minim officia dolore mollit. Lorem mollit eiusmod esse veniam incididunt ipsum incididunt.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 10, 'Velit', 'Exercitation cillum elit cillum occaecat labore nisi cupidatat labore officia excepteur id et. Eiusmod sit do ipsum fugiat nisi ipsum mollit laboris sint culpa sint. Cupidatat laborum ullamco qui in laborum aliqua cupidatat esse non esse.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 11, 'Veniam', 'Elit nisi tempor enim id est dolore. Ipsum eiusmod consequat duis anim adipisicing sint deserunt laboris cillum exercitation ea nulla. Anim Lorem irure aute ullamco nisi in in elit aliqua aute.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 12, 'Ex ullamco', 'Sint mollit proident amet velit officia ipsum in in quis consectetur. Incididunt incididunt mollit adipisicing aute irure nostrud deserunt enim quis officia cillum est sit labore labore. Ad do excepteur sunt nisi. Ex aute voluptate nostrud ea non ipsum nostrud ullamco nisi adipisicing in sit ea dolore non.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 13, 'Dolor', 'Adipisicing nisi nulla dolor minim occaecat excepteur proident. Eiusmod amet sit amet incididunt velit labore in ipsum tempor. Tempor nostrud aliquip laborum sunt id sint et cupidatat commodo tempor et proident proident amet. Consectetur eiusmod sunt laboris fugiat labore qui proident nostrud eu enim qui.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 14, 'Aliquip', 'Ut commodo ex ullamco quis reprehenderit est duis aliquip veniam enim incididunt excepteur pariatur amet. Eiusmod consequat tempor nisi do ea incididunt do esse qui tempor labore deserunt esse elit officia. Non quis sit et consectetur consectetur. Sit ad consectetur commodo enim ad sunt est tempor quis laborum do id ut eu eiusmod.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 16, 'Sit', 'Commodo duis labore mollit qui elit. Qui labore ullamco deserunt non. Do cupidatat reprehenderit deserunt sit aliqua irure. Eiusmod et occaecat nulla officia proident qui excepteur mollit aute duis id reprehenderit sunt.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 17, 'Id sit consectetur', 'Quis ex irure nisi cupidatat incididunt cillum mollit ea laborum pariatur occaecat velit eu ipsum. Do adipisicing nisi incididunt laboris dolor amet Lorem Lorem eiusmod ad anim velit. Magna ipsum sunt dolore consequat et eiusmod aliquip in ullamco minim nulla. Ea aute irure occaecat duis id incididunt et incididunt fugiat ea officia nulla officia nisi. Nulla dolore cupidatat dolor in.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 20, 'Ipsum in non', 'Reprehenderit mollit est labore pariatur. Dolor minim cupidatat quis. Occaecat dolore reprehenderit nisi laboris ea voluptate Lorem incididunt ullamco Lorem. Irure consectetur nostrud dolor mollit consequat.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 5, 21, 'Cillum cillum sint', 'Aliqua quis pariatur sunt do tempor amet eiusmod in in esse. Laboris consectetur elit elit pariatur incididunt. Laborum elit in excepteur mollit aliqua consectetur ut voluptate mollit tempor cupidatat sint ullamco nostrud. Est excepteur nisi irure dolore dolor aute eiusmod labore reprehenderit adipisicing ex deserunt. Mollit proident ea id velit fugiat eiusmod et.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 1, 'Est nisi dolore', 'Incididunt exercitation irure duis aliqua aliqua do reprehenderit velit est enim et do ex Lorem. Nulla minim tempor id enim est do voluptate aliquip ut voluptate labore culpa voluptate Lorem enim. Tempor sint quis mollit sint deserunt. Culpa eiusmod ad voluptate Lorem labore do velit non cupidatat elit culpa.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 2, 'Commodo', 'Excepteur tempor Lorem elit. Cupidatat ex sit voluptate non labore anim minim do. Incididunt minim esse eiusmod ad mollit aute ea id cupidatat qui eiusmod.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 3, 'Aute consectetur exercitation', 'Tempor qui reprehenderit enim eiusmod sint. Reprehenderit proident pariatur Lorem qui ipsum culpa dolore voluptate laborum minim. Cupidatat et in esse aute in pariatur culpa enim nostrud amet. Commodo pariatur veniam officia consectetur ut aliquip laboris est est est anim enim irure. Nostrud adipisicing cillum sunt esse non officia ea est deserunt in esse.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 4, 'Do enim quis', 'Exercitation ullamco minim minim cupidatat ullamco occaecat eu aute. Aliquip eu do incididunt voluptate sunt id. Lorem culpa ipsum eiusmod id culpa veniam excepteur. Dolor occaecat aute deserunt reprehenderit officia esse cupidatat velit tempor enim non velit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 5, 'In do', 'Laboris dolore dolor aliquip non sint nulla aliquip sunt dolore id velit aliqua non ea. Non pariatur cupidatat et nisi ad nostrud tempor eiusmod irure est occaecat laborum esse enim laborum. Pariatur et deserunt enim. Laborum incididunt esse aute mollit exercitation aliquip qui labore voluptate sit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 7, 'Reprehenderit', 'Consequat esse aute adipisicing qui excepteur dolor irure nisi do. Voluptate id nulla fugiat nostrud enim magna enim eiusmod commodo incididunt aute exercitation pariatur. Eu anim ex occaecat ullamco labore ullamco in laboris aute aute dolor ut do eu aliquip. Qui commodo dolore aliquip enim mollit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 8, 'Adipisicing fugiat', 'Aute sit esse eiusmod officia eiusmod sit enim incididunt non ipsum nisi est. Pariatur do aliquip elit duis voluptate ullamco commodo et laborum aliqua cillum reprehenderit quis eu amet. Consectetur tempor ea labore. Pariatur minim officia veniam laborum sit mollit incididunt duis ad aliqua amet mollit velit nostrud.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 9, 'Ex culpa', 'Eu ipsum proident dolor ut veniam occaecat cillum elit occaecat magna mollit nisi tempor. Anim sint laborum exercitation ex ut duis consectetur ullamco duis enim. Duis ut sunt enim eiusmod et enim cupidatat culpa.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 10, 'Ipsum in', 'Eu quis dolor sunt sit amet exercitation. Enim aliquip ex mollit ad amet consectetur exercitation fugiat commodo elit esse tempor qui occaecat occaecat. Laborum ipsum commodo nostrud ex enim velit deserunt laborum deserunt veniam aliqua nisi enim aliqua.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 11, 'Commodo', 'Veniam nostrud est anim incididunt aute est. Ullamco ut qui ut quis ad nostrud id reprehenderit nostrud esse ea. Sint anim ut magna laboris ex ipsum laborum deserunt velit ex pariatur ut. Commodo et ullamco reprehenderit do. In minim officia qui cillum dolore duis sint dolor ex est.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 12, 'Magna esse', 'Adipisicing et est in magna eiusmod ipsum dolor dolor irure velit fugiat cupidatat. Labore elit amet enim excepteur occaecat ullamco velit nulla cupidatat do in nisi tempor. Ut esse consectetur sunt Lorem consequat consectetur duis eu veniam sunt dolore incididunt ad.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 13, 'Veniam minim sit', 'Nisi mollit fugiat amet consectetur fugiat labore nostrud voluptate quis enim commodo ad ut occaecat. Proident amet qui incididunt ullamco amet pariatur cillum consectetur consectetur voluptate eiusmod proident. Excepteur quis esse amet aliquip laborum culpa officia ipsum. Sunt fugiat ut aute nostrud. Fugiat nulla commodo aliquip mollit voluptate ex ad enim eu mollit est.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 14, 'Velit sit cillum', 'Non id ad eu fugiat ullamco sunt incididunt dolor deserunt Lorem. Excepteur occaecat voluptate deserunt consequat cillum officia sit magna proident occaecat exercitation ad Lorem aute do. Irure laborum ex dolore nulla nisi aliqua consequat aute.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 16, 'Eiusmod', 'Voluptate commodo deserunt dolore irure ipsum occaecat amet nostrud ex mollit pariatur est adipisicing duis. Non adipisicing exercitation incididunt tempor magna cillum officia nostrud sunt reprehenderit magna quis ea eu pariatur. Amet incididunt nostrud est quis. Pariatur laboris eu anim occaecat officia adipisicing reprehenderit labore ex ad est aute.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 17, 'Minim lorem', 'Cillum sit ipsum laboris nulla nisi ipsum fugiat. Est dolor do quis sunt ea adipisicing laborum cillum deserunt cupidatat. Amet tempor id pariatur anim ea commodo eu. Consequat deserunt consequat ea veniam.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 20, 'Amet sint sint', 'Tempor ut irure nostrud id aute ullamco mollit. Occaecat aute irure irure. Ex proident in consectetur cillum. Reprehenderit laboris ad quis Lorem deserunt pariatur.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 6, 21, 'Excepteur ex', 'Culpa culpa quis non. Occaecat sint mollit fugiat labore in aliquip cupidatat do est enim duis. Velit reprehenderit qui qui exercitation esse minim aliqua eu. Mollit ut amet officia aute nisi mollit reprehenderit eiusmod ex excepteur commodo. Aliquip ipsum elit proident ullamco nulla aliquip nisi veniam eu et sunt consequat eu adipisicing et.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 1, 'Sint enim', 'Mollit amet eiusmod pariatur dolor et id consectetur amet non anim veniam sunt incididunt nulla. Dolor enim officia ea anim consequat consectetur. Do ad id ipsum dolore elit pariatur nulla consequat deserunt ut ipsum mollit elit qui Lorem.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 2, 'Ullamco sunt', 'Occaecat do ipsum nostrud duis culpa consectetur eiusmod fugiat mollit quis ad. Sint sunt esse dolore dolor duis do occaecat eiusmod labore laborum enim qui proident anim. Fugiat adipisicing irure eiusmod labore do enim aliquip excepteur anim laborum culpa minim. Velit minim quis cupidatat duis nisi amet.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 3, 'Laborum', 'Ipsum aliquip ea deserunt occaecat enim aliqua non. In laboris velit deserunt amet velit elit aliqua nisi id adipisicing consequat ad tempor non. Ex pariatur cillum consequat cillum excepteur consequat pariatur occaecat ut exercitation sint sit enim et ex.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 4, 'Velit excepteur', 'Deserunt commodo sint occaecat fugiat fugiat et dolore. Commodo dolore magna quis in. Id labore irure sunt fugiat ipsum nostrud nisi Lorem irure culpa laborum consectetur ea. Aute id laborum ea labore incididunt eiusmod non consectetur velit nisi voluptate aliqua.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 5, 'Enim', 'Ut anim veniam cillum incididunt fugiat cupidatat quis non consequat enim. Non commodo consectetur proident ea deserunt nisi exercitation excepteur et velit ut. Dolor proident do anim proident ad. Pariatur qui ea anim Lorem ex excepteur deserunt qui non nostrud proident tempor incididunt. Cupidatat cillum veniam et consectetur proident.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 7, 'Duis ex', 'Aliquip aute est eu in eu consectetur Lorem magna. Aliqua aliqua irure ex amet fugiat in in nostrud reprehenderit aliquip ullamco id. Proident ex quis eu consectetur ex elit eu est enim fugiat consectetur veniam ut voluptate aute.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 8, 'Et labore non', 'Ex eiusmod voluptate consequat eu velit elit sit magna est quis pariatur exercitation anim aliquip. Duis occaecat eiusmod et fugiat magna nulla pariatur ea culpa excepteur incididunt. Ullamco veniam ipsum pariatur ex mollit officia nisi occaecat ullamco. Incididunt tempor qui est tempor consequat magna adipisicing fugiat enim voluptate laboris veniam. Eu duis officia qui culpa nostrud labore commodo proident cupidatat in est do nulla.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 9, 'Qui cupidatat', 'Id elit in et labore voluptate. Sunt dolor et dolore sunt enim aliqua irure cupidatat est mollit consectetur. Laboris laboris irure irure laborum proident ex labore ad veniam.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 10, 'Adipisicing', 'Quis et dolore laborum nostrud labore culpa nulla non laboris in minim. Et dolore magna voluptate magna do excepteur culpa tempor officia. Esse magna eu Lorem minim nisi. Laboris ad pariatur aute esse cillum dolor id. Cupidatat minim cillum amet ad enim consectetur sit aliquip ipsum minim.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 11, 'In', 'Do fugiat anim consectetur deserunt amet. Anim dolor eiusmod incididunt nulla qui dolor aliquip mollit quis sit. Do culpa reprehenderit laboris. Do irure est tempor velit amet do ea Lorem. Pariatur incididunt do ad laboris pariatur sunt ad aliquip fugiat laboris sunt do dolore.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 12, 'Dolore labore enim', 'Aute proident mollit reprehenderit occaecat. Irure minim nisi cupidatat consequat. Occaecat laboris amet laboris ut do dolore anim esse fugiat aliquip. Officia adipisicing adipisicing irure ea voluptate culpa consequat consequat enim mollit adipisicing ex consectetur elit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 13, 'Laborum dolore', 'Qui labore sit amet. Excepteur quis mollit deserunt velit. Qui fugiat pariatur quis non velit ad. Aute velit incididunt est quis laboris cillum eiusmod cillum proident duis voluptate magna. Consectetur amet sit officia sint irure esse cillum laboris dolor cupidatat ipsum.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 14, 'Deserunt irure lorem', 'Exercitation minim dolore nulla amet enim reprehenderit do enim. Est magna est deserunt enim nisi do magna est nulla culpa nostrud incididunt ut irure nulla. Sunt do sunt cillum mollit ea velit proident adipisicing enim velit. Sint consequat tempor qui enim pariatur sunt minim do est. Enim id veniam velit reprehenderit culpa adipisicing deserunt quis labore qui excepteur Lorem aute minim.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 16, 'Proident', 'Reprehenderit duis minim ut et. Anim anim eu officia adipisicing. Dolor tempor veniam consectetur anim dolore et. Ullamco ea consequat nulla consequat adipisicing aute incididunt ex sunt magna in anim laborum ipsum.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 17, 'Sint ipsum eiusmod', 'Velit est veniam consequat dolore dolor sint incididunt laborum elit sit. Qui occaecat consequat adipisicing. Duis ad commodo nostrud sit quis aliqua est tempor aliquip in ullamco excepteur. Minim ad sunt in et enim proident minim occaecat id tempor tempor eiusmod est cupidatat eiusmod. Adipisicing id tempor laboris enim nisi quis cillum excepteur anim.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 20, 'Occaecat', 'Adipisicing fugiat dolore minim culpa ea laborum ea non cillum et. Duis elit esse sunt. Ipsum magna culpa quis consequat proident qui veniam nostrud magna non adipisicing. Tempor aute nostrud ea ipsum et tempor non ea do enim ut commodo. Ipsum commodo esse in adipisicing in commodo id do quis Lorem aliquip.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 7, 21, 'Commodo aliquip ex', 'Excepteur sint excepteur esse id sint id. Ullamco dolor dolor exercitation commodo commodo in. Quis ut mollit consectetur velit consequat labore voluptate Lorem veniam eiusmod laboris magna. Eiusmod elit ut amet duis ea anim culpa aute sit. Est reprehenderit aute qui aute est velit ipsum do ad pariatur non consectetur Lorem nostrud aliquip.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 1, 'Culpa sit', 'Enim aliqua consequat duis elit irure aute minim laborum id nostrud qui officia. Exercitation amet aliqua culpa labore pariatur do. Irure proident qui irure velit. Sit anim nostrud nulla amet ullamco officia ut incididunt exercitation quis Lorem aliqua duis.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 2, 'Occaecat', 'Elit aute sunt sint do irure nulla fugiat laborum aute fugiat nulla laborum amet et qui. Nulla sint id aute amet proident ipsum veniam cupidatat minim. Sint excepteur minim velit cillum velit do sint sint laboris sunt aliquip officia ex veniam.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 3, 'Laborum culpa exercitation', 'Non et sunt amet fugiat pariatur cillum nisi cupidatat non qui. Cupidatat pariatur ex sunt deserunt officia. Cupidatat in cillum nulla nisi aliquip minim amet fugiat adipisicing do non velit id.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 4, 'Nulla enim esse', 'Sint nisi dolore Lorem. Culpa eu duis mollit esse fugiat ipsum id non non. Adipisicing nostrud consequat sit officia aliquip aute laborum irure ullamco aliqua elit fugiat sunt nulla nulla. Deserunt esse sint Lorem minim enim.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 5, 'Eiusmod', 'Deserunt tempor do deserunt ut dolore est minim. Irure veniam minim eu cillum. Commodo veniam est reprehenderit. Eu cupidatat labore commodo laborum occaecat do aliquip reprehenderit officia labore quis ad commodo mollit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 7, 'Velit', 'Exercitation consequat laborum cupidatat ipsum commodo sit mollit in cupidatat Lorem voluptate in in quis. Consectetur velit laborum nisi nisi officia ipsum occaecat eiusmod ut laboris velit cillum incididunt anim minim. Quis ipsum ad incididunt sit nulla.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 8, 'Laborum', 'Id consequat magna sunt tempor minim excepteur adipisicing. Pariatur officia laborum excepteur nostrud commodo magna Lorem do velit minim ipsum consectetur sint. Occaecat reprehenderit est adipisicing id aute amet sunt.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 9, 'Eiusmod', 'Voluptate dolor proident ex velit magna do voluptate enim sunt eu culpa ea eu. Eu ex nulla qui velit. Veniam reprehenderit enim tempor sit Lorem veniam est consequat sint anim eiusmod excepteur aliquip excepteur. Deserunt non minim veniam non labore sit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 10, 'Quis incididunt id', 'Anim nisi in non cupidatat pariatur sunt sit pariatur laboris ut in ipsum est anim labore. Cillum quis commodo eiusmod. Irure deserunt ut aliquip non culpa duis tempor magna ad culpa cillum id. Mollit qui adipisicing minim labore.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 11, 'Ex', 'Qui sit incididunt quis commodo. Magna sint irure non velit commodo sit eiusmod elit irure velit. Ipsum nostrud sint ut dolor. Reprehenderit amet irure proident cupidatat amet ullamco occaecat reprehenderit non est incididunt non est tempor esse.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 12, 'Ad minim anim', 'Commodo do mollit consectetur laboris eu. Nostrud culpa ut veniam excepteur non incididunt aliquip ex velit do ad do non elit. Nostrud in aute aute ad tempor consequat duis sint nostrud occaecat ut est eu. Occaecat ut cillum elit in eiusmod commodo occaecat tempor deserunt est deserunt est. Id eiusmod tempor elit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 13, 'Dolore reprehenderit', 'Laboris sint fugiat mollit aliqua cupidatat sint ullamco incididunt. Sint quis ad sint mollit. Irure id excepteur officia eiusmod exercitation et commodo culpa nulla anim mollit do ullamco labore.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 14, 'Tempor fugiat sint', 'Lorem adipisicing occaecat ut adipisicing. Id veniam sint velit elit. Consectetur velit cupidatat est magna sint nulla quis Lorem nisi eu esse esse fugiat non.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 16, 'Deserunt sit aliqua', 'Et pariatur esse reprehenderit sunt. Dolore nostrud deserunt voluptate dolor proident dolor Lorem. Eu amet deserunt anim enim reprehenderit. Culpa in ea aliqua voluptate non sunt mollit elit aliqua irure.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 17, 'Consectetur', 'Magna est exercitation irure velit id sunt in dolor ea labore eu nisi Lorem. Veniam laboris Lorem laboris ullamco consequat tempor commodo ea. Velit aliquip dolore non excepteur aute mollit culpa in voluptate est ut. Esse aliquip proident incididunt ex enim duis culpa quis incididunt eu ex cupidatat dolor esse. Duis anim nostrud esse veniam id officia do.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 20, 'Officia', 'Id ut Lorem aute anim occaecat sit. Ex minim ex labore tempor eu eu minim amet eiusmod anim culpa tempor. Do aliquip dolor irure est sunt dolor consequat mollit officia elit qui et eu. Voluptate do qui mollit magna ad veniam ex adipisicing velit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 8, 21, 'Enim non adipisicing', 'Quis non laboris nostrud exercitation dolore nostrud aliqua cillum duis sit. Laboris Lorem occaecat mollit eu occaecat ullamco eu dolore elit. Adipisicing est tempor eiusmod ipsum nulla mollit labore pariatur veniam eiusmod dolor laborum voluptate laboris aute. Enim voluptate aliquip anim enim officia aliquip qui occaecat ipsum Lorem qui esse.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 1, 'Ut non', 'Tempor irure labore dolor adipisicing sint sint commodo. Tempor dolore consectetur magna. In aliquip non proident officia eiusmod adipisicing et minim anim nostrud.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 2, 'Laboris', 'Aliqua occaecat proident id ad esse enim consequat do consectetur. Ad commodo ipsum mollit magna sint non nulla esse adipisicing tempor elit exercitation ipsum elit. Ad qui dolore in adipisicing reprehenderit qui minim. Amet aliquip veniam amet commodo sit. Duis fugiat Lorem ullamco.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 3, 'Aute', 'Proident excepteur laborum aute ad id est Lorem occaecat enim fugiat. Fugiat labore eu qui officia non eu tempor ullamco incididunt do sint voluptate cupidatat. In ipsum ipsum nulla ex aute incididunt qui ipsum tempor et. Proident eu eiusmod est commodo veniam reprehenderit Lorem tempor nostrud adipisicing consectetur veniam anim excepteur.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 4, 'Culpa deserunt', 'Quis Lorem duis pariatur non nisi culpa nisi do qui fugiat amet ut cillum esse amet. Ipsum et excepteur incididunt velit culpa do consequat sint sint aliquip nulla. Deserunt cupidatat in veniam ut aute commodo irure.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 5, 'Occaecat tempor aliquip', 'Minim qui esse laboris. Adipisicing nulla anim anim est eiusmod proident ea culpa do. Consequat cillum quis occaecat eu laboris officia esse ipsum veniam excepteur quis aliqua. Magna do tempor officia proident excepteur consequat qui.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 7, 'Ad magna quis', 'Aliquip exercitation et nisi ut eiusmod aute ad dolor ut. Cupidatat dolore dolor reprehenderit amet voluptate occaecat fugiat commodo laboris enim. Duis eu aliquip aliquip incididunt proident. Sint irure cupidatat nulla occaecat velit voluptate veniam veniam duis aliquip adipisicing quis ullamco laboris. Magna ea ex reprehenderit est pariatur nisi amet enim velit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 8, 'Id sit', 'Culpa irure occaecat cillum consectetur enim magna do cillum laboris deserunt proident dolor aute. Minim officia proident ea reprehenderit Lorem sint pariatur nostrud commodo. Do est irure duis Lorem duis.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 9, 'Officia nisi irure', 'Dolor consequat nostrud minim eu consectetur elit magna qui officia ut labore do nulla. Commodo eu fugiat in deserunt veniam ad mollit ullamco minim deserunt non. Incididunt nisi exercitation culpa reprehenderit magna culpa officia veniam veniam cupidatat cillum deserunt eiusmod labore sint.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 10, 'Eiusmod incididunt eu', 'Esse non elit culpa aliquip magna duis ullamco deserunt sit. Aute do sint occaecat commodo aute occaecat dolore sit aliqua eu laborum sit tempor. Ex sunt do sit nostrud do minim non excepteur irure do sit aliqua dolor ad. Laborum dolor Lorem sit Lorem sunt eu ex in tempor quis exercitation qui nostrud.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 11, 'In mollit', 'Adipisicing excepteur quis incididunt labore. Exercitation proident voluptate nisi deserunt adipisicing reprehenderit aute Lorem duis elit voluptate. Nisi in incididunt ipsum eiusmod Lorem commodo aliqua ullamco officia nostrud est voluptate.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 12, 'Duis', 'Ea proident reprehenderit ipsum. Occaecat est voluptate nulla laborum. Tempor aute labore esse irure commodo. Deserunt ipsum esse cupidatat incididunt ea laboris nisi excepteur excepteur.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 13, 'Sit', 'Voluptate ex id veniam in proident anim magna non proident excepteur nostrud ullamco Lorem nisi. Amet minim anim do eiusmod dolor sunt dolor id ut commodo dolor adipisicing deserunt. Eiusmod voluptate laboris ex enim eu.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 14, 'Ex veniam', 'Qui tempor laborum laborum culpa ullamco culpa deserunt laboris duis aliqua elit. Ullamco dolor pariatur nisi nisi commodo excepteur amet quis aute exercitation aliquip quis fugiat. Aliqua commodo ad quis pariatur occaecat est sit incididunt. Aliqua enim dolor occaecat cillum proident exercitation nostrud eu dolor ipsum tempor ad minim mollit in.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 16, 'Minim', 'Est commodo velit pariatur enim tempor. Nostrud officia cupidatat sint fugiat aliquip ullamco in laboris quis officia laborum. Elit do mollit mollit dolore labore mollit. Reprehenderit cupidatat culpa irure. Consequat pariatur amet aliqua do eiusmod excepteur in pariatur duis pariatur magna.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 17, 'Labore', 'Id proident duis aute proident consequat magna minim officia quis adipisicing do amet amet pariatur exercitation. Ad tempor quis laborum esse consectetur. Exercitation elit velit magna ea enim tempor elit aliqua enim Lorem consectetur in exercitation elit laboris. Eiusmod incididunt nisi ad.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 20, 'Veniam adipisicing', 'Magna sit irure officia do commodo sit in sint exercitation pariatur magna consectetur. Adipisicing voluptate laboris tempor aute esse nulla magna anim est ex aliquip. Veniam pariatur aliqua nulla esse adipisicing eu quis qui exercitation non duis ipsum eiusmod.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 9, 21, 'Duis in anim', 'Nostrud deserunt ea pariatur pariatur aute voluptate reprehenderit est in aute veniam consectetur do velit eiusmod. Aute anim veniam minim amet culpa deserunt nisi dolore aute quis. Nulla qui commodo consectetur sint deserunt cillum pariatur irure dolor mollit commodo officia ea qui qui. Ipsum sint sunt deserunt tempor pariatur consequat non enim consequat est nisi ipsum excepteur velit tempor.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 1, 'Nisi eu', 'In ullamco ea non consectetur cupidatat dolore qui nulla laborum sit ipsum. Culpa duis sit eu dolore eiusmod reprehenderit duis mollit veniam nostrud. Anim dolor ex esse do.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 2, 'Exercitation minim', 'Adipisicing esse eiusmod qui officia fugiat Lorem in ut. Proident ad cupidatat ea voluptate amet sint et. Velit ex ipsum aliqua ut sint ipsum. Aliqua do anim anim aliqua adipisicing amet enim velit in.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 3, 'Qui', 'Fugiat commodo excepteur aute officia quis cupidatat reprehenderit. Ea amet in veniam in consequat consectetur. Magna tempor excepteur reprehenderit. Est magna labore et in mollit dolor id eiusmod.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 4, 'Commodo', 'Lorem qui aliqua pariatur consequat qui ea pariatur ullamco. Nulla est in labore sint. Est cillum nostrud ullamco deserunt et. Id minim duis commodo aliquip aliqua elit irure occaecat in cillum esse et consectetur mollit dolor.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 5, 'Sint', 'Consequat nulla qui nostrud id esse minim elit ea aliquip anim. Amet consequat ullamco qui dolore eiusmod aute. Cillum est voluptate Lorem eiusmod enim laborum proident. Fugiat sit sunt ut dolor eiusmod est. Eu nisi ex proident labore enim dolor aute elit.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 7, 'Dolore officia minim', 'Qui reprehenderit in amet sit ullamco ex elit nulla duis. Veniam fugiat laborum elit aute ea irure labore aliqua veniam. Duis excepteur esse nulla deserunt amet labore id sit commodo.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 8, 'Ad tempor', 'Laboris anim nostrud culpa ullamco proident ad aute cillum excepteur elit fugiat in mollit consectetur. Consectetur mollit non enim consectetur dolore culpa minim exercitation dolore sit ex est irure do tempor. Nostrud cupidatat deserunt sint non dolore proident cillum ea mollit dolor qui. Amet laboris irure officia veniam commodo laborum ea ex ea fugiat. Et reprehenderit mollit eu nisi do cillum.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 9, 'Veniam eu', 'Est magna ut commodo. Ad ad ea adipisicing ullamco dolor anim Lorem aute reprehenderit dolore mollit non occaecat. Reprehenderit veniam nisi cillum in nostrud elit amet reprehenderit dolor pariatur culpa fugiat incididunt proident officia. Irure reprehenderit tempor in sunt. Aute laborum eu nostrud amet.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 10, 'Consequat enim deserunt', 'Elit reprehenderit irure et nisi esse pariatur id ea. Ea aute aliquip adipisicing ut proident adipisicing non sit eiusmod aliqua duis sint laborum. Voluptate aute nisi tempor voluptate magna ea Lorem in exercitation excepteur aliquip labore commodo exercitation aliqua. Anim sunt reprehenderit officia pariatur fugiat amet ex et mollit quis fugiat dolor labore. Aliqua minim commodo magna labore officia enim sit commodo nostrud ipsum incididunt.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 11, 'Consequat', 'Incididunt labore voluptate dolor ex magna labore deserunt nostrud laboris reprehenderit nulla qui ipsum officia elit. Aliquip ipsum cillum quis in officia cupidatat eu qui. Ex excepteur officia velit non ad officia eu ex eiusmod aute irure anim aliqua cillum ea. Nulla reprehenderit nostrud commodo voluptate incididunt duis tempor. Cupidatat ea ipsum ea culpa ipsum.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 12, 'Dolor', 'Amet ullamco consectetur non duis pariatur eiusmod dolore. Aliquip minim non mollit nulla magna. Eiusmod laboris mollit labore adipisicing deserunt ut.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 13, 'Adipisicing ea', 'Ullamco nisi magna amet officia ut officia ea sit labore. Duis cillum ad sit esse fugiat anim id adipisicing dolore pariatur sint. Ut voluptate veniam pariatur proident dolor occaecat in sint consectetur magna in aute consectetur. Elit fugiat laboris cupidatat.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 14, 'Quis', 'Enim veniam enim excepteur commodo irure voluptate veniam amet nisi aliquip eiusmod minim magna. Sint deserunt aliquip nulla nulla quis culpa consequat excepteur sint fugiat. Est voluptate ea deserunt. Incididunt cillum velit adipisicing deserunt aliquip.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 16, 'Veniam', 'Cillum dolor quis irure officia et non id fugiat qui. Exercitation voluptate occaecat aute duis sint mollit amet elit ullamco adipisicing adipisicing nisi ea aliquip. Labore id ullamco dolor cillum elit deserunt pariatur nisi. Commodo sunt ipsum reprehenderit ea tempor laborum qui dolore ut.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 17, 'Nostrud labore consectetur', 'Ad non consequat aliqua exercitation aliqua. Voluptate velit enim velit aliqua. Fugiat est veniam occaecat nostrud ea.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 20, 'Aliqua irure', 'Velit aliquip eu voluptate ullamco irure nulla. Commodo consectetur pariatur do ipsum duis voluptate non do reprehenderit ut. Ad eiusmod magna cillum consectetur ad exercitation fugiat. Incididunt ad labore eiusmod.');
INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (DEFAULT, 10, 21, 'Proident sunt', 'Ad laboris eu aliqua pariatur. Nisi do cupidatat commodo eu ipsum ullamco minim magna nisi exercitation velit est anim ipsum Lorem. Dolore laborum culpa proident eiusmod dolore cupidatat consectetur excepteur ipsum elit aute. Elit exercitation mollit commodo est. Enim qui eu excepteur exercitation eiusmod cillum.');
--
-- PostgreSQL database dump complete
--
@@ -1,32 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: designers-blocked; Type: TABLE DATA; Schema: public; Owner: postgres
--
INSERT INTO public."designers-blocked" (designerid, domain) VALUES (1, 'www.photowall.fi');
INSERT INTO public."designers-blocked" (designerid, domain) VALUES (2, 'www.photowall.fi');
INSERT INTO public."designers-blocked" (designerid, domain) VALUES (3, 'www.photowall.eu');
INSERT INTO public."designers-blocked" (designerid, domain) VALUES (4, 'www.photowall.de');
INSERT INTO public."designers-blocked" (designerid, domain) VALUES (5, 'www.photowall.fi');
--
-- PostgreSQL database dump complete
--
-37
View File
@@ -1,37 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: designers; Type: TABLE DATA; Schema: public; Owner: postgres
--
INSERT INTO public.designers (designerid, name, path, username, password, co, street, zipcode, city, territory, phone, email, orgnr, currency, commission, commission_resale, balance, description, comments, status, inserted, updated, license_image, type, segmentation, visible_search, visible_list, visible_productpage, visible_designerpage, sort_desc, no_follow, logotype, automatic_payout, pricepremium_wallpaper, pricepremium_canvas, pricepremium_poster, pricepremium_framed_print, wallpaper_image_id, canvas_image_id, poster_image_id, framed_print_image_id) VALUES (DEFAULT, 'Candida Bins', 'candida-bins', 'candida-bins', NULL, 'Schultz and Sons adipisicing', 'Roberto Spurs', '32285-4324', 'Port Alexander', 'BE', '050-349-6944', 'Jackson_Mraz@gmail.com', '123456-4321', 'USD', 18, 18, 0, NULL, '', 1, DEFAULT, '2020-03-16T16:06:09.705Z', NULL, NULL, 1, 1, 1, 1, 1, false, 0, 'designers/1.jpg', 0, 18, 18, 18, 18, NULL, NULL, NULL, NULL);
INSERT INTO public.designers (designerid, name, path, username, password, co, street, zipcode, city, territory, phone, email, orgnr, currency, commission, commission_resale, balance, description, comments, status, inserted, updated, license_image, type, segmentation, visible_search, visible_list, visible_productpage, visible_designerpage, sort_desc, no_follow, logotype, automatic_payout, pricepremium_wallpaper, pricepremium_canvas, pricepremium_poster, pricepremium_framed_print, wallpaper_image_id, canvas_image_id, poster_image_id, framed_print_image_id) VALUES (DEFAULT, 'a', 'jailyn-borer', 'jailyn-borer', NULL, 'DAmore - Cartwright aliquip', 'Waelchi Camp', '10273', 'Starktown', 'PL', '339-098-0167', 'Rusty_Hermann@hotmail.com', '123456-4321', 'DKK', 18, 18, 0, NULL, '', 1, DEFAULT, '2020-03-23T21:04:42.282Z', NULL, NULL, 1, 1, 1, 1, 1, false, 0, 'designers/2.jpg', 0, 18, 18, 18, 18, NULL, NULL, NULL, NULL);
INSERT INTO public.designers (designerid, name, path, username, password, co, street, zipcode, city, territory, phone, email, orgnr, currency, commission, commission_resale, balance, description, comments, status, inserted, updated, license_image, type, segmentation, visible_search, visible_list, visible_productpage, visible_designerpage, sort_desc, no_follow, logotype, automatic_payout, pricepremium_wallpaper, pricepremium_canvas, pricepremium_poster, pricepremium_framed_print, wallpaper_image_id, canvas_image_id, poster_image_id, framed_print_image_id) VALUES (DEFAULT, 'April Terry', 'april-terry', 'april-terry', NULL, 'Windler, White and Cremin proident', 'Kunde Ports', '85493', 'East Jodyville', 'GB', '(853) 198-0457 x54038', 'Stephany29@hotmail.com', '123456-4321', 'DKK', 18, 18, 0, NULL, '', 1, DEFAULT, '2020-03-13T09:50:32.239Z', NULL, NULL, 1, 1, 1, 1, 1, false, 0, 'designers/3.jpg', 0, 18, 18, 18, 18, NULL, NULL, NULL, NULL);
INSERT INTO public.designers (designerid, name, path, username, password, co, street, zipcode, city, territory, phone, email, orgnr, currency, commission, commission_resale, balance, description, comments, status, inserted, updated, license_image, type, segmentation, visible_search, visible_list, visible_productpage, visible_designerpage, sort_desc, no_follow, logotype, automatic_payout, pricepremium_wallpaper, pricepremium_canvas, pricepremium_poster, pricepremium_framed_print, wallpaper_image_id, canvas_image_id, poster_image_id, framed_print_image_id) VALUES (DEFAULT, 'Elizabeth Pouros', 'elizabeth-pouros', 'elizabeth-pouros', NULL, 'Terry, OKon and Aufderhar sint', 'Moore Union', '68329', 'Port Ellahaven', 'NO', '(059) 091-5588 x545', 'Khalil_Prosacco30@gmail.com', '123456-4321', 'USD', 18, 18, 0, NULL, '', 1, DEFAULT, '2020-02-19T13:26:23.531Z', NULL, NULL, 1, 1, 1, 1, 1, false, 0, 'designers/4.jpg', 0, 18, 18, 18, 18, NULL, NULL, NULL, NULL);
INSERT INTO public.designers (designerid, name, path, username, password, co, street, zipcode, city, territory, phone, email, orgnr, currency, commission, commission_resale, balance, description, comments, status, inserted, updated, license_image, type, segmentation, visible_search, visible_list, visible_productpage, visible_designerpage, sort_desc, no_follow, logotype, automatic_payout, pricepremium_wallpaper, pricepremium_canvas, pricepremium_poster, pricepremium_framed_print, wallpaper_image_id, canvas_image_id, poster_image_id, framed_print_image_id) VALUES (DEFAULT, 'Stella Hudson', 'stella-hudson', 'stella-hudson', NULL, 'Kohler, Schneider and Littel Lorem', 'Duane Brooks', '75292', 'South Sammie', 'NO', '(124) 852-7198', 'Cassandra.Koss@hotmail.com', '123456-4321', 'SEK', 18, 18, 0, NULL, '', 1, DEFAULT, '2020-02-16T09:47:50.474Z', NULL, NULL, 1, 1, 1, 1, 1, false, 0, 'designers/5.jpg', 0, 18, 18, 18, 18, NULL, NULL, NULL, NULL);
INSERT INTO public.designers (designerid, name, path, username, password, co, street, zipcode, city, territory, phone, email, orgnr, currency, commission, commission_resale, balance, description, comments, status, inserted, updated, license_image, type, segmentation, visible_search, visible_list, visible_productpage, visible_designerpage, sort_desc, no_follow, logotype, automatic_payout, pricepremium_wallpaper, pricepremium_canvas, pricepremium_poster, pricepremium_framed_print, wallpaper_image_id, canvas_image_id, poster_image_id, framed_print_image_id) VALUES (DEFAULT, 'Melvin Marquardt', 'melvin-marquardt', 'melvin-marquardt', NULL, 'Rice - Stracke magna', 'Kemmer Summit', '78911-5242', 'South Bernadinemouth', 'BE', '982.542.2900 x7962', 'Howell.Koch@yahoo.com', '123456-4321', 'GBP', 18, 18, 0, NULL, '', 1, DEFAULT, '2020-02-21T04:40:17.462Z', NULL, NULL, 1, 1, 1, 1, 1, false, 0, 'designers/6.jpg', 0, 18, 18, 18, 18, NULL, NULL, NULL, NULL);
INSERT INTO public.designers (designerid, name, path, username, password, co, street, zipcode, city, territory, phone, email, orgnr, currency, commission, commission_resale, balance, description, comments, status, inserted, updated, license_image, type, segmentation, visible_search, visible_list, visible_productpage, visible_designerpage, sort_desc, no_follow, logotype, automatic_payout, pricepremium_wallpaper, pricepremium_canvas, pricepremium_poster, pricepremium_framed_print, wallpaper_image_id, canvas_image_id, poster_image_id, framed_print_image_id) VALUES (DEFAULT, 'Stefanie Will', 'stefanie-will', 'stefanie-will', NULL, 'Batz and Sons sit', 'Kayley Mountains', '25524', 'Lydamouth', 'BE', '540-432-5631 x85518', 'Abby.Rodriguez@hotmail.com', '123456-4321', 'SEK', 18, 18, 0, NULL, '', 1, DEFAULT, '2020-03-28T22:55:42.859Z', NULL, NULL, 1, 1, 1, 1, 1, false, 0, 'designers/7.jpg', 0, 18, 18, 18, 18, NULL, NULL, NULL, NULL);
INSERT INTO public.designers (designerid, name, path, username, password, co, street, zipcode, city, territory, phone, email, orgnr, currency, commission, commission_resale, balance, description, comments, status, inserted, updated, license_image, type, segmentation, visible_search, visible_list, visible_productpage, visible_designerpage, sort_desc, no_follow, logotype, automatic_payout, pricepremium_wallpaper, pricepremium_canvas, pricepremium_poster, pricepremium_framed_print, wallpaper_image_id, canvas_image_id, poster_image_id, framed_print_image_id) VALUES (DEFAULT, 'Giles Rodriguez', 'giles-rodriguez', 'giles-rodriguez', NULL, 'Jacobi - Greenholt sunt', 'Deckow Street', '95411', 'North Angelo', 'FR', '1-946-352-6639 x343', 'Leonor_Shanahan5@yahoo.com', '123456-4321', 'RUB', 18, 18, 0, NULL, '', 1, DEFAULT, '2020-03-13T04:20:45.314Z', NULL, NULL, 1, 1, 1, 1, 1, false, 0, 'designers/8.jpg', 0, 18, 18, 18, 18, NULL, NULL, NULL, NULL);
INSERT INTO public.designers (designerid, name, path, username, password, co, street, zipcode, city, territory, phone, email, orgnr, currency, commission, commission_resale, balance, description, comments, status, inserted, updated, license_image, type, segmentation, visible_search, visible_list, visible_productpage, visible_designerpage, sort_desc, no_follow, logotype, automatic_payout, pricepremium_wallpaper, pricepremium_canvas, pricepremium_poster, pricepremium_framed_print, wallpaper_image_id, canvas_image_id, poster_image_id, framed_print_image_id) VALUES (DEFAULT, 'Gardner Hammes', 'gardner-hammes', 'gardner-hammes', NULL, 'Kerluke Group mollit', 'Mitchell Hills', '86114', 'OKonland', 'SE', '920.087.1448 x876', 'Kristina4@hotmail.com', '123456-4321', 'GBP', 18, 18, 0, NULL, '', 1, DEFAULT, '2020-02-02T01:48:32.116Z', NULL, NULL, 1, 1, 1, 1, 1, false, 0, 'designers/9.jpg', 0, 18, 18, 18, 18, NULL, NULL, NULL, NULL);
INSERT INTO public.designers (designerid, name, path, username, password, co, street, zipcode, city, territory, phone, email, orgnr, currency, commission, commission_resale, balance, description, comments, status, inserted, updated, license_image, type, segmentation, visible_search, visible_list, visible_productpage, visible_designerpage, sort_desc, no_follow, logotype, automatic_payout, pricepremium_wallpaper, pricepremium_canvas, pricepremium_poster, pricepremium_framed_print, wallpaper_image_id, canvas_image_id, poster_image_id, framed_print_image_id) VALUES (DEFAULT, 'Kathryn Schowalter', 'kathryn-schowalter', 'kathryn-schowalter', NULL, 'Prohaska and Sons aliqua', 'Kuhic Fork', '71641', 'East Dewayne', 'CA', '569.723.8669', 'Regan42@hotmail.com', '123456-4321', 'EUR', 18, 18, 0, NULL, '', 1, DEFAULT, '2020-02-17T04:01:27.380Z', NULL, NULL, 1, 1, 1, 1, 1, false, 0, 'designers/10.jpg', 0, 18, 18, 18, 18, NULL, NULL, NULL, NULL);
--
-- PostgreSQL database dump complete
--
-37
View File
@@ -1,37 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: invoices; Type: TABLE DATA; Schema: public; Owner: postgres
--
INSERT INTO public.invoices (id, inserted, order_id, invoice_date, invoice_sent) VALUES (DEFAULT, DEFAULT, 1, '2021-07-04', 0);
INSERT INTO public.invoices (id, inserted, order_id, invoice_date, invoice_sent) VALUES (DEFAULT, DEFAULT, 2, '2021-07-04', 0);
INSERT INTO public.invoices (id, inserted, order_id, invoice_date, invoice_sent) VALUES (DEFAULT, DEFAULT, 3, '2021-07-04', 0);
INSERT INTO public.invoices (id, inserted, order_id, invoice_date, invoice_sent) VALUES (DEFAULT, DEFAULT, 4, '2021-07-04', 0);
INSERT INTO public.invoices (id, inserted, order_id, invoice_date, invoice_sent) VALUES (DEFAULT, DEFAULT, 5, '2021-07-04', 1);
INSERT INTO public.invoices (id, inserted, order_id, invoice_date, invoice_sent) VALUES (DEFAULT, DEFAULT, 6, '2021-07-04', 0);
INSERT INTO public.invoices (id, inserted, order_id, invoice_date, invoice_sent) VALUES (DEFAULT, DEFAULT, 7, '2021-07-04', 1);
INSERT INTO public.invoices (id, inserted, order_id, invoice_date, invoice_sent) VALUES (DEFAULT, DEFAULT, 8, '2021-07-04', 0);
INSERT INTO public.invoices (id, inserted, order_id, invoice_date, invoice_sent) VALUES (DEFAULT, DEFAULT, 9, '2021-07-04', 1);
INSERT INTO public.invoices (id, inserted, order_id, invoice_date, invoice_sent) VALUES (DEFAULT, DEFAULT, 10, '2021-07-04', 0);
--
-- PostgreSQL database dump complete
--
-37
View File
@@ -1,37 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: orders; Type: TABLE DATA; Schema: public; Owner: postgres
--
UPDATE public.orders SET (paid, confirmed, delivered, newsletter, credit_invoice, canceled, reminder, delivered_date, country_code, language, delivery_country_code, delivery_method, delivery_price, delivery_vat, customer_type, payment_type, attention, currency, exchange_rate, exchange_rate_eur, invoice_id, contract_customer_id, vat_number, comment, cancels_order_id, cancelled_by_order_id, orderlog_id, reseller_store, order_sum, klarna_order_id, pwinty_id, email, phone, delivery_email, delivery_phone, customer_firstname, customer_lastname, customer_email, customer_cellphone, billing_address_id, delivery_address_id, flyer_ids, market, locale) = (0, 1, 1, 0, 0, 0, 0, '2020-03-31T01:51:48.252Z', 'AT', 'de', 'AT', 'postenBusiness', 0, 1.25, NULL, 'agreement', '', 'USD', 0, NULL, '1', 551, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Pansy_Bode@hotmail.com', NULL, NULL, NULL, 'Andres', 'Johnson', 'Pansy_Bode@hotmail.com', '658-218-4061 x418', 1, 1, NULL, 'AT', 'de_AT') WHERE id=1;
UPDATE public.orders SET (paid, confirmed, delivered, newsletter, credit_invoice, canceled, reminder, delivered_date, country_code, language, delivery_country_code, delivery_method, delivery_price, delivery_vat, customer_type, payment_type, attention, currency, exchange_rate, exchange_rate_eur, invoice_id, contract_customer_id, vat_number, comment, cancels_order_id, cancelled_by_order_id, orderlog_id, reseller_store, order_sum, klarna_order_id, pwinty_id, email, phone, delivery_email, delivery_phone, customer_firstname, customer_lastname, customer_email, customer_cellphone, billing_address_id, delivery_address_id, flyer_ids, market, locale) = (1, 0, 1, 1, 1, 0, 1, '2020-03-31T21:49:26.555Z', 'NO', 'nn', 'NO', 'dhlEconomyWorld', 0, 1.25, NULL, 'agreement', '', 'DKK', 1, NULL, '2', 551, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Perry93@hotmail.com', NULL, NULL, NULL, 'Claudia', 'Mraz', 'Perry93@hotmail.com', '(358) 748-5735 x99350', 2, 2, NULL, 'NO', 'nn_NO') WHERE id=2;
UPDATE public.orders SET (paid, confirmed, delivered, newsletter, credit_invoice, canceled, reminder, delivered_date, country_code, language, delivery_country_code, delivery_method, delivery_price, delivery_vat, customer_type, payment_type, attention, currency, exchange_rate, exchange_rate_eur, invoice_id, contract_customer_id, vat_number, comment, cancels_order_id, cancelled_by_order_id, orderlog_id, reseller_store, order_sum, klarna_order_id, pwinty_id, email, phone, delivery_email, delivery_phone, customer_firstname, customer_lastname, customer_email, customer_cellphone, billing_address_id, delivery_address_id, flyer_ids, market, locale) = (0, 0, 1, 0, 0, 0, 0, '2020-03-16T23:27:44.263Z', 'CA', 'en', 'CA', 'dhlFreightPrivate', 0, 1.25, NULL, 'agreement', '', 'DKK', 1, NULL, '3', 551, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Dorthy_Feeney@gmail.com', NULL, NULL, NULL, 'Karlee', 'Dooley', 'Dorthy_Feeney@gmail.com', '(456) 243-9914 x06436', 3, 3, NULL, 'CA', 'en_CA') WHERE id=3;
UPDATE public.orders SET (paid, confirmed, delivered, newsletter, credit_invoice, canceled, reminder, delivered_date, country_code, language, delivery_country_code, delivery_method, delivery_price, delivery_vat, customer_type, payment_type, attention, currency, exchange_rate, exchange_rate_eur, invoice_id, contract_customer_id, vat_number, comment, cancels_order_id, cancelled_by_order_id, orderlog_id, reseller_store, order_sum, klarna_order_id, pwinty_id, email, phone, delivery_email, delivery_phone, customer_firstname, customer_lastname, customer_email, customer_cellphone, billing_address_id, delivery_address_id, flyer_ids, market, locale) = (0, 0, 1, 1, 0, 0, 0, '2020-02-22T02:25:09.425Z', 'SE', 'sv', 'SE', 'dbSchenkerBHP', 0, 1.25, NULL, 'agreement', '', 'GBP', 0, NULL, '4', 551, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Nova37@yahoo.com', NULL, NULL, NULL, 'Nicholaus', 'Kreiger', 'Nova37@yahoo.com', '(184) 061-2233 x778', 4, 4, NULL, 'SE', 'sv_SE') WHERE id=4;
UPDATE public.orders SET (paid, confirmed, delivered, newsletter, credit_invoice, canceled, reminder, delivered_date, country_code, language, delivery_country_code, delivery_method, delivery_price, delivery_vat, customer_type, payment_type, attention, currency, exchange_rate, exchange_rate_eur, invoice_id, contract_customer_id, vat_number, comment, cancels_order_id, cancelled_by_order_id, orderlog_id, reseller_store, order_sum, klarna_order_id, pwinty_id, email, phone, delivery_email, delivery_phone, customer_firstname, customer_lastname, customer_email, customer_cellphone, billing_address_id, delivery_address_id, flyer_ids, market, locale) = (1, 0, 1, 0, 0, 1, 1, '2020-02-29T15:07:00.700Z', 'SE', 'sv', 'SE', 'postenBusiness', 0, 1.25, NULL, 'agreement', '', 'EUR', 0, NULL, '5', 551, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Nora_Crist56@yahoo.com', NULL, NULL, NULL, 'Ardith', 'Gleason', 'Nora_Crist56@yahoo.com', '404.568.6249 x67491', 5, 5, NULL, 'SE', 'sv_SE') WHERE id=5;
UPDATE public.orders SET (paid, confirmed, delivered, newsletter, credit_invoice, canceled, reminder, delivered_date, country_code, language, delivery_country_code, delivery_method, delivery_price, delivery_vat, customer_type, payment_type, attention, currency, exchange_rate, exchange_rate_eur, invoice_id, contract_customer_id, vat_number, comment, cancels_order_id, cancelled_by_order_id, orderlog_id, reseller_store, order_sum, klarna_order_id, pwinty_id, email, phone, delivery_email, delivery_phone, customer_firstname, customer_lastname, customer_email, customer_cellphone, billing_address_id, delivery_address_id, flyer_ids, market, locale) = (0, 1, 0, 0, 1, 0, 1, '2020-02-28T10:25:44.819Z', 'CA', 'fr', 'CA', 'bringPrivate', 0, 1.25, NULL, 'agreement', '', 'SEK', 1, NULL, '6', 551, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Giovanni_Olson81@yahoo.com', NULL, NULL, NULL, 'Cordie', 'Ward', 'Giovanni_Olson81@yahoo.com', '353-660-8849 x83675', 6, 6, NULL, 'CA', 'fr_CA') WHERE id=6;
UPDATE public.orders SET (paid, confirmed, delivered, newsletter, credit_invoice, canceled, reminder, delivered_date, country_code, language, delivery_country_code, delivery_method, delivery_price, delivery_vat, customer_type, payment_type, attention, currency, exchange_rate, exchange_rate_eur, invoice_id, contract_customer_id, vat_number, comment, cancels_order_id, cancelled_by_order_id, orderlog_id, reseller_store, order_sum, klarna_order_id, pwinty_id, email, phone, delivery_email, delivery_phone, customer_firstname, customer_lastname, customer_email, customer_cellphone, billing_address_id, delivery_address_id, flyer_ids, market, locale) = (1, 0, 1, 1, 1, 1, 0, '2020-02-20T10:38:59.526Z', 'CA', 'en', 'CA', 'postenBusiness', 0, 1.25, NULL, 'agreement', '', 'NOK', 0, NULL, '7', 551, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Darrick.Baumbach49@gmail.com', NULL, NULL, NULL, 'David', 'Gaylord', 'Darrick.Baumbach49@gmail.com', '708.650.2817', 7, 7, NULL, 'CA', 'en_CA') WHERE id=7;
UPDATE public.orders SET (paid, confirmed, delivered, newsletter, credit_invoice, canceled, reminder, delivered_date, country_code, language, delivery_country_code, delivery_method, delivery_price, delivery_vat, customer_type, payment_type, attention, currency, exchange_rate, exchange_rate_eur, invoice_id, contract_customer_id, vat_number, comment, cancels_order_id, cancelled_by_order_id, orderlog_id, reseller_store, order_sum, klarna_order_id, pwinty_id, email, phone, delivery_email, delivery_phone, customer_firstname, customer_lastname, customer_email, customer_cellphone, billing_address_id, delivery_address_id, flyer_ids, market, locale) = (0, 0, 1, 0, 0, 1, 1, '2020-03-23T16:13:54.959Z', 'GB', 'en', 'GB', 'dhl', 0, 1.25, NULL, 'agreement', '', 'CAD', 0, NULL, '8', 551, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Lloyd_Quitzon@hotmail.com', NULL, NULL, NULL, 'Nathan', 'Graham', 'Lloyd_Quitzon@hotmail.com', '(602) 157-7172 x3015', 8, 8, NULL, 'GB', 'en_GB') WHERE id=8;
UPDATE public.orders SET (paid, confirmed, delivered, newsletter, credit_invoice, canceled, reminder, delivered_date, country_code, language, delivery_country_code, delivery_method, delivery_price, delivery_vat, customer_type, payment_type, attention, currency, exchange_rate, exchange_rate_eur, invoice_id, contract_customer_id, vat_number, comment, cancels_order_id, cancelled_by_order_id, orderlog_id, reseller_store, order_sum, klarna_order_id, pwinty_id, email, phone, delivery_email, delivery_phone, customer_firstname, customer_lastname, customer_email, customer_cellphone, billing_address_id, delivery_address_id, flyer_ids, market, locale) = (1, 1, 1, 0, 1, 0, 0, '2020-03-29T02:46:27.665Z', 'AT', 'de', 'AT', 'myPack', 0, 1.25, NULL, 'agreement', '', 'RUB', 0, NULL, '9', 551, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Zander.Thompson55@gmail.com', NULL, NULL, NULL, 'Garrick', 'Lesch', 'Zander.Thompson55@gmail.com', '472.496.1635 x919', 9, 9, NULL, 'AT', 'de_AT') WHERE id=9;
UPDATE public.orders SET (paid, confirmed, delivered, newsletter, credit_invoice, canceled, reminder, delivered_date, country_code, language, delivery_country_code, delivery_method, delivery_price, delivery_vat, customer_type, payment_type, attention, currency, exchange_rate, exchange_rate_eur, invoice_id, contract_customer_id, vat_number, comment, cancels_order_id, cancelled_by_order_id, orderlog_id, reseller_store, order_sum, klarna_order_id, pwinty_id, email, phone, delivery_email, delivery_phone, customer_firstname, customer_lastname, customer_email, customer_cellphone, billing_address_id, delivery_address_id, flyer_ids, market, locale) = (1, 0, 1, 0, 1, 1, 0, '2020-02-29T03:59:20.806Z', 'BE', 'nl', 'BE', 'dhlEconomyUK', 0, 1.25, NULL, 'agreement', '', 'CAD', 1, NULL, '10', 551, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Ottilie23@gmail.com', NULL, NULL, NULL, 'Marta', 'Stanton', 'Ottilie23@gmail.com', '(873) 766-2029 x8153', 10, 10, NULL, 'BE', 'nl_BE') WHERE id=10;
--
-- PostgreSQL database dump complete
--
-43
View File
@@ -1,43 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: product-products; Type: TABLE DATA; Schema: public; Owner: postgres
--
INSERT INTO public."product-products" (productid, path, visible, browsable, designerid, inserted, updated, ref1, ref2, ref3) VALUES (DEFAULT, 'dolore-magna', 1, 1, 1, '2020-02-18T02:14:06.585Z', NULL, 'Manuela Glover', NULL, NULL);
INSERT INTO public."product-products" (productid, path, visible, browsable, designerid, inserted, updated, ref1, ref2, ref3) VALUES (DEFAULT, 'nostrud-magna', 1, 1, 4, '2020-03-17T22:25:14.136Z', NULL, 'Jaylan Parker', NULL, NULL);
INSERT INTO public."product-products" (productid, path, visible, browsable, designerid, inserted, updated, ref1, ref2, ref3) VALUES (DEFAULT, 'eiusmod-commodo', 1, 1, 4, '2020-03-01T19:24:54.585Z', NULL, 'Monique Hoppe', NULL, NULL);
INSERT INTO public."product-products" (productid, path, visible, browsable, designerid, inserted, updated, ref1, ref2, ref3) VALUES (DEFAULT, 'eu-consectetur', 1, 1, 3, '2020-02-03T03:19:27.628Z', NULL, 'Megane Weimann', NULL, NULL);
INSERT INTO public."product-products" (productid, path, visible, browsable, designerid, inserted, updated, ref1, ref2, ref3) VALUES (DEFAULT, 'magna-aliquip', 1, 1, 1, '2020-03-08T17:11:23.147Z', NULL, 'Brando Zboncak', NULL, NULL);
INSERT INTO public."product-products" (productid, path, visible, browsable, designerid, inserted, updated, ref1, ref2, ref3) VALUES (DEFAULT, 'adipisicing-aute', 1, 1, 3, '2020-03-21T06:04:11.449Z', NULL, 'Katelyn Wuckert', NULL, NULL);
INSERT INTO public."product-products" (productid, path, visible, browsable, designerid, inserted, updated, ref1, ref2, ref3) VALUES (DEFAULT, 'in-nulla', 1, 1, 4, '2020-03-09T18:21:29.446Z', NULL, 'Casey Langworth', NULL, NULL);
INSERT INTO public."product-products" (productid, path, visible, browsable, designerid, inserted, updated, ref1, ref2, ref3) VALUES (DEFAULT, 'qui-incididunt', 1, 1, 3, '2020-02-15T05:43:58.208Z', NULL, 'Lottie Cummerata', NULL, NULL);
INSERT INTO public."product-products" (productid, path, visible, browsable, designerid, inserted, updated, ref1, ref2, ref3) VALUES (DEFAULT, 'mollit-esse', 1, 1, 1, '2020-03-07T03:27:47.468Z', NULL, 'Lila Rippin', NULL, NULL);
INSERT INTO public."product-products" (productid, path, visible, browsable, designerid, inserted, updated, ref1, ref2, ref3) VALUES (DEFAULT, 'irure-aliqua', 1, 1, 3, '2020-02-20T17:46:24.406Z', NULL, 'Reba Schmidt', NULL, NULL);
--
-- Name: product-products_productid_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres
--
SELECT pg_catalog.setval('public."product-products_productid_seq"', 76042, true);
--
-- PostgreSQL database dump complete
--
File diff suppressed because it is too large Load Diff
-48
View File
@@ -1,48 +0,0 @@
import _ from 'lodash';
import { io, randomLocaleObject, person, saveFromTemplate } from './common.js';
const keys = {
id: 'DEFAULT',
address1: null,
company_name: null,
country_code: null,
city: null,
zipcode: null,
first_name: null,
last_name: null,
address2: null,
state: null,
};
const inserts = [];
const N = 20;
for (const id of [...Array(N + 1).keys()].slice(1)) {
const fp = person();
const locale = randomLocaleObject();
const key = Object.assign({}, keys, {
address1: `'${fp.adress.streetAddress}'`,
company_name: `'${fp.job.company}'`,
country_code: locale.country,
city: `'${fp.adress.city}'`,
zipcode: `'${fp.adress.zip}'`,
first_name: `'${fp.firstName}'`,
last_name: `'${fp.lastName}'`,
address2: `'${io() === 1 ? fp.adress.street : ''}'`,
state: `'${fp.adress.state}'`,
});
const insertString = `INSERT INTO public.addresses (id, address1, company_name, country_code, city, zipcode, first_name, last_name, address2, state) VALUES (${Object.values(
key,
).join(', ')});`;
inserts.push(insertString);
}
saveFromTemplate(
'templates/addresses.sql',
'../db/data/addresses.sql',
'{x}',
inserts.join('\n'),
);
-199
View File
@@ -1,199 +0,0 @@
// import { LoremIpsum } from 'lorem-ipsum';
import fs from 'fs';
import fakePeople from 'fake-people';
import _ from 'lodash';
import DateGenerator from 'random-date-generator';
import { LoremIpsum } from 'lorem-ipsum';
import { join } from 'path';
export const randomDateStringBetween = (from, to) => {
const d = DateGenerator.getRandomDateInRange(from, to);
return `'${new Date(d).toISOString()}'`;
};
const locales = [
'sv_SE',
'nn_NO',
'en_GB',
'da_DK',
'fi_FI',
'en_EU',
'de_DE',
'nl_NL',
'de_AT',
'en_US',
'es_ES',
'fr_FR',
'pl_PL',
'it_IT',
'fr_BE',
'nl_BE',
'en_CA',
'fr_CA',
];
const countryKeys = [
'SE',
'NO',
'GB',
'DK',
'FI',
'EU',
'DE',
'NL',
'AT',
'US',
'ES',
'FR',
'PL',
'IT',
'BE',
'BE',
'CA',
'CA',
];
const currencies = ['SEK', 'CAD', 'RUB', 'DKK', 'EUR', 'GBP', 'NOK', 'USD'];
const deliveryMethods = [
'postenStandard',
'postenBusiness',
'noDelivery',
'myPack',
'dbSchenker',
'dbSchenkerBHP',
'dbSchenkerBPA',
'bringPrivate',
'bringCompany',
'dhl',
'samplesDelivery',
'dhlFreightPrivate',
'dhlFreightBusiness',
'dhlExpress',
'dhlEconomyEU',
'dhlEconomyWorld',
'dhlEconomyUK',
];
const domains = [
'www.photowall.su',
'www.photowall.co.uk',
'www.photowall.eu',
'www.photowall.de',
'www.photowall.fr',
'www.photowall.dk',
'www.photowall.fi',
'www.photowall.no',
];
export const randomFrom = (arr) => {
return arr[_.random(0, arr.length - 1)];
};
export const randomStockId = () => {
return randomFrom([
157, 155, 148, 176, 143, 178, 151, 205, 206, 154, 163, 180, 172, 203, 150,
156, 158, 161, 179, 160, 146, 171, 147, 153, 207, 209, 174, 159, 149, 142,
208, 162,
]);
};
export const randomDomain = () => {
return `'${domains[_.random(0, domains.length - 1)]}'`;
};
export const randomTerritory = () => {
return `'${countryKeys[_.random(0, countryKeys.length - 1)]}'`;
};
export const randomLocale = () => {
return `'${locales[_.random(0, locales.length - 1)]}'`;
};
export const randomProductGroup = () => {
const values = ['photo-wallpaper', 'canvas', 'framed-print'];
return `'${values[_.random(0, values.length - 1)]}'`;
};
export const randomArtNo = () => {
return `e${_.random(1000, 99999)}`;
};
export const randomProductType = () => {
const values = ['scaling', 'stock', '%', 'EUR', 'custom', 'tiling'];
return `'${values[_.random(0, values.length - 1)]}'`;
};
export const randomLocaleObject = () => {
const r = locales[_.random(0, locales.length - 1)];
const c = currencies[_.random(0, currencies.length - 1)];
const spl = r.split('_');
return {
locale: `'${r}'`,
lang: `'${spl[0]}'`,
country: `'${spl[1]}'`,
currency: `'${c}'`,
};
};
export const randomDeliveryMethod = () => {
return `'${deliveryMethods[_.random(0, deliveryMethods.length - 1)]}'`;
};
export const io = () => {
return _.random(0, 1);
};
export const ioBool = () => {
return _.random(0, 1) === 1;
};
export const padNum = (num) => {
return num < 10 ? `0${num}` : `${num}`;
};
export const person = () => {
const p = fakePeople.generate(0);
const pp = JSON.parse(JSON.stringify(p).replace(/'/g, ''));
return pp;
};
export const dateBetween = (from_yymmdd, to_yymmdd) => {
const fyy = Math.trunc(from_yymmdd / 10000);
const fmm = Math.trunc((from_yymmdd - fyy * 10000) / 100);
const fdd = from_yymmdd - fyy * 10000 - fmm * 100;
const tyy = Math.trunc(to_yymmdd / 10000);
const tmm = Math.trunc((to_yymmdd - tyy * 10000) / 100);
const tdd = to_yymmdd - tyy * 10000 - tmm * 100;
return DateGenerator.getRandomDateInRange(
new Date(2000 + fyy, fmm, fdd),
new Date(2000 + tyy, tmm, tdd),
);
};
export const saveFromTemplate = (
templateFile,
outputFile,
delimiter,
insert,
) => {
const template = fs.readFileSync(templateFile, 'utf-8');
const inject = template.replace(delimiter, insert);
const response = fs.writeFileSync(outputFile, inject);
return response;
};
export const lorem = (() => {
return new LoremIpsum({
sentencesPerParagraph: {
max: 8,
min: 4,
},
wordsPerSentence: {
max: 16,
min: 4,
},
});
})();
@@ -1,40 +0,0 @@
import _ from 'lodash';
import { saveFromTemplate, lorem } from './common.js';
const keys = {
id: 'DEFAULT',
designerid: null,
locale_id: null,
header: null,
description: null,
};
const inserts = [];
const N = 10;
for (const id of [...Array(N + 1).keys()].slice(1)) {
let insertString = '';
for (const locale_id of [
1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 20, 21,
]) {
const key = Object.assign({}, keys, {
designerid: id,
locale_id: locale_id,
header: `'${_.capitalize(lorem.generateWords(_.random(1, 3)))}'`,
description: `'${lorem.generateSentences(_.random(3, 5))}'`,
});
insertString += `INSERT INTO public.designer_texts (id, designerid, locale_id, header, description) VALUES (${Object.values(
key,
).join(', ')});\n`;
}
inserts.push(insertString);
}
saveFromTemplate(
'templates/designer_texts.sql',
'../db/data/designer_texts.sql',
'{x}',
inserts.join('\n'),
);
@@ -1,39 +0,0 @@
import { LoremIpsum } from 'lorem-ipsum';
import _ from 'lodash';
import {
saveFromTemplate,
randomDomain,
randomLocaleObject,
dateBetween,
person,
} from './common.js';
// INSERT INTO public."designers-blocked" (designerid, domain) VALUES (1, 'www.photowall.co.uk');
const keys = {
designerid: null,
domain: null,
};
const inserts = [];
const N = 5;
for (const id of [...Array(N + 1).keys()].slice(1)) {
const key = Object.assign({}, keys, {
designerid: id,
domain: randomDomain(),
});
const insertString = `INSERT INTO public."designers-blocked" (designerid, domain) VALUES (${Object.values(
key,
).join(', ')});`;
inserts.push(insertString);
}
saveFromTemplate(
'templates/designers-blocked.sql',
'../db/data/designers-blocked.sql',
'{x}',
inserts.join('\n'),
);
-119
View File
@@ -1,119 +0,0 @@
import _ from 'lodash';
import {
saveFromTemplate,
randomLocaleObject,
dateBetween,
person,
lorem,
} from './common.js';
const keys = {
designerid: 233,
name: '',
path: '',
username: '',
password: 'NULL',
co: '',
street: '',
zipcode: '',
city: '',
territory: 'SE',
phone: '',
email: '',
orgnr: '',
currency: 'SEK',
commission: 18,
commission_resale: 18,
balance: 0,
description: 'NULL',
comments: '',
status: 1,
inserted: '2019-06-25 12:18:27.781469+02',
updated: '2021-04-14 15:16:31.031097+02',
license_image: 'NULL',
type: 'NULL',
segmentation: 1,
visible_search: 1,
visible_list: 1,
visible_productpage: 1,
visible_designerpage: 1,
sort_desc: false,
no_follow: 0,
logotype: 'designers/xxx.jpg',
automatic_payout: 0,
pricepremium_wallpaper: 18,
pricepremium_canvas: 18,
pricepremium_poster: 18,
pricepremium_framed_print: 18,
wallpaper_image_id: 'NULL',
canvas_image_id: 'NULL',
poster_image_id: 'NULL',
framed_print_image_id: 'NULL',
};
const inserts = [];
const N = 10;
for (const id of [...Array(N + 1).keys()].slice(1)) {
const fp = person();
const updated = dateBetween(200101, 200301);
const lo = randomLocaleObject();
const key = Object.assign({}, keys, {
designerid: 'DEFAULT', // 10
name: `'${fp.firstName} ${fp.lastName}'`, // 100
path: `'${_.kebabCase(`${fp.firstName}-${fp.lastName}`)}'`, // 100
username: `'${_.kebabCase(`${fp.firstName}-${fp.lastName}`)}'`, // 100
co: `'${fp.job.company} ${lorem.generateWords(1)}'`, // 100
street: `'${fp.adress.street}'`, // 100
zipcode: `'${fp.adress.zip}'`, // 100
city: `'${fp.adress.city}'`,
territory: lo.country,
phone: `'${fp.contacts.phone}'`,
email: `'${fp.contacts.email}'`,
orgnr: `'123456-4321'`,
currency: lo.currency,
commission: 18,
commission_resale: 18,
balance: 0,
comments: `''`,
status: 1,
inserted: 'DEFAULT',
updated: `'${new Date(updated).toISOString()}'`, // 2021-04-15 08:07:14.322589+02
segmentation: 1,
visible_search: 1,
visible_list: 1,
visible_productpage: 1,
visible_designerpage: 1,
sort_desc: false,
no_follow: 0,
logotype: `'designers/${id}.jpg'`,
automatic_payout: 0,
pricepremium_wallpaper: 18,
pricepremium_canvas: 18,
pricepremium_poster: 18,
pricepremium_framed_print: 18,
});
// Since the graphql query for designers is
// sorted on name we force the second designer
// to to top of the name sort.
// This is because we insert order on designer with
// id = 2
if (id === 2) {
key.name = `'a'`;
}
const insertString = `INSERT INTO public.designers (designerid, name, path, username, password, co, street, zipcode, city, territory, phone, email, orgnr, currency, commission, commission_resale, balance, description, comments, status, inserted, updated, license_image, type, segmentation, visible_search, visible_list, visible_productpage, visible_designerpage, sort_desc, no_follow, logotype, automatic_payout, pricepremium_wallpaper, pricepremium_canvas, pricepremium_poster, pricepremium_framed_print, wallpaper_image_id, canvas_image_id, poster_image_id, framed_print_image_id) VALUES (${Object.values(
key,
).join(', ')});`;
inserts.push(insertString);
}
saveFromTemplate(
'templates/designers.sql',
'../db/data/designers.sql',
'{x}',
inserts.join('\n'),
);
-40
View File
@@ -1,40 +0,0 @@
import chalk from 'chalk';
import { exec } from 'child_process';
import fs from 'fs';
const log = (str) => {
return console.log(chalk.red.bold('=> ') + chalk.white(str));
};
const pink = (str) => {
return chalk.magenta.bold(str);
};
export const execShellCommand = (cmd) => {
return new Promise((resolve, reject) => {
log(`${pink('CMD>')} ${cmd}`);
exec(cmd, (error, stdout, stderr) => {
if (error) console.warn(error);
resolve(stdout ? { resp: stdout } : { error: stderr });
});
});
};
(async () => {
const exports = [
'addresses',
'designers',
'designer_texts',
'designers-blocked',
'invoices',
'orders',
'product-products',
];
for (const file of exports) {
if (fs.existsSync(`../db/data/${file}.sql`)) {
//file exists
} else {
await execShellCommand(`node ${file}.js`);
}
}
})();
-39
View File
@@ -1,39 +0,0 @@
import _ from 'lodash';
import { io, saveFromTemplate, padNum } from './common.js';
// INSERT INTO public.invoices (id, inserted, order_id, invoice_date, invoice_sent) VALUES (DEFAULT, '2019-06-12T16:16:50.784Z', 4, '2019-06-12', 1);
const keys = {
id: 'DEFAULT',
inserted: 'DEFAULT',
order_id: null,
invoice_date: '',
invoice_sent: '',
};
const inserts = [];
const N = 10;
for (const id of [...Array(N + 1).keys()].slice(1)) {
const now = new Date();
const key = Object.assign({}, keys, {
order_id: id,
invoice_date: `'${now.getFullYear()}-${padNum(now.getMonth())}-${padNum(
now.getDay(),
)}'`,
invoice_sent: io(),
});
const insertString = `INSERT INTO public.invoices (id, inserted, order_id, invoice_date, invoice_sent) VALUES (${Object.values(
key,
).join(', ')});`;
inserts.push(insertString);
}
saveFromTemplate(
'templates/invoices.sql',
'../db/data/invoices.sql',
'{x}',
inserts.join('\n'),
);
-108
View File
@@ -1,108 +0,0 @@
import _ from 'lodash';
import {
io,
randomLocaleObject,
randomDeliveryMethod,
dateBetween,
person,
saveFromTemplate,
} from './common.js';
const keys = {
paid: 0,
confirmed: 1,
delivered: 0,
newsletter: 0,
credit_invoice: 0,
canceled: 1,
reminder: 0,
delivered_date: 'NULL',
country_code: 'SE',
language: 'sv',
delivery_country_code: 'SE',
delivery_method: 'dbSchenkerBPA',
delivery_price: 0,
delivery_vat: 1.25,
customer_type: 'NULL',
payment_type: `'agreement'`,
attention: `''`,
currency: 'SEK',
exchange_rate: 1,
exchange_rate_eur: 'NULL',
invoice_id: 'NULL',
contract_customer_id: 551,
vat_number: 'NULL',
comment: 'NULL',
cancels_order_id: 'NULL',
cancelled_by_order_id: 'NULL',
orderlog_id: 'NULL',
reseller_store: 'NULL',
order_sum: 'NULL',
klarna_order_id: 'NULL',
pwinty_id: 'NULL',
email: 'asdf@asdfasdf.com',
phone: 'NULL',
delivery_email: 'NULL',
delivery_phone: 'NULL',
customer_firstname: 'lorem',
customer_lastname: 'ipsum',
customer_email: 'lorem@lkajdsflkjasdf.com',
customer_cellphone: '070-1234567',
billing_address_id: 123123,
delivery_address_id: 123123,
flyer_ids: 'NULL',
market: 'SE',
locale: 'sv_SE',
};
const inserts = [];
const N = 10;
for (const id of [...Array(N + 1).keys()].slice(1)) {
const fp = person();
const delivered = dateBetween(200101, 200301);
const lo = randomLocaleObject();
const key = Object.assign({}, keys, {
paid: io(),
confirmed: io(),
delivered: io(),
newsletter: io(),
credit_invoice: io(),
canceled: io(),
reminder: io(),
delivered_date: `'${new Date(delivered).toISOString()}'`,
country_code: lo.country,
language: lo.lang,
delivery_country_code: lo.country,
delivery_method: randomDeliveryMethod(),
currency: lo.currency,
exchange_rate: io(),
invoice_id: `'${id}'`,
email: `'${fp.contacts.email}'`,
customer_firstname: `'${fp.firstName}'`,
customer_lastname: `'${fp.lastName}'`,
customer_email: `'${fp.contacts.email}'`,
customer_cellphone: `'${fp.contacts.phone}'`,
billing_address_id: id,
delivery_address_id: id,
market: lo.country,
locale: lo.locale,
});
// UPDATE weather SET (temp_lo, temp_hi, prcp) = (temp_lo+1, temp_lo+15, DEFAULT) WHERE city = 'San Francisco' AND date = '2003-07-03';
const insertString = `UPDATE public.orders SET (paid, confirmed, delivered, newsletter, credit_invoice, canceled, reminder, delivered_date, country_code, language, delivery_country_code, delivery_method, delivery_price, delivery_vat, customer_type, payment_type, attention, currency, exchange_rate, exchange_rate_eur, invoice_id, contract_customer_id, vat_number, comment, cancels_order_id, cancelled_by_order_id, orderlog_id, reseller_store, order_sum, klarna_order_id, pwinty_id, email, phone, delivery_email, delivery_phone, customer_firstname, customer_lastname, customer_email, customer_cellphone, billing_address_id, delivery_address_id, flyer_ids, market, locale) = (${Object.values(
key,
).join(', ')}) WHERE id=${id};`;
inserts.push(insertString);
}
saveFromTemplate(
'templates/orders.sql',
'../db/data/orders.sql',
'{x}',
inserts.join('\n'),
);
-219
View File
@@ -1,219 +0,0 @@
{
"name": "db_generator",
"version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "db_generator",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"fake-people": "^1.0.0",
"lodash": "^4.17.21",
"lorem-ipsum": "^2.0.3",
"random-date-generator": "^1.0.2"
},
"devDependencies": {
"chalk": "^4.1.1"
}
},
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/chalk": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
"node_modules/fake-people": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fake-people/-/fake-people-1.0.0.tgz",
"integrity": "sha1-PRdr4BufkwBwceu0gWIuxebN2BM=",
"dependencies": {
"faker": "^3.1.0"
},
"engines": {
"node": "^6.1.0"
}
},
"node_modules/faker": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/faker/-/faker-3.1.0.tgz",
"integrity": "sha1-D5CPr05uwCUk5UpX5DLFwBPgjJ8="
},
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"node_modules/lorem-ipsum": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/lorem-ipsum/-/lorem-ipsum-2.0.3.tgz",
"integrity": "sha512-CX2r84DMWjW/DWiuzicTI9aRaJPAw2cvAGMJYZh/nx12OkTGqloj8y8FU0S8ZkKwOdqhfxEA6Ly8CW2P6Yxjwg==",
"dependencies": {
"commander": "^2.17.1"
},
"bin": {
"lorem-ipsum": "dist/bin/lorem-ipsum.bin.js"
},
"engines": {
"node": ">= 8.x",
"npm": ">= 5.x"
}
},
"node_modules/random-date-generator": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/random-date-generator/-/random-date-generator-1.0.2.tgz",
"integrity": "sha1-xjZmW7/tCM7J4iBT1J8jPI/YTdE="
},
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
}
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
"fake-people": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fake-people/-/fake-people-1.0.0.tgz",
"integrity": "sha1-PRdr4BufkwBwceu0gWIuxebN2BM=",
"requires": {
"faker": "^3.1.0"
}
},
"faker": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/faker/-/faker-3.1.0.tgz",
"integrity": "sha1-D5CPr05uwCUk5UpX5DLFwBPgjJ8="
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"lorem-ipsum": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/lorem-ipsum/-/lorem-ipsum-2.0.3.tgz",
"integrity": "sha512-CX2r84DMWjW/DWiuzicTI9aRaJPAw2cvAGMJYZh/nx12OkTGqloj8y8FU0S8ZkKwOdqhfxEA6Ly8CW2P6Yxjwg==",
"requires": {
"commander": "^2.17.1"
}
},
"random-date-generator": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/random-date-generator/-/random-date-generator-1.0.2.tgz",
"integrity": "sha1-xjZmW7/tCM7J4iBT1J8jPI/YTdE="
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
}
-21
View File
@@ -1,21 +0,0 @@
{
"name": "db_generator",
"version": "1.0.0",
"type": "module",
"description": "Generate sql files inserted in the test DB",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"fake-people": "^1.0.0",
"lodash": "^4.17.21",
"lorem-ipsum": "^2.0.3",
"random-date-generator": "^1.0.2"
},
"devDependencies": {
"chalk": "^4.1.1"
}
}
@@ -1,49 +0,0 @@
import _ from 'lodash';
import {
saveFromTemplate,
randomLocaleObject,
dateBetween,
person,
lorem,
} from './common.js';
const keys = {
productid: 'DEFAULT',
path: '',
visible: 1,
browsable: 1,
designerid: 1,
inserted: 'DEFAULT',
updated: 'NULL',
ref1: 'NULL',
ref2: 'NULL',
ref3: 'NULL',
};
const inserts = [];
const N = 10;
for (const id of [...Array(N + 1).keys()].slice(1)) {
const fp = person();
const inserted = dateBetween(200101, 200301);
const key = Object.assign({}, keys, {
path: `'${_.kebabCase(lorem.generateWords(2))}'`,
designerid: _.random(1, 5),
inserted: `'${new Date(inserted).toISOString()}'`,
ref1: `'${fp.firstName} ${fp.lastName}'`,
});
const insertString = `INSERT INTO public."product-products" (productid, path, visible, browsable, designerid, inserted, updated, ref1, ref2, ref3) VALUES (${Object.values(
key,
).join(', ')});`;
inserts.push(insertString);
}
saveFromTemplate(
'templates/product-products.sql',
'../db/data/product-products.sql',
'{x}',
inserts.join('\n'),
);
@@ -1,28 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: addresses; Type: TABLE DATA; Schema: public; Owner: postgres
--
{x}
--
-- PostgreSQL database dump complete
--
@@ -1,29 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: designer_texts; Type: TABLE DATA; Schema: public; Owner: postgres
--
{x}
--
-- PostgreSQL database dump complete
--
@@ -1,28 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: designers-blocked; Type: TABLE DATA; Schema: public; Owner: postgres
--
{x}
--
-- PostgreSQL database dump complete
--
@@ -1,28 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: designers; Type: TABLE DATA; Schema: public; Owner: postgres
--
{x}
--
-- PostgreSQL database dump complete
--
@@ -1,28 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: invoices; Type: TABLE DATA; Schema: public; Owner: postgres
--
{x}
--
-- PostgreSQL database dump complete
--
@@ -1,28 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: orders; Type: TABLE DATA; Schema: public; Owner: postgres
--
{x}
--
-- PostgreSQL database dump complete
--
@@ -1,34 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 10.14
-- Dumped by pg_dump version 10.14
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: product-products; Type: TABLE DATA; Schema: public; Owner: postgres
--
{x}
--
-- Name: product-products_productid_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres
--
SELECT pg_catalog.setval('public."product-products_productid_seq"', 76042, true);
--
-- PostgreSQL database dump complete
--
-3
View File
@@ -1,3 +0,0 @@
export const sleep = (ms) => {
return new Promise((resolve) => setTimeout(resolve, ms));
};
-100
View File
@@ -1,100 +0,0 @@
import { checkAccess } from '../cognito/access-control';
import {
AccessTokenClaim,
ClaimVerifyResult,
IdTokenClaim,
} from '../cognito/cognito-client';
const idTokenAuth = {
userName: 'niklas.fondberg@photowall.se',
isValid: true,
idToken: {
'custom:adgroups':
'[Domain Users, Images_Write, VPN_Users, WebAdmin, WebAdminSuperUser]',
'cognito:username': 'photowalladfs_photowall\\niklas.fondberg',
token_use: 'id',
email_verified: false,
nonce: 'Qc9kHCXrN----4st19sM',
at_hash: '9x_RMAO3_2NW1cQYkhWEtg',
email: 'niklas.fondberg@photowall.se',
aud: '53og32ofjne7e6i4uf10r3bg2b',
sub: '2646dd8b-f914-40eb-895b-c652976a65e1',
identities: [null],
} as IdTokenClaim,
accessToken: null,
} as ClaimVerifyResult;
const accessTokenAuth = {
isValid: true,
idToken: null,
accessToken: {
token_use: 'access',
username: '',
scope:
'https://graphql.photowall.com/orders.write https://graphql.photowall.com/orders.read',
client_id: '5vftcl43n2jkcdvd9imc270mtu',
} as AccessTokenClaim,
} as ClaimVerifyResult;
describe('GraphQL Apollo unit tests', () => {
describe('Test auth', () => {
it('user test is accepted', () => {
const auth: ClaimVerifyResult = {
userName: 'testuser',
idToken: null,
accessToken: null,
isValid: true,
};
expect(() => checkAccess(['orders.read'], auth)).not.toThrow();
});
});
describe('Test auth not ok for test', () => {
it('user bla is accepted', () => {
const auth: ClaimVerifyResult = {
userName: 'bla',
idToken: null,
accessToken: null,
isValid: true,
};
expect(() => checkAccess(['orders.read'], auth)).toThrow();
});
});
describe('Test access auth', () => {
it('user test is accepted', () => {
const auth = accessTokenAuth;
expect(() =>
checkAccess(['orders.read', 'orders.write'], auth),
).not.toThrow();
});
});
describe('Test access auth not enough scope', () => {
it('user test is accepted', () => {
const auth = accessTokenAuth;
expect(() =>
checkAccess(['products.read', 'orders.read'], auth),
).toThrow();
});
});
describe('Test id auth', () => {
it('user test is accepted', () => {
const auth = idTokenAuth;
expect(() =>
checkAccess(['orders.read', 'orders.write'], auth),
).not.toThrow();
});
});
describe('Test id auth no enough', () => {
it('user test is accepted', () => {
const auth = JSON.parse(JSON.stringify(idTokenAuth)) as ClaimVerifyResult;
auth.idToken['custom:adgroups'] = '[]';
expect(() =>
checkAccess(['orders.read', 'orders.write'], auth),
).toThrow();
});
});
});
+86 -19
View File
@@ -1,35 +1,102 @@
import { AuthenticationError } from 'apollo-server';
import { GraphQLError } from 'graphql';
import { ClaimVerifyResult } from './cognito-client';
export const RESOURCE = 'https://graphql.photowall.com';
export enum SCOPES {
export enum Scopes {
ORDERS_READ = 'orders.read',
ORDERS_WRITE = 'orders.write',
DESIGNERS_READ = 'designers.read',
DESIGNERS_PUBLIC_READ = 'designers.public.read',
DESIGNERS_WRITE = 'designers.write',
PRODUCTS_READ = 'products.read',
PRODUCTS_PUBLIC_READ = 'products.public.read',
PRODUCTS_WRITE = 'products.write',
CATEGORIES_READ = 'categories.read',
CATEGORIES_WRITE = 'categories.write',
MARKETS_READ = 'markets.read',
KEYWORDS_READ = 'keywords.read',
KEYWORDS_WRITE = 'keywords.write',
LOCALES_READ = 'locales.read',
TEXTS_READ = 'texts.read',
INTERIORS_READ = 'interiors.read',
INTERIORS_WRITE = 'interiors.write',
}
export function checkAccess(scopes: string[], auth: ClaimVerifyResult): void {
if (auth.userName === 'testuser') {
return;
}
if (auth.idToken) {
if (auth.idToken['custom:adgroups'].includes('WebAdmin')) {
return;
}
}
if (auth.accessToken) {
const authScopes = auth.accessToken.scope.split(' ');
function getScopes(user: ClaimVerifyResult): Scopes[] | [] {
if (user.accessToken) {
const authScopes = user.accessToken.scope.split(' ');
const requiredScoped = scopes.map((s) => `${RESOURCE}/${s}`);
const checker = (arr: string[], target: string[]) =>
target.every((v) => arr.includes(v));
if (checker(authScopes, requiredScoped)) {
return;
return authScopes
.map((scopeStr) => {
if (scopeStr.indexOf(RESOURCE) === 0) {
return Scopes[
scopeStr
.replace(`${RESOURCE}/`, '')
.replaceAll('.', '_')
.toLocaleUpperCase()
];
}
return null;
})
.filter(Boolean);
}
return [];
}
function throwForbidden() {
throw new GraphQLError('You are not authorized to perform this action', {
extensions: { code: 'FORBIDDEN' },
});
}
export const ScopeAccess = (() => {
const validationObject = (scopes) => {
return {
scopes,
all(input: Scopes[]) {
if (input.length === 0) throwForbidden(); // GUARD
// If the input list contains something thats not in this.scopes array
// then when we concat the lists and remove duplicates the length will be larger
// in the new list than this.scopes.
const checkList = [...new Set(this.scopes.concat(input))];
if (checkList.length === this.scopes.length) return this;
throwForbidden();
},
some(input: Scopes[]) {
if (input.length === 0) throwForbidden(); // GUARD
for (const s of input) {
if (this.scopes.includes(s)) {
return this;
}
}
throw new AuthenticationError('Not authorized for this endpoint');
throwForbidden();
},
};
};
return {
validate(user) {
// If ifToken user then give full access.
// TODO: Should this be removed?
if (user.idToken) {
if (user.idToken['custom:adgroups'].includes('WebAdmin')) {
return validationObject(Object.values(Scopes));
}
}
// If development environment and Basic auth user
// push all scopes to give full access
if (
(process.env.NODE_ENV === 'development' ||
process.env.NODE_ENV === 'test') &&
user.userName === 'development_basic_user'
) {
return validationObject(Object.values(Scopes));
}
// AccessToken with scopes
return validationObject(getScopes(user));
},
};
})();
+145
View File
@@ -0,0 +1,145 @@
import { ScopeAccess, Scopes } from './access-control';
import {
AccessTokenClaim,
ClaimVerifyResult,
IdTokenClaim,
} from '../cognito/cognito-client';
const IdTokenAuth = {
userName: 'niklas.fondberg@photowall.se',
isValid: true,
idToken: {
'custom:adgroups':
'[Domain Users, Images_Write, VPN_Users, WebAdmin, WebAdminSuperUser]',
'cognito:username': 'photowalladfs_photowall\\niklas.fondberg',
token_use: 'id',
email_verified: false,
nonce: 'Qc9kHCXrN----4st19sM',
at_hash: '9x_RMAO3_2NW1cQYkhWEtg',
email: 'niklas.fondberg@photowall.se',
aud: '53og32ofjne7e6i4uf10r3bg2b',
sub: '2646dd8b-f914-40eb-895b-c652976a65e1',
identities: [null],
} as IdTokenClaim,
accessToken: null,
} as ClaimVerifyResult;
const BearerTokenAuthUser = {
isValid: true,
idToken: null,
accessToken: {
token_use: 'access',
username: '',
scope:
'https://graphql.photowall.com/orders.write https://graphql.photowall.com/orders.read',
client_id: '5vftcl43n2jkcdvd9imc270mtu',
} as AccessTokenClaim,
} as ClaimVerifyResult;
const BasicAuthAndTestUser: ClaimVerifyResult = {
userName: 'development_basic_user',
idToken: null,
accessToken: null,
isValid: true,
};
describe('Authentication and Scope access', () => {
describe('ScopeAccess', () => {
it('should give full access when dev and test user', () => {
expect(() =>
ScopeAccess.validate(BasicAuthAndTestUser).all([Scopes.PRODUCTS_READ]),
).not.toThrow();
expect(() =>
ScopeAccess.validate(BasicAuthAndTestUser).all([
Scopes.PRODUCTS_READ,
Scopes.PRODUCTS_READ,
Scopes.PRODUCTS_READ,
]),
).not.toThrow();
});
it('should give full access when idToken admin user', () => {
expect(() =>
ScopeAccess.validate(IdTokenAuth).all([
Scopes.ORDERS_WRITE,
Scopes.PRODUCTS_WRITE,
Scopes.KEYWORDS_WRITE,
]),
).not.toThrow();
});
it('should not throw when scopes and correct on accessToken', () => {
// Both ORDERS_READ and ORDER_WRITE must be present
expect(() =>
ScopeAccess.validate(BearerTokenAuthUser).all([
Scopes.ORDERS_WRITE,
Scopes.ORDERS_READ,
]),
).not.toThrow();
// Either ORDERS_READ or PRODUCTS_READ can be present
expect(() =>
ScopeAccess.validate(BearerTokenAuthUser).some([
Scopes.ORDERS_READ,
Scopes.PRODUCTS_READ,
]),
).not.toThrow();
expect(() =>
ScopeAccess.validate(BearerTokenAuthUser)
.all([Scopes.ORDERS_READ, Scopes.ORDERS_WRITE])
.some([Scopes.ORDERS_READ, Scopes.KEYWORDS_READ]),
).not.toThrow();
expect(() =>
ScopeAccess.validate(BearerTokenAuthUser).all([Scopes.ORDERS_READ]),
).not.toThrow();
expect(() =>
ScopeAccess.validate(BearerTokenAuthUser).all([
Scopes.ORDERS_READ,
Scopes.ORDERS_READ,
Scopes.ORDERS_WRITE,
Scopes.ORDERS_WRITE,
]),
).not.toThrow();
});
it('should throw when scopes and incorrect depending on whats on accessToken', () => {
expect(() =>
ScopeAccess.validate(BearerTokenAuthUser).all([
Scopes.ORDERS_READ,
Scopes.PRODUCTS_READ,
]),
).toThrow();
expect(() =>
ScopeAccess.validate(BearerTokenAuthUser).all([
Scopes.PRODUCTS_READ,
Scopes.CATEGORIES_READ,
]),
).toThrow();
expect(() =>
ScopeAccess.validate(BearerTokenAuthUser).some([
Scopes.PRODUCTS_READ,
Scopes.KEYWORDS_READ,
]),
).toThrow();
expect(() =>
ScopeAccess.validate(BearerTokenAuthUser)
.some([Scopes.KEYWORDS_READ, Scopes.ORDERS_READ])
.all([Scopes.MARKETS_READ]),
).toThrow();
});
it('should throw when input is empty', () => {
expect(() => ScopeAccess.validate(BearerTokenAuthUser).all([])).toThrow();
expect(() =>
ScopeAccess.validate(BearerTokenAuthUser).some([]),
).toThrow();
});
});
});
+61 -7
View File
@@ -1,7 +1,11 @@
import { ApolloServerErrorCode } from '@apollo/server/errors';
import { promisify } from 'util';
import * as Axios from 'axios';
import * as jsonwebtoken from 'jsonwebtoken';
import { Maybe } from '../types/types';
import { GraphQLError } from 'graphql';
import { IncomingMessage } from 'http';
const jwkToPem = require('jwk-to-pem');
export interface ClaimVerifyRequest {
@@ -81,7 +85,9 @@ interface Identity {
const cognitoPoolId = process.env.COGNITO_POOL_ID || '';
if (!cognitoPoolId) {
throw new Error('env var required for cognito pool');
throw new GraphQLError('env var required for cognito pool', {
extensions: { code: 'FORBIDDEN' },
});
}
const cognitoIssuer = `https://cognito-idp.eu-west-1.amazonaws.com/${cognitoPoolId}`;
@@ -110,26 +116,36 @@ const verifyToken = async (
const token = request.token;
const tokenSections = (token || '').split('.');
if (tokenSections.length < 2) {
throw new Error('requested token is invalid');
throw new GraphQLError('requested token is invalid', {
extensions: { code: ApolloServerErrorCode.INTERNAL_SERVER_ERROR },
});
}
const headerJSON = Buffer.from(tokenSections[0], 'base64').toString('utf8');
const header = JSON.parse(headerJSON) as TokenHeader;
const keys = await getPublicKeys();
const key = keys[header.kid];
if (key === undefined) {
throw new Error('claim made for unknown kid');
throw new GraphQLError('claim made for unknown kid', {
extensions: { code: ApolloServerErrorCode.INTERNAL_SERVER_ERROR },
});
}
const claim = (await verifyPromised(token, key.pem)) as Claim;
const currentSeconds = Math.floor(new Date().valueOf() / 1000);
if (currentSeconds > claim.exp || currentSeconds < claim.auth_time) {
throw new Error('claim is expired or invalid');
throw new GraphQLError('claim is expired or invalid', {
extensions: { code: ApolloServerErrorCode.INTERNAL_SERVER_ERROR },
});
}
if (claim.iss !== cognitoIssuer) {
throw new Error('claim issuer is invalid');
throw new GraphQLError('claim issuer is invalid', {
extensions: { code: ApolloServerErrorCode.INTERNAL_SERVER_ERROR },
});
}
if (claim.token_use !== 'access' && claim.token_use !== 'id') {
throw new Error('invalid token type');
throw new GraphQLError('invalid token type', {
extensions: { code: ApolloServerErrorCode.INTERNAL_SERVER_ERROR },
});
}
if (claim.token_use === 'access') {
// Access token, check for scopes
@@ -162,4 +178,42 @@ const verifyToken = async (
}
};
export { verifyToken };
const verifyAuthentication = async (req: IncomingMessage) => {
const notAuthorizedError = () => {
throw new GraphQLError('You are not authorized', {
extensions: { code: 'FORBIDDEN' },
});
};
// Normal login with BearerToken
// This can either happen when using the /login
// endpoint or when logged into admin.
const token = req.headers.authorization || '';
if (token.startsWith('Bearer ')) {
const bearerToken = token.substring(7, token.length);
const res = await verifyToken({ token: bearerToken });
if (res.isValid) {
return res;
} else {
notAuthorizedError();
}
}
// When development its possible to use
// Base auth with username and password.
if (
process.env.NODE_ENV === 'development' &&
token == 'Basic ZGV2OnB2N1VmYSFiZVAzeGk='
) {
return {
userName: 'development_basic_user',
isValid: true,
accessToken: null,
idToken: null,
};
} else {
notAuthorizedError();
}
};
export { verifyToken, verifyAuthentication };
+4 -2
View File
@@ -2,8 +2,10 @@ export const dbConfig = {
client: 'pg',
connection: process.env.DATABASE_URL,
pool: {
min: 1,
max: 10,
min: 0,
max: 30,
destroyTimeoutMillis: 150,
idleTimeoutMillis: 100,
},
stringcase: [
'snakecase',
+103
View File
@@ -0,0 +1,103 @@
import { ApolloServer } from '@apollo/server';
import knexStringcase from 'knex-stringcase';
import {
ClaimVerifyResult,
verifyAuthentication,
} from './cognito/cognito-client';
import { dbConfig } from './config';
import { CategoryAPI } from './datasources/category-api';
import { DesignerAPI } from './datasources/designer-api';
import { ImageServerApi } from './datasources/imageserver-api';
import { InteriorAPI } from './datasources/interior-api';
import { InteriorsLambdaAPI } from './datasources/interiors-lambda-api';
import { KeywordAPI } from './datasources/keyword-api';
import { MarketLocaleAPI } from './datasources/market-locale-api';
import { OrderAPI } from './datasources/order-api';
import { PrintProductDefaultsAPI } from './datasources/printproduct-defaults-api';
import { ProductAPI } from './datasources/product-api';
import { TextsAPI } from './datasources/texts-api';
import { IncomingMessage } from 'http';
import { DataSourceOptions, IAuthObject } from './types/types';
const knexConfig = knexStringcase(dbConfig);
export class ContextValue {
public req: IncomingMessage;
public server: ApolloServer<ContextValue>;
public user: IAuthObject | ClaimVerifyResult;
public dataSources: {
marketLocaleApi: MarketLocaleAPI;
textsApi: TextsAPI;
categoryApi: CategoryAPI;
designerApi: DesignerAPI;
imageServerApi: ImageServerApi;
interiorsLambdaApi: InteriorsLambdaAPI;
interiorApi: InteriorAPI;
printProductDefaultsApi: PrintProductDefaultsAPI;
keywordApi: KeywordAPI;
orderApi: OrderAPI;
productApi: ProductAPI;
};
constructor({
req,
server,
}: {
req: IncomingMessage;
server: ApolloServer<ContextValue>;
}) {
this.req = req;
this.server = server;
}
async process() {
const { cache } = this.server;
// -------------------------------
// Authentication
// -------------------------------
this.user = await verifyAuthentication(this.req);
// -------------------------------
// DataSources
// -------------------------------
const options: DataSourceOptions = { cache, user: this.user };
const marketLocaleApi = new MarketLocaleAPI(options, knexConfig);
const textsApi = new TextsAPI(options, knexConfig, marketLocaleApi);
const categoryApi = new CategoryAPI(options, knexConfig);
const designerApi = new DesignerAPI(options, knexConfig);
const imageServerApi = new ImageServerApi(options);
const interiorsLambdaApi = new InteriorsLambdaAPI(options);
const interiorApi = new InteriorAPI(options, knexConfig, imageServerApi);
const printProductDefaultsApi = new PrintProductDefaultsAPI(
options,
knexConfig,
);
const keywordApi = new KeywordAPI(options, knexConfig, textsApi);
const orderApi = new OrderAPI(options, knexConfig);
const productApi = new ProductAPI(
options,
knexConfig,
textsApi,
printProductDefaultsApi,
);
this.dataSources = {
productApi,
marketLocaleApi,
textsApi,
categoryApi,
designerApi,
imageServerApi,
interiorsLambdaApi,
interiorApi,
printProductDefaultsApi,
keywordApi,
orderApi,
};
return this;
}
}
+11 -13
View File
@@ -1,15 +1,14 @@
import { SQLDataSource } from 'datasource-sql';
const { InMemoryLRUCache } = require('apollo-server-caching');
import crypto from 'crypto';
const MINUTE = 60;
import { InMemoryLRUCache } from '@apollo/utils.keyvaluecache';
import { DataSourceOptions, User } from '../types/types';
export class RawBuilder {
_cache: any;
query: any;
constructor(knex, cache, query) {
constructor(knex, cache, query, bindings) {
this._cache = cache;
this.query = knex.raw(query);
this.query = bindings ? knex.raw(query, bindings) : knex.raw(query);
}
async cache(ttl: number) {
@@ -36,16 +35,15 @@ export class RawBuilder {
export class BaseSQLDataSource extends SQLDataSource {
cache: any;
constructor(config) {
user: User;
constructor(options: DataSourceOptions, config) {
super(config);
this.cache = config.cache || new InMemoryLRUCache();
this.cache = options.cache || new InMemoryLRUCache();
this.user = options.user;
this.initialize({ cache: options.cache, context: null });
}
getSQLDate(date: Date): string {
return date.toISOString().split('T')[0];
}
cachedRaw(query: string): RawBuilder {
return new RawBuilder(this.knex, this.cache, query);
cachedRaw(query: string, bindings: any[] = null): RawBuilder {
return new RawBuilder(this.knex, this.cache, query, bindings);
}
}
+12 -9
View File
@@ -1,14 +1,16 @@
import { ScopeAccess, Scopes } from '../cognito/access-control';
import { Category } from '../types/category-types';
import { DataSourceOptions } from '../types/types';
import { BaseSQLDataSource } from './BaseSQLDataSource';
const MINUTE = 60;
import { MINUTE } from './utils';
export class CategoryAPI extends BaseSQLDataSource {
constructor(config) {
super(config);
constructor(options: DataSourceOptions, config) {
super(options, config);
}
async getProductCategories(productId: number): Promise<Array<Category>> {
ScopeAccess.validate(this.user).all([Scopes.CATEGORIES_READ]);
const query = /* sql */ `
SELECT product_category.category_id as id,
categories.*
@@ -29,11 +31,13 @@ WHERE product_category.product_id = ?
}
async getCategories(): Promise<Array<Category>> {
ScopeAccess.validate(this.user).all([Scopes.CATEGORIES_READ]);
// @ts-ignore
return this.knex.select('*').from('v_categorytree').cache(MINUTE);
}
async searchCategories(name: string): Promise<Array<Category>> {
ScopeAccess.validate(this.user).all([Scopes.CATEGORIES_READ]);
return this.knex
.select('*')
.from('v_categorytree')
@@ -41,6 +45,7 @@ WHERE product_category.product_id = ?
}
async getCategoryById(id: number): Promise<Category> {
ScopeAccess.validate(this.user).all([Scopes.CATEGORIES_READ]);
return (
this.knex
.select('*')
@@ -53,12 +58,10 @@ WHERE product_category.product_id = ?
}
async getLocaleNameForId(id: number): Promise<JSON> {
ScopeAccess.validate(this.user).all([Scopes.LOCALES_READ]);
const res = await this.cachedRaw(
`
SELECT json_object_agg(ec.locale, ec.name) as locale_names
FROM v_esales_categorytree_i18n ec
WHERE ec.id = ${id}
`,
'SELECT json_object_agg(ec.locale, ec.name) as locale_names FROM v_esales_categorytree_i18n ec WHERE ec.id = ?',
[id],
)
.cache(MINUTE * 5)
.then((data) => data.rows);
+8 -4
View File
@@ -1,14 +1,16 @@
import { BaseSQLDataSource } from './BaseSQLDataSource';
import { Designer } from '../types/designer-types';
import { Maybe } from '../types/types';
import { DataSourceOptions, Maybe } from '../types/types';
import { MINUTE } from './utils';
import { ScopeAccess, Scopes } from '../cognito/access-control';
const MINUTE = 60;
export class DesignerAPI extends BaseSQLDataSource {
constructor(config) {
super(config);
constructor(options: DataSourceOptions, config) {
super(options, config);
}
async getDesignerById(id: number): Promise<Designer> {
ScopeAccess.validate(this.user).all([Scopes.DESIGNERS_READ]);
return (
this.knex
.select('*')
@@ -28,6 +30,7 @@ export class DesignerAPI extends BaseSQLDataSource {
}
async searchDesigners(name: string): Promise<Array<Designer>> {
ScopeAccess.validate(this.user).all([Scopes.DESIGNERS_READ]);
return this.knex
.select('*')
.from('designers')
@@ -44,6 +47,7 @@ export class DesignerAPI extends BaseSQLDataSource {
}
async getDesigners(limit: Maybe<number>): Promise<Array<Designer>> {
ScopeAccess.validate(this.user).all([Scopes.DESIGNERS_READ]);
limit = limit ?? 5000;
return (
this.knex
+19 -10
View File
@@ -1,19 +1,28 @@
import { RESTDataSource } from 'apollo-datasource-rest';
import { RESTDataSource } from '@apollo/datasource-rest';
import { CacheOptions } from '@apollo/datasource-rest/dist/RESTDataSource';
import { FetcherResponse, FetcherRequestInit } from '@apollo/utils.fetcher';
import { DataSourceOptions } from '../types/types';
export class ImageServerApi extends RESTDataSource {
constructor() {
super();
this.baseURL =
override baseURL =
process.env.ENVIRONMENT_NAME === 'production'
? 'http://images.photowall.com'
: 'http://images-dev.photowall.com';
? 'https://images.photowall.com'
: 'https://images-dev.photowall.com';
constructor(options: DataSourceOptions) {
super(options);
}
protected override cacheOptionsFor(
url: string,
response: FetcherResponse,
request: FetcherRequestInit,
): CacheOptions {
return { ttl: 5 } as CacheOptions;
}
async getInteriorsForProduct(
productId: number,
): Promise<Array<{ uri: string }>> {
return this.get(`/rooms/${productId}/?ts=${Date.now()}`, null, {
cacheOptions: { ttl: 5 },
});
return this.get(`/rooms/${productId}/?ts=${Date.now()}`);
}
}
+45 -10
View File
@@ -1,24 +1,35 @@
import { ApolloServerErrorCode } from '@apollo/server/errors';
import {
Interior,
InteriorsFilter,
InteriorType,
} from '../types/interior-types';
import { Orientation } from '../types/product-types';
import { IdNumberResult, Maybe } from '../types/types';
import { BaseSQLDataSource } from './BaseSQLDataSource';
import { DataSourceOptions, IdNumberResult, Maybe } from '../types/types';
import { ImageServerApi } from './imageserver-api';
import * as CONFIG from '../config';
import { moveS3File } from '../aws/s3';
const MINUTE = 60;
import { BaseSQLDataSource } from './BaseSQLDataSource';
import { GraphQLError } from 'graphql';
import { ScopeAccess, Scopes } from '../cognito/access-control';
export class InteriorAPI extends BaseSQLDataSource {
imageServerApi: ImageServerApi;
constructor(config, imageServerApi: ImageServerApi) {
super(config);
constructor(
options: DataSourceOptions,
config,
imageServerApi: ImageServerApi,
) {
super(options, config);
this.imageServerApi = imageServerApi;
}
// -------------------------------
// INTERNAL
// Functions used inside this class
// -------------------------------
getInteriorType(roomTypePart: string): string {
switch (roomTypePart) {
case 'wallpaper':
@@ -30,7 +41,9 @@ export class InteriorAPI extends BaseSQLDataSource {
case 'framed-print':
return InteriorType[InteriorType.FRAMED_PRINT];
default:
throw new Error(`Unknown room type: ${roomTypePart}`);
throw new GraphQLError(`Unknown room type: ${roomTypePart}`, {
extensions: { code: ApolloServerErrorCode.BAD_USER_INPUT },
});
}
}
@@ -43,7 +56,12 @@ export class InteriorAPI extends BaseSQLDataSource {
case 'square':
return Orientation[Orientation.SQUARE];
default:
throw new Error(`Unknown room orientation: ${roomOrientationPart}`);
throw new GraphQLError(
`Unknown room orientation: ${roomOrientationPart}`,
{
extensions: { code: ApolloServerErrorCode.BAD_USER_INPUT },
},
);
}
}
@@ -61,13 +79,19 @@ export class InteriorAPI extends BaseSQLDataSource {
return row;
}
// ----------------------------
// PUBLIC
// Functions used in resolvers or other datasources
// ----------------------------
async getInteriors(filter: Maybe<InteriorsFilter>): Promise<Array<Interior>> {
ScopeAccess.validate(this.user).all([Scopes.INTERIORS_READ]);
const sql = /* sql */ `
SELECT rooms.*, room_types.name roomType FROM rooms
LEFT JOIN room_types ON rooms.room_type_id = room_types.id
`;
const allInteriors = await this.cachedRaw(sql)
const allInteriors = await this.cachedRaw(sql, null)
.cache(60)
.then((data) =>
data.rows.map((row) => {
@@ -113,6 +137,10 @@ export class InteriorAPI extends BaseSQLDataSource {
}
async getPrintProductInteriors(printId: number): Promise<Array<Interior>> {
ScopeAccess.validate(this.user).all([
Scopes.INTERIORS_READ,
Scopes.PRODUCTS_READ,
]);
return this.knex
.select('*')
.from('v_interior_image_urls')
@@ -130,11 +158,18 @@ export class InteriorAPI extends BaseSQLDataSource {
});
}
// Mutations
// ---------------------------------------------------------
// MUTATIONS
// ---------------------------------------------------------
async addOwnUploadToPrintId(
printId: number,
uploadedS3Key: string,
): Promise<IdNumberResult> {
ScopeAccess.validate(this.user).all([
Scopes.INTERIORS_WRITE,
Scopes.PRODUCTS_WRITE,
]);
// Get the last position entered in interiors for this printId
const positionRes: any = await this.knex
.queryBuilder()
+11 -5
View File
@@ -1,10 +1,14 @@
import { RESTDataSource } from 'apollo-datasource-rest';
import { RESTDataSource } from '@apollo/datasource-rest';
import { ScopeAccess, Scopes } from '../cognito/access-control';
import { Product, ProductGroup } from '../types/product-types';
import { DataSourceOptions, User } from '../types/types';
export class InteriorsLambdaAPI extends RESTDataSource {
constructor() {
super();
this.baseURL = process.env.INTERIORS_URL;
override baseURL = process.env.INTERIORS_URL;
user: User;
constructor(options: DataSourceOptions) {
super(options);
this.user = options.user;
}
/**
@@ -17,6 +21,8 @@ export class InteriorsLambdaAPI extends RESTDataSource {
* </code>
*/
async generateNewInteriors(product: Product): Promise<any> {
ScopeAccess.validate(this.user).all([Scopes.INTERIORS_WRITE]);
const found = product.printProducts.find(
(pr) => pr.groupId === ProductGroup.WALLPAPER,
);
@@ -36,6 +42,6 @@ export class InteriorsLambdaAPI extends RESTDataSource {
body['print_file_height'] = product.fields.printFileHeight;
body['print_file_dpi'] = product.fields.printFileDpi;
}
return this.post('/batch', body);
return this.post('/batch', { body: body });
}
}
+30 -4
View File
@@ -1,16 +1,25 @@
import { SQLDataSource } from 'datasource-sql';
import { ScopeAccess, Scopes } from '../cognito/access-control';
import { Keyword, KeywordType } from '../types/keyword-types';
import { DataSourceOptions, User } from '../types/types';
import { TextsAPI } from './texts-api';
const MINUTE = 60;
import { MINUTE } from './utils';
export class KeywordAPI extends SQLDataSource {
textsApi: TextsAPI;
constructor(config, textsApi) {
user: User;
constructor(options: DataSourceOptions, config, textsApi) {
super(config);
this.user = options.user;
this.initialize({ cache: options.cache, context: null });
this.textsApi = textsApi;
}
// -------------------------------
// INTERNAL
// Functions used inside this class
// -------------------------------
getType(data: any) {
// raw queries doesn't camelCase...
const typeObject = data.type_id ?? data.typeId;
@@ -22,7 +31,13 @@ export class KeywordAPI extends SQLDataSource {
};
}
// ----------------------------
// PUBLIC
// Functions used in resolvers or other datasources
// ----------------------------
async getProductKeywords(productId: number): Promise<Array<Keyword>> {
ScopeAccess.validate(this.user).all([Scopes.KEYWORDS_READ]);
const query = /* sql */ `
SELECT keywords.*, keyword_type.type_id FROM keywords
LEFT JOIN keyword_type ON keyword_type.keyword_id = keywords.id
@@ -37,6 +52,7 @@ ORDER BY keywords.value
}
async getKeywords(): Promise<Array<Keyword>> {
ScopeAccess.validate(this.user).all([Scopes.KEYWORDS_READ]);
const query = /* sql */ `
SELECT keywords.*, keyword_type.type_id FROM keywords
LEFT JOIN keyword_type ON keyword_type.keyword_id = keywords.id
@@ -48,6 +64,7 @@ ORDER BY keywords.value
}
async getKeywordById(id: number): Promise<Keyword> {
ScopeAccess.validate(this.user).all([Scopes.KEYWORDS_READ]);
return (
this.knex
.select('*')
@@ -62,6 +79,7 @@ ORDER BY keywords.value
}
async searchKeywords(name: string): Promise<Array<Keyword>> {
ScopeAccess.validate(this.user).all([Scopes.KEYWORDS_READ]);
return this.knex
.select('*')
.from('keywords')
@@ -69,10 +87,18 @@ ORDER BY keywords.value
.whereRaw(`LOWER(value) LIKE ?`, [`${name}`]);
}
// ---------------------------------------------------------
// MUTATIONS
// ---------------------------------------------------------
async setProductKeywords(
productId: number,
keywordIds: Array<number>,
): Promise<any> {
ScopeAccess.validate(this.user).all([
Scopes.KEYWORDS_WRITE,
Scopes.PRODUCTS_WRITE,
]);
await this.knex('product_keyword').where('product_id', productId).del();
const fieldsToInsert = keywordIds.map((keywordId) => ({
@@ -83,8 +109,8 @@ ORDER BY keywords.value
return this.knex('product_keyword').insert(fieldsToInsert);
}
// Mutations
async addKeyword(name: string, type: KeywordType): Promise<number> {
ScopeAccess.validate(this.user).all([Scopes.KEYWORDS_WRITE]);
const res = await this.knex('keywords')
.insert({ value: name })
.returning('id');
+23 -3
View File
@@ -1,15 +1,28 @@
import { SQLDataSource } from 'datasource-sql';
import { ScopeAccess, Scopes } from '../cognito/access-control';
import { Market, Locale } from '../types/market-locale-types';
const MINUTE = 60;
import { DataSourceOptions, User } from '../types/types';
import { MINUTE } from './utils';
// TODO: perhaps rename to MarketLocale API and add market_locales and locales here.
export class MarketLocaleAPI extends SQLDataSource {
constructor(config) {
user: User;
constructor(options: DataSourceOptions, config) {
super(config);
this.user = options.user;
this.initialize({ cache: options.cache, context: null });
}
// ----------------------------
// PUBLIC
// Functions used in resolvers or other datasources
// ----------------------------
// MARKETS
async getMarketById(id: number): Promise<Market> {
ScopeAccess.validate(this.user).all([Scopes.MARKETS_READ]);
return (
this.knex
.select('*')
@@ -22,6 +35,7 @@ export class MarketLocaleAPI extends SQLDataSource {
}
async getMarketByName(name: string): Promise<Market> {
ScopeAccess.validate(this.user).all([Scopes.MARKETS_READ]);
return (
this.knex
.select('*')
@@ -34,6 +48,7 @@ export class MarketLocaleAPI extends SQLDataSource {
}
async getMarkets(): Promise<Array<Market>> {
ScopeAccess.validate(this.user).all([Scopes.MARKETS_READ]);
return (
this.knex
.select('*')
@@ -43,7 +58,10 @@ export class MarketLocaleAPI extends SQLDataSource {
);
}
// LOCALES
async getLocaleById(id: number): Promise<Locale> {
ScopeAccess.validate(this.user).all([Scopes.LOCALES_READ]);
return (
this.knex
.select('*')
@@ -56,6 +74,7 @@ export class MarketLocaleAPI extends SQLDataSource {
}
async getLocaleByValue(value: string): Promise<Locale> {
ScopeAccess.validate(this.user).all([Scopes.LOCALES_READ]);
return (
this.knex
.select('*')
@@ -68,6 +87,7 @@ export class MarketLocaleAPI extends SQLDataSource {
}
async getLocales(): Promise<Array<Locale>> {
ScopeAccess.validate(this.user).all([Scopes.LOCALES_READ]);
return (
this.knex
.select('*')
+55 -31
View File
@@ -1,14 +1,54 @@
import { BaseSQLDataSource } from './BaseSQLDataSource';
import { Address, Order, OrderRow } from '../types/order-types';
import { GeneralInput, Maybe } from '../types/types';
import { DataSourceOptions, GeneralInput, Maybe } from '../types/types';
import { MINUTE } from './utils';
import { ScopeAccess, Scopes } from '../cognito/access-control';
const MINUTE = 60;
export class OrderAPI extends BaseSQLDataSource {
constructor(config) {
super(config);
constructor(options: DataSourceOptions, config) {
super(options, config);
}
// -------------------------------
// INTERNAL
// Functions used inside this class
// -------------------------------
private getOrdersQuery(input: GeneralInput) {
ScopeAccess.validate(this.user).all([Scopes.ORDERS_READ]);
let query = this.knex.table('orders');
if (input?.filter?.dates?.from) {
query = query.where('inserted', '>=', input.filter.dates.from);
}
if (input?.filter?.dates?.to) {
query = query.where('inserted', '<=', input.filter.dates.to);
}
return query;
}
private createOrderRows(rows: Array<any>): Array<OrderRow> {
return rows.map((row) => {
return {
...row,
data: {
...row.data,
pwintySku: row.data.pwinty_sku ?? null,
pwintyImageId: row.data.pwinty_image_id ?? null,
frameColor: row.data.frame_color ?? null,
},
};
});
}
// ----------------------------
// PUBLIC
// Functions used in resolvers or other datasources
// ----------------------------
async getAddress(addressId: number): Promise<Maybe<Address>> {
ScopeAccess.validate(this.user).all([Scopes.ORDERS_READ]);
const row = await this.knex
.select('*')
.from('addresses')
@@ -31,6 +71,7 @@ export class OrderAPI extends BaseSQLDataSource {
}
async getOrdersTotal(input: GeneralInput): Promise<number> {
ScopeAccess.validate(this.user).all([Scopes.ORDERS_READ]);
const res = await this.getOrdersQuery(input)
.clone()
.count()
@@ -41,6 +82,7 @@ export class OrderAPI extends BaseSQLDataSource {
}
async getOrders(input: GeneralInput): Promise<Array<Order>> {
ScopeAccess.validate(this.user).all([Scopes.ORDERS_READ]);
const offset = input.pagination.offset ?? 0;
const limit = input.pagination.limit ?? 100;
let query = this.getOrdersQuery(input).limit(limit).offset(offset);
@@ -50,20 +92,8 @@ export class OrderAPI extends BaseSQLDataSource {
return query.cache(MINUTE);
}
private getOrdersQuery(input: GeneralInput) {
let query = this.knex.table('orders');
if (input?.filter?.dates?.from) {
query = query.where('inserted', '>=', input.filter.dates.from);
}
if (input?.filter?.dates?.to) {
query = query.where('inserted', '<=', input.filter.dates.to);
}
return query;
}
async getOrderById(id: number): Promise<Order> {
ScopeAccess.validate(this.user).all([Scopes.ORDERS_READ]);
return this.knex.select('*').from('orders').where('id', id).first();
}
@@ -71,6 +101,7 @@ export class OrderAPI extends BaseSQLDataSource {
klarnaOrderId: string,
paypalTransactionId: string,
): Promise<Order> {
ScopeAccess.validate(this.user).all([Scopes.ORDERS_READ]);
const column = paypalTransactionId
? 'paypal_transaction_id'
: 'klarna_order_id';
@@ -89,6 +120,7 @@ export class OrderAPI extends BaseSQLDataSource {
}
async getOrderRowsByOrderId(orderId: number): Promise<Array<OrderRow>> {
ScopeAccess.validate(this.user).all([Scopes.ORDERS_READ]);
return this.knex
.select('*')
.from('order_rows')
@@ -100,6 +132,11 @@ export class OrderAPI extends BaseSQLDataSource {
designerId: number,
input: Maybe<GeneralInput>,
): Promise<Array<OrderRow>> {
ScopeAccess.validate(this.user).all([Scopes.ORDERS_READ]);
const getSQLDate = (date: Date): string => {
return date.toISOString().split('T')[0];
};
const from = input?.filter?.dates?.from
? input.filter.dates.from
: new Date('2000-01-01');
@@ -112,22 +149,9 @@ export class OrderAPI extends BaseSQLDataSource {
.select('*')
.from('order_rows')
.where('designer_id', designerId)
.whereBetween('inserted', [this.getSQLDate(from), this.getSQLDate(to)])
.whereBetween('inserted', [getSQLDate(from), getSQLDate(to)])
.orderBy('inserted', 'desc')
.limit(limit)
.then((rows) => this.createOrderRows(rows));
}
createOrderRows(rows: Array<any>): Array<OrderRow> {
return rows.map((row) => {
return {
...row,
data: {
...row.data,
pwintySku: row.data.pwinty_sku ?? null,
pwintyImageId: row.data.pwinty_image_id ?? null,
frameColor: row.data.frame_color ?? null,
},
};
});
}
}
+68 -46
View File
@@ -1,8 +1,11 @@
import { ApolloServerErrorCode } from '@apollo/server/errors';
import { GraphQLError } from 'graphql';
import { Maybe } from 'graphql/jsutils/Maybe';
import {
BorderType,
PrintProductDefaults,
} from '../types/printproduct-defaults-types';
import { DataSourceOptions } from '../types/types';
import { BaseSQLDataSource } from './BaseSQLDataSource';
type TPosterDefaultPositioning = {
@@ -130,10 +133,15 @@ export const calculateDefaultPositioning = (
};
export class PrintProductDefaultsAPI extends BaseSQLDataSource {
constructor(config) {
super(config);
constructor(options: DataSourceOptions, config) {
super(options, config);
}
// -------------------------------
// INTERNAL
// Functions used inside this class
// -------------------------------
/**
* @function getBorderType
* @description Will convert lowercase none | white | black to
@@ -150,6 +158,60 @@ export class PrintProductDefaultsAPI extends BaseSQLDataSource {
}
}
// ----------------------------
// PUBLIC
// Functions used in resolvers or other datasources
// ----------------------------
/**
* @function insertDefaults
* @description Inserts a new printproduct into printproducts_defaults, sets the default
* values the same way we did when settings default values for all older printproducts.
*/
async insertDefaults(printId: number): Promise<0 | 1> {
const product = await this.knex.raw(
`
SELECT width, height, "focusXpoint2", "focusYpoint2" FROM
"product-printproducts" ppp
JOIN v_product vp ON ppp.productid = vp.id
WHERE printid = ?`,
[printId],
);
const { width, height, focusXpoint2, focusYpoint2 } = product.rows[0];
// GUARDS
if (!width || !height) {
throw new GraphQLError(
'PrintProductDefaultsAPI.insertDefaults: width and height must be defined for a motif to be able to set defaults',
{
extensions: { code: ApolloServerErrorCode.BAD_USER_INPUT },
},
);
}
const { width_mm, height_mm, crop_x, crop_y } = calculateDefaultPositioning(
width,
height,
focusXpoint2,
focusYpoint2,
);
return this.knex
.raw(
`
INSERT INTO printproducts_defaults (print_id, width_mm, height_mm, crop_x, crop_y, border)
VALUES (?, ?, ?, ?, ?, 'none');
`,
[printId, width_mm, height_mm, crop_x, crop_y],
)
.catch((e) => {
throw new GraphQLError(e.message, {
extensions: { code: ApolloServerErrorCode.INTERNAL_SERVER_ERROR },
});
});
}
/**
* @function getDefaults
* @description This function will fetch the default values from printproducts_defaults table
@@ -184,49 +246,6 @@ export class PrintProductDefaultsAPI extends BaseSQLDataSource {
});
}
/**
* @function insertDefaults
* @description Inserts a new printproduct into printproducts_defaults, sets the default
* values the same way we did when settings default values for all older printproducts.
*/
async insertDefaults(printId: number): Promise<0 | 1> {
const product = await this.knex.raw(
`
SELECT width, height, "focusXpoint2", "focusYpoint2" FROM
"product-printproducts" ppp
JOIN v_product vp ON ppp.productid = vp.id
WHERE printid = ?`,
[printId],
);
const { width, height, focusXpoint2, focusYpoint2 } = product.rows[0];
// GUARDS
if (!width || !height)
throw new Error(
'PrintProductDefaultsAPI.insertDefaults: width and height must be defined for a motif to be able to set defaults',
);
const { width_mm, height_mm, crop_x, crop_y } = calculateDefaultPositioning(
width,
height,
focusXpoint2,
focusYpoint2,
);
return this.knex
.raw(
`
INSERT INTO printproducts_defaults (print_id, width_mm, height_mm, crop_x, crop_y, border)
VALUES (?, ?, ?, ?, ?, 'none');
`,
[printId, width_mm, height_mm, crop_x, crop_y],
)
.catch((e) => {
throw new Error(e);
});
}
// ---------------------------------------------------------
// MUTATIONS
// ---------------------------------------------------------
@@ -271,8 +290,11 @@ export class PrintProductDefaultsAPI extends BaseSQLDataSource {
}
})
.catch((e) => {
throw new Error(
throw new GraphQLError(
`Something went wrong when trying to update with printid [${printId}][${e.message}]`,
{
extensions: { code: ApolloServerErrorCode.INTERNAL_SERVER_ERROR },
},
);
});
}
+230 -137
View File
@@ -1,3 +1,4 @@
import { ApolloServerErrorCode } from '@apollo/server/errors';
import { BaseSQLDataSource } from './BaseSQLDataSource';
import { camelcase } from 'stringcase';
import slug from 'slug';
@@ -20,26 +21,32 @@ import {
Batch,
Copyright,
} from '../types/product-types';
import { Maybe } from '../types/types';
import { DataSourceOptions, Maybe } from '../types/types';
import {
booleanStringField,
createQuestionMarksFromList,
isInt,
nullOrNumber,
roundOrDefaultTo,
} from './utils';
import { UserInputError } from 'apollo-server';
import { sendPathChangedCmd } from '../bernard/client';
import { TextsAPI } from './texts-api';
import { PrintProductDefaultsAPI } from './printproduct-defaults-api';
const MINUTE = 60;
import { GraphQLError } from 'graphql';
import { MINUTE } from './utils';
import { ScopeAccess, Scopes } from '../cognito/access-control';
export class ProductAPI extends BaseSQLDataSource {
textsApi: TextsAPI;
printProductDefaultsApi: PrintProductDefaultsAPI;
constructor(config, textsApi, printProductDefaultsApi) {
super(config);
constructor(
options: DataSourceOptions,
config,
textsApi,
printProductDefaultsApi,
) {
super(options, config);
this.textsApi = textsApi;
this.printProductDefaultsApi = printProductDefaultsApi;
}
@@ -49,6 +56,11 @@ export class ProductAPI extends BaseSQLDataSource {
// SELECT materialid, material, (price / 100::float) as price FROM "product-materials"
// }
// -------------------------------
// INTERNAL
// Functions used inside this class
// -------------------------------
getWallpaperTypes(row: any): Array<ProductWallpaperType> {
if (!row.wallpapertypes) {
return [];
@@ -155,123 +167,17 @@ export class ProductAPI extends BaseSQLDataSource {
}
createProductFromRow(row: any) {
row.publishingDate = row.publishing_date;
row.blacklisting = this.getBlacklisting(row);
row.printProducts = this.getPrintProducts(row);
row.type = this.getProductTypes(row);
row.wallpaperTypes = this.getWallpaperTypes(row);
row.fields = this.getProductFields(row);
row.designerId = row.designerid;
row.orientation = this.getOrientation(row.fields);
row.publishingDate = row.publishing_date;
row.printProducts = this.getPrintProducts(row);
row.blacklisting = this.getBlacklisting(row);
row.fields = this.getProductFields(row);
return row;
}
async getProductsTotal(input: ProductsFilterInput): Promise<number> {
const query = sql.productsTotal(input);
const res = await this.cachedRaw(query)
.cache(MINUTE * 5)
.then((data) => data.rows);
return res[0]['count'] as number; // Optimize later to return Promise
}
async getProducts(input: ProductsFilterInput): Promise<Array<Product>> {
const query = sql.products(input);
return this.knex
.raw(query)
.then((data) => data.rows.map((row) => this.createProductFromRow(row)));
}
async getProduct(id: number): Promise<Maybe<Product>> {
const query = sql.product(id);
const res = await this.knex.raw(query).then((data) =>
data.rows.map((row) => {
const prod = this.createProductFromRow(row);
return prod;
}),
);
return res.find(Boolean);
}
async getProductByPath(path: string): Promise<Maybe<Product>> {
const query = sql.productByPath(path);
const res = await this.knex.raw(query).then((data) =>
data.rows.map((row) => {
const prod = this.createProductFromRow(row);
return prod;
}),
);
return res.find(Boolean);
}
async getDesignerProducts(designerId: number): Promise<Array<Product>> {
const query = sql.designerProducts();
return this.knex
.raw(query, designerId)
.then((data) => data.rows.map((row) => this.createProductFromRow(row)));
}
async getCategoryProducts(categoryId: number): Promise<Array<Product>> {
const query = sql.categoryProducts(categoryId);
return this.knex
.raw(query)
.then((data) => data.rows.map((row) => this.createProductFromRow(row)));
}
async getCategoryWithSubCategoriesProducts(
categoryId: number,
): Promise<Array<Product>> {
const query = sql.categoryWithAllSubCategoriesProducts(categoryId);
return this.knex
.raw(query)
.then((data) => data.rows.map((row) => this.createProductFromRow(row)));
}
async getKeywordProducts(keywordId: number): Promise<Array<Product>> {
const query = sql.keywordProducts(keywordId);
return this.knex
.raw(query)
.then((data) => data.rows.map((row) => this.createProductFromRow(row)));
}
async searchByName(name: string): Promise<Array<Product>> {
const query = sql.searchByFieldValue(2); // name
return this.knex
.raw(query, name)
.then((data) => data.rows.map((row) => this.createProductFromRow(row)));
}
async searchByArtNo(name: string): Promise<Array<Product>> {
const query = sql.searchByFieldValue(1); // artNo
return this.knex
.raw(query, name)
.then((data) => data.rows.map((row) => this.createProductFromRow(row)));
}
async searchByCompleteProductId(q: string): Promise<Maybe<Product>> {
const queryAsNumber = Number(q.replaceAll('%', ''));
if (!queryAsNumber) {
return;
}
return this.getProduct(queryAsNumber);
}
async searchByBatch(name: string): Promise<Array<Batch>> {
return this.searchByFieldValue<Batch>(name, 36, 'batch');
}
async searchByCopyright(name: string): Promise<Array<Copyright>> {
return this.searchByFieldValue<Copyright>(name, 25, 'copyright');
}
async searchByFieldValue<T>(
name: string,
fieldNo: number,
@@ -299,7 +205,144 @@ export class ProductAPI extends BaseSQLDataSource {
});
}
// ----------------------------
// PUBLIC
// Functions used in resolvers or other datasources
// ----------------------------
async getProductsTotal(input: ProductsFilterInput): Promise<number> {
ScopeAccess.validate(this.user).some([Scopes.PRODUCTS_READ]);
const query = sql.productsTotal(input);
const res = await this.cachedRaw(query, null)
.cache(MINUTE * 5)
.then((data) => data.rows);
return res[0]['count'] as number; // Optimize later to return Promise
}
async getProducts(input: ProductsFilterInput): Promise<Array<Product>> {
ScopeAccess.validate(this.user).some([Scopes.PRODUCTS_READ]);
const query = sql.products(input);
return this.knex
.raw(query)
.then((data) => data.rows.map((row) => this.createProductFromRow(row)));
}
async getProduct(id: number): Promise<Maybe<Product>> {
ScopeAccess.validate(this.user).some([Scopes.PRODUCTS_READ]);
const query = sql.product();
const res = await this.knex.raw(query, [id]).then((data) =>
data.rows.map((row) => {
const prod = this.createProductFromRow(row);
return prod;
}),
);
return res.find(Boolean);
}
async getProductByPath(path: string): Promise<Maybe<Product>> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_READ]);
const query = sql.productByPath();
const res = await this.knex.raw(query, [path]).then((data) =>
data.rows.map((row) => {
const prod = this.createProductFromRow(row);
return prod;
}),
);
return res.find(Boolean);
}
async getDesignerProducts(designerId: number): Promise<Array<Product>> {
ScopeAccess.validate(this.user).all([
Scopes.DESIGNERS_READ,
Scopes.PRODUCTS_READ,
]);
const query = sql.designerProducts();
return this.knex
.raw(query, designerId)
.then((data) => data.rows.map((row) => this.createProductFromRow(row)));
}
async getCategoryProducts(categoryId: number): Promise<Array<Product>> {
ScopeAccess.validate(this.user).all([
Scopes.CATEGORIES_READ,
Scopes.PRODUCTS_READ,
]);
const query = sql.categoryProducts();
return this.knex
.raw(query, categoryId)
.then((data) => data.rows.map((row) => this.createProductFromRow(row)));
}
async getCategoryWithSubCategoriesProducts(
categoryId: number,
): Promise<Array<Product>> {
ScopeAccess.validate(this.user).all([
Scopes.CATEGORIES_READ,
Scopes.PRODUCTS_READ,
]);
const query = sql.categoryWithAllSubCategoriesProducts();
return this.knex
.raw(query, categoryId)
.then((data) => data.rows.map((row) => this.createProductFromRow(row)));
}
async getKeywordProducts(keywordId: number): Promise<Array<Product>> {
ScopeAccess.validate(this.user).all([
Scopes.KEYWORDS_READ,
Scopes.PRODUCTS_READ,
]);
const query = sql.keywordProducts();
return this.knex
.raw(query, keywordId)
.then((data) => data.rows.map((row) => this.createProductFromRow(row)));
}
async searchByName(name: string): Promise<Array<Product>> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_READ]);
const query = sql.searchByFieldValue(2); // name
return this.knex
.raw(query, name)
.then((data) => data.rows.map((row) => this.createProductFromRow(row)));
}
async searchByArtNo(name: string): Promise<Array<Product>> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_READ]);
const query = sql.searchByFieldValue(1); // artNo
return this.knex
.raw(query, name)
.then((data) => data.rows.map((row) => this.createProductFromRow(row)));
}
async searchByCompleteProductId(q: string): Promise<Maybe<Product>> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_READ]);
const queryAsNumber = Number(q.replaceAll('%', ''));
if (!queryAsNumber) {
return;
}
return this.getProduct(queryAsNumber);
}
async searchByBatch(name: string): Promise<Array<Batch>> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_READ]);
return this.searchByFieldValue<Batch>(name, 36, 'batch');
}
async searchByCopyright(name: string): Promise<Array<Copyright>> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_READ]);
return this.searchByFieldValue<Copyright>(name, 25, 'copyright');
}
async searchByReferences(name: string): Promise<Array<Product>> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_READ]);
const query = sql.referenceProducts(); // ref1, ref2, ref3
return this.knex
@@ -308,31 +351,25 @@ export class ProductAPI extends BaseSQLDataSource {
}
async getRelatedProducts(id: number): Promise<Array<Product>> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_READ]);
const ids = await this.knex
.raw(
`SELECT productid2 FROM "product-products_products" WHERE productid1 = ${id}`,
`SELECT productid2 FROM "product-products_products" WHERE productid1 = ?`,
id,
)
.then((data) => data.rows.map((r) => r.productid2));
return ids.map(async (id) => this.getProduct(id));
}
//
// mutations below
async updateProductField(
productId: number,
field: string,
value: string,
): Promise<void> {
return this.knex.raw(
/* sql */ `
INSERT INTO "product-products_fields" (productid, fieldid, value, inserted, updated)
VALUES (?, (SELECT fieldid FROM "product-fields" WHERE field = ?), ?, now(), now())
ON CONFLICT (productid, fieldid)
DO UPDATE SET "value" = ?`,
[productId, field, value, value],
);
}
// ---------------------------------------------------------
// MUTATIONS
// ---------------------------------------------------------
// -------------------------------
// INTERNAL
// Functions used inside this class
// -------------------------------
/**
* @function getUniqueProductPath
@@ -391,6 +428,31 @@ export class ProductAPI extends BaseSQLDataSource {
return newPath;
}
// ----------------------------
// PUBLIC
// Functions used in resolvers or other datasources
// ----------------------------
/**
* @function updateProductField
* @description Update a field for a product
*/
async updateProductField(
productId: number,
field: string,
value: string,
): Promise<void> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
return this.knex.raw(
/* sql */ `
INSERT INTO "product-products_fields" (productid, fieldid, value, inserted, updated)
VALUES (?, (SELECT fieldid FROM "product-fields" WHERE field = ?), ?, now(), now())
ON CONFLICT (productid, fieldid)
DO UPDATE SET "value" = ?`,
[productId, field, value, value],
);
}
/**
* @function addProduct
* @description Adds a new product to system, will use name to
@@ -401,6 +463,7 @@ export class ProductAPI extends BaseSQLDataSource {
batch: string,
designerId: number,
): Promise<number> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
const fixedBatch = !!batch ? batch : '';
const productPath = slug(name);
const safePath = await this.getUniqueProductPath(productPath, null);
@@ -429,6 +492,7 @@ export class ProductAPI extends BaseSQLDataSource {
productId: number,
info: ProductInfoInput,
): Promise<any[]> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
const promises = [];
// Check path and insert new unique path if taken
@@ -499,7 +563,9 @@ export class ProductAPI extends BaseSQLDataSource {
* @function productPublishing
* @description updates a products publishing
*/
// TODO: This is never used, why?
async productPublishing(productId: number, date: Date) {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
return this.knex
.table('product-products')
.update({
@@ -513,6 +579,7 @@ export class ProductAPI extends BaseSQLDataSource {
* @description Mass update publishing date
*/
async massUpdatePublishingDate(productIds: Array<number>, date: Date) {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
return this.knex
.table('product-products')
.update({
@@ -530,6 +597,7 @@ export class ProductAPI extends BaseSQLDataSource {
visible: boolean,
browsable: boolean,
) {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
return this.knex
.table('product-products')
.update({
@@ -547,6 +615,7 @@ export class ProductAPI extends BaseSQLDataSource {
productIds: Array<number>,
markets: Array<ProductBlacklistMarketInput>,
) {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
const promises = productIds.map((pId) =>
this.updateBlacklisting(pId, markets),
);
@@ -563,6 +632,7 @@ export class ProductAPI extends BaseSQLDataSource {
focusXpoint2: number,
focusYpoint2: number,
): Promise<Promise<void>[]> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
const promises = [];
promises.push(
this.updateProductField(
@@ -580,6 +650,7 @@ export class ProductAPI extends BaseSQLDataSource {
}
async updateComments(productId: number, comments: string): Promise<void> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
return this.updateProductField(productId, 'comments', comments);
}
@@ -591,6 +662,7 @@ export class ProductAPI extends BaseSQLDataSource {
productId: number,
markets: Array<ProductBlacklistMarketInput>,
) {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
const sql = /* sql */ `
INSERT INTO product_blacklist (product_id, group_id, market_id, created_at, updated_at)
VALUES (?, ?, ?, now(), now())
@@ -623,6 +695,7 @@ export class ProductAPI extends BaseSQLDataSource {
productId: number,
wallpaperTypes: Array<ProductWallpaperType>,
): Promise<any[]> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
await this.knex('product_wallpapertypes')
.where('product_id', productId)
.del();
@@ -643,6 +716,7 @@ export class ProductAPI extends BaseSQLDataSource {
* poster. Note that group 3 is repeating wallpapers.
*/
async updateGroups(productId: number, groupIds: number[]): Promise<any[]> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
// Fetch the current state
const allPrintProducts = await this.knex.raw(
`SELECT printid, groupid FROM "product-printproducts" WHERE productid = ?`,
@@ -797,6 +871,10 @@ export class ProductAPI extends BaseSQLDataSource {
groupId: number,
uris: string[],
): Promise<Promise<void>[]> {
ScopeAccess.validate(this.user).all([
Scopes.PRODUCTS_WRITE,
Scopes.INTERIORS_WRITE,
]);
// Create object to hold data as we go along all the db calls
// This object needs to support new own uploaded images, these should have
// some other folder prefix, like /interiors-buffer/. These will
@@ -896,6 +974,7 @@ export class ProductAPI extends BaseSQLDataSource {
productId: number,
proportions: ProductProportionsInput,
): Promise<Promise<void>[]> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
const promises = [];
promises.push(
this.updateProductField(
@@ -937,18 +1016,23 @@ export class ProductAPI extends BaseSQLDataSource {
productId: number,
articleNumbers: Array<string>,
): Promise<Promise<void>[]> {
const whereClause = articleNumbers.map((a) => `'${a}'`).join(',');
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
const query = /* sql */ `
SELECT pp.productid, ppf.value FROM "product-products" pp
LEFT JOIN "product-products_fields" ppf
ON ppf.productid = pp.productid AND ppf.fieldid = 1
WHERE ppf.value IN (${whereClause});
WHERE ppf.value IN (${createQuestionMarksFromList(articleNumbers)});
`;
const res = await this.knex.raw(query).then((data) => data.rows);
const res = await this.knex
.raw(query, articleNumbers)
.then((data) => data.rows);
if (!res.length) {
throw new UserInputError('No articles found');
throw new GraphQLError('No articles found', {
extensions: { code: ApolloServerErrorCode.BAD_USER_INPUT },
});
}
const fieldsToInsert = res.map((item) => ({
productid1: productId,
@@ -977,6 +1061,7 @@ export class ProductAPI extends BaseSQLDataSource {
productId,
relatedProductIds,
): Promise<Promise<void>[]> {
ScopeAccess.validate(this.user).all([Scopes.PRODUCTS_WRITE]);
// remove connection between the friends id and this produdId
const promises = relatedProductIds.map((pId) => {
return this.knex('product-products_products')
@@ -1001,6 +1086,10 @@ export class ProductAPI extends BaseSQLDataSource {
productId,
categoryIds,
): Promise<Promise<void>[]> {
ScopeAccess.validate(this.user).all([
Scopes.PRODUCTS_WRITE,
Scopes.CATEGORIES_WRITE,
]);
const promises = categoryIds.map((categoryId) =>
this.knex('product_category').insert({
product_id: productId,
@@ -1018,6 +1107,10 @@ export class ProductAPI extends BaseSQLDataSource {
productId,
categoryIds,
): Promise<Promise<void>[]> {
ScopeAccess.validate(this.user).all([
Scopes.PRODUCTS_WRITE,
Scopes.CATEGORIES_WRITE,
]);
const promises = categoryIds.map((categoryId) =>
this.knex('product_category')
.where({
+10 -10
View File
@@ -110,35 +110,35 @@ export function productsTotal(input: ProductsFilterInput) {
`;
}
export function product(id: number) {
export function product() {
return (
baseQuery +
/* sql */ `
WHERE products.productid = ${id}
WHERE products.productid = ?
`
);
}
export function productByPath(path: string) {
export function productByPath() {
return (
baseQuery +
/* sql */ `
WHERE products.path = '${path}'
WHERE products.path = ?
`
);
}
export function categoryProducts(categoryId: number) {
export function categoryProducts() {
return (
baseQuery +
/* sql */ `
WHERE products.productid IN (SELECT product_id FROM product_category WHERE category_id = ${categoryId})
WHERE products.productid IN (SELECT product_id FROM product_category WHERE category_id = ?)
ORDER BY products.inserted DESC
`
);
}
export function categoryWithAllSubCategoriesProducts(categoryId: number) {
export function categoryWithAllSubCategoriesProducts() {
return (
baseQuery +
/* sql */ `
@@ -151,7 +151,7 @@ export function categoryWithAllSubCategoriesProducts(categoryId: number) {
JOIN (
SELECT id, lft, rgt
FROM categories
WHERE id = ${categoryId}
WHERE id = ?
) tree
ON cat.lft >= tree.lft AND cat.rgt <= tree.rgt
)
@@ -180,11 +180,11 @@ export function referenceProducts() {
);
}
export function keywordProducts(keywordId: number) {
export function keywordProducts() {
return (
baseQuery +
/* sql */ `
WHERE products.productid IN (SELECT product_id FROM product_keyword WHERE keyword_id = ${keywordId})
WHERE products.productid IN (SELECT product_id FROM product_keyword WHERE keyword_id = ?)
ORDER BY products.inserted DESC
`
);
+7 -3
View File
@@ -1,16 +1,20 @@
import { SQLDataSource } from 'datasource-sql';
import { TranslateInput, translateText } from '../aws/translate';
import { Locale } from '../types/market-locale-types';
import { DataSourceOptions } from '../types/types';
import { MarketLocaleAPI } from './market-locale-api';
const MINUTE = 60;
// TODO: perhaps rename to MarketLocale API and add market_locales and locales here.
export class TextsAPI extends SQLDataSource {
marketLocaleApi: MarketLocaleAPI;
constructor(config, marketLocaleApi: MarketLocaleAPI) {
constructor(
options: DataSourceOptions,
config,
marketLocaleApi: MarketLocaleAPI,
) {
super(config);
this.initialize({ cache: options.cache, context: null });
this.marketLocaleApi = marketLocaleApi;
}
+2
View File
@@ -1,5 +1,7 @@
type InputType = string | undefined | null;
export const MINUTE = 60;
function isNumeric(n: InputType) {
return !isNaN(parseFloat(n));
}
+55 -92
View File
@@ -1,116 +1,79 @@
const newrelic = require('newrelic');
const newRelicPlugin = require('@newrelic/apollo-server-plugin');
import dotenv from 'dotenv';
dotenv.config();
import { ApolloServer, AuthenticationError } from 'apollo-server';
import knexStringcase from 'knex-stringcase';
import { dbConfig } from './config';
import { ApolloServer } from '@apollo/server';
import { expressMiddleware } from '@apollo/server/express4';
import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer';
import resolvers from './resolvers';
import { OrderAPI } from './datasources/order-api';
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 { MarketLocaleAPI } from './datasources/market-locale-api';
import { ImageServerApi } from './datasources/imageserver-api';
import { InteriorAPI } from './datasources/interior-api';
import { verifyToken } from './cognito/cognito-client';
import { readFileSync } from 'fs';
import { InteriorsLambdaAPI } from './datasources/interiors-lambda-api';
import { TextsAPI } from './datasources/texts-api';
import { PrintProductDefaultsAPI } from './datasources/printproduct-defaults-api';
const newRelicPlugin = require('@newrelic/apollo-server-plugin');
import { ContextValue } from './context';
import { GraphQLFormattedError } from 'graphql';
import express from 'express';
import http from 'http';
import cors from 'cors';
import { json } from 'body-parser';
import { getClientAccessToken } from './rest/cognitoService';
const path = require('path');
const typeDefs = readFileSync(
path.join(__dirname, './schema.graphql'),
).toString('utf-8');
// Converts column names to CamelCase
const knexConfig = knexStringcase(dbConfig);
// set up any dataSources our resolvers need
const marketLocaleApi = new MarketLocaleAPI(knexConfig);
const textsApi = new TextsAPI(knexConfig, marketLocaleApi);
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 printProductDefaultsApi = new PrintProductDefaultsAPI(knexConfig);
const keywordApi = new KeywordAPI(knexConfig, textsApi);
const orderApi = new OrderAPI(knexConfig);
const productApi = new ProductAPI(
knexConfig,
textsApi,
printProductDefaultsApi,
);
const dataSources = () => ({
categoryApi,
designerApi,
interiorApi,
printProductDefaultsApi,
interiorsLambdaApi,
imageServerApi,
keywordApi,
marketLocaleApi,
orderApi,
productApi,
});
const context = async ({ req }) => {
if (process.env.NODE_ENV == 'test') {
return { auth: { userName: 'testuser' } };
}
const authHeader = req.headers.authorization || '';
if (authHeader.startsWith('Bearer ')) {
const token = authHeader.substring(7, authHeader.length);
const res = await verifyToken({ token });
if (res.isValid) {
return { auth: res };
}
} else if (
process.env.NODE_ENV === 'development' &&
authHeader == 'Basic ZGV2OnB2N1VmYSFiZVAzeGk='
) {
return {
auth: {
userName: 'testuser',
isValid: true,
accessToken: null,
idToken: null,
},
};
}
throw new AuthenticationError('Not authorized');
};
async function main() {
try {
const server = new ApolloServer({
const app = express();
const httpServer = http.createServer(app);
const server = new ApolloServer<ContextValue>({
typeDefs,
resolvers,
dataSources,
context,
introspection: true,
plugins: [newRelicPlugin],
formatError: (err) => {
console.log('Error (fmt):', err);
newrelic.noticeError(err);
return err;
plugins: [
newRelicPlugin,
ApolloServerPluginDrainHttpServer({ httpServer }),
],
formatError: (formattedError: GraphQLFormattedError, error: unknown) => {
console.error(error);
newrelic.noticeError(error);
return formattedError;
},
});
await server.listen();
await server.start();
console.log(
'Server is running on http://localhost:4000, ',
process.env.ENVIRONMENT_NAME,
app.get('/health', (req, res) => {
res.status(200).send('OK');
});
app.post('/login', async (req, res) => {
try {
const response = await getClientAccessToken(req);
res.status(200).send(response);
} catch (e) {
newrelic.noticeError(e.message);
res.status(401).send(e.message);
}
});
app.use(
'/',
cors<cors.CorsRequest>(),
json(),
expressMiddleware(server, {
context: async ({ req }) => {
const instance = new ContextValue({ req, server });
const context = await instance.process();
return context;
},
}),
);
await new Promise<void>((resolve) =>
httpServer.listen({ port: 4000 }, resolve),
);
console.log('SERVER IS RUNNING');
console.log(`ENV: ${process.env.ENVIRONMENT_NAME}`);
} catch (ex) {
newrelic.noticeError(ex);
console.error('Got terminal exception:', ex);
+2 -4
View File
@@ -1,10 +1,8 @@
import { checkAccess } from '../cognito/access-control';
import { CategoryAPI } from '../datasources/category-api';
import { ProductAPI } from '../datasources/product-api';
const Category = {
async products({ id }, { includeAllSubCategories }, { dataSources, auth }) {
checkAccess(['products.read'], auth);
async products({ id }, { includeAllSubCategories }, { dataSources }) {
if (includeAllSubCategories === true) {
return (<ProductAPI>(
dataSources.productApi
@@ -13,7 +11,7 @@ const Category = {
return (<ProductAPI>dataSources.productApi).getCategoryProducts(id);
}
},
async localeNames({ id }, _, { dataSources, auth }) {
async localeNames({ id }, _, { dataSources }) {
return (<CategoryAPI>dataSources.categoryApi).getLocaleNameForId(id);
},
};
+4 -9
View File
@@ -1,27 +1,22 @@
import { checkAccess } from '../cognito/access-control';
import { DesignerAPI } from '../datasources/designer-api';
import { OrderAPI } from '../datasources/order-api';
import { ProductAPI } from '../datasources/product-api';
import { GeneralInput } from '../types/types';
const Designer = {
async orderRows({ id }, input: GeneralInput, { dataSources, auth }) {
checkAccess(['orders.read'], auth);
async orderRows({ id }, input: GeneralInput, { dataSources }) {
return (<OrderAPI>dataSources.orderApi).getOrderRowsByDesignerId(id, input);
},
async products({ id }, _args, { dataSources, auth }) {
checkAccess(['products.read'], auth);
async products({ id }, _args, { dataSources }) {
return (<ProductAPI>dataSources.productApi).getDesignerProducts(id);
},
};
async function getDesigners(_, { limit }, { dataSources, auth }) {
checkAccess(['designers.read'], auth);
async function getDesigners(_, { limit }, { dataSources }) {
return (<DesignerAPI>dataSources.designerApi).getDesigners(limit);
}
async function getDesigner(_, { id }, { dataSources, auth }) {
checkAccess(['designers.read'], auth);
async function getDesigner(_, { id }, { dataSources }) {
return (<DesignerAPI>dataSources.designerApi).getDesignerById(id);
}
+7 -1
View File
@@ -4,12 +4,18 @@ import {
SignedUploadURLInput,
} from '../types/file-upload-types';
import * as CONFIG from '../config';
import { ScopeAccess, Scopes } from '../cognito/access-control';
async function getSignedFileUploadURL(
_,
args: SignedUploadURLInput,
__,
{ user },
): Promise<SignedUploadURL> {
// This should not be defined in the resolver, but in
// this case there is no datasource to define the scopes
// in. In future please create a restdatasource from the s3.ts
// and move it to datasources.
ScopeAccess.validate(user).all([Scopes.PRODUCTS_WRITE]);
const config = args.config;
const bucket = CONFIG.uploadBucket;
+1
View File
@@ -20,6 +20,7 @@ import { DateTimeResolver, DateResolver, JSONResolver } from 'graphql-scalars';
import { interiorsQueryTypeDefs, interiorTypeDefs } from './interiors-resolver';
import { imagesQueryTypeDefs } from './file-upload-resolvers';
import { TextsQueryTypeDefs } from './texts-resolver';
const resolvers = {
Query: {
...orderQueryTypeDefs,
+5 -5
View File
@@ -1,10 +1,8 @@
import { checkAccess } from '../cognito/access-control';
import { KeywordAPI } from '../datasources/keyword-api';
import { ProductAPI } from '../datasources/product-api';
const Keyword = {
async products({ id }, _args, { dataSources, auth }) {
checkAccess(['products.read'], auth);
async products({ id }, _args, { dataSources }) {
return (<ProductAPI>dataSources.productApi).getKeywordProducts(id);
},
};
@@ -24,8 +22,10 @@ export const keywordsQueryTypeDefs = {
keyword: getKeyword,
};
///////////////////
// Mutations below
// ---------------------------------------------------------
// MUTATIONS
// ---------------------------------------------------------
export const keywordsMutationTypeDefs = {
async addKeyword(_, { name, type }, { dataSources }) {
const id = await (<KeywordAPI>dataSources.keywordApi).addKeyword(
+4 -9
View File
@@ -1,4 +1,3 @@
import { checkAccess } from '../cognito/access-control';
import { MarketLocaleAPI } from '../datasources/market-locale-api';
import { OrderAPI } from '../datasources/order-api';
import { OrdersResult } from '../types/order-types';
@@ -27,8 +26,7 @@ const Order = {
};
const OrderRow = {
async order(parent, _args, { dataSources, auth }) {
checkAccess(['orders.read'], auth);
async order(parent, _args, { dataSources }) {
return (<OrderAPI>dataSources.orderApi).getOrderById(parent.orderId);
},
};
@@ -36,9 +34,8 @@ const OrderRow = {
async function getOrdersResult(
_,
input: GeneralInput,
{ dataSources, auth },
{ dataSources },
): Promise<OrdersResult> {
checkAccess(['orders.read'], auth);
const total = (<OrderAPI>dataSources.orderApi).getOrdersTotal(input);
const items = (<OrderAPI>dataSources.orderApi).getOrders(input);
const offset = input.pagination?.offset ?? 0;
@@ -52,17 +49,15 @@ async function getOrdersResult(
};
}
async function getOrder(_, { id }, { dataSources, auth }) {
checkAccess(['orders.read'], auth);
async function getOrder(_, { id }, { dataSources }) {
return (<OrderAPI>dataSources.orderApi).getOrderById(id);
}
async function orderByExternalId(
_,
{ klarnaOrderId, paypalTransactionId },
{ dataSources, auth },
{ dataSources },
) {
checkAccess(['orders.read'], auth);
return (<OrderAPI>dataSources.orderApi).getOrderByExternalId(
klarnaOrderId,
paypalTransactionId,
+28 -71
View File
@@ -17,7 +17,6 @@ import { InteriorsLambdaAPI } from '../datasources/interiors-lambda-api';
import { IdNumberResult } from '../types/types';
import { moveS3File } from '../aws/s3';
import { DesignerAPI } from '../datasources/designer-api';
import { checkAccess } from '../cognito/access-control';
import { PrintProductDefaultsAPI } from '../datasources/printproduct-defaults-api';
import { PrintProductDefaults } from '../types/printproduct-defaults-types';
@@ -30,12 +29,10 @@ const ProductBlacklist = {
};
const Product = {
// (parent, args, ctx, info)
async categories({ id }, _args, { dataSources }): Promise<Array<Category>> {
return (<CategoryAPI>dataSources.categoryApi).getProductCategories(id);
},
async designer({ designerId }, _args, { dataSources, auth }) {
checkAccess(['designers.read'], auth);
async designer({ designerId }, _args, { dataSources }) {
if (!designerId) {
return null;
}
@@ -63,9 +60,8 @@ const PrintProduct = {
async function getProductsResult(
_,
input: ProductsFilterInput,
{ dataSources, auth },
{ dataSources },
): Promise<ProductListResult> {
checkAccess(['products.read'], auth);
const total = (<ProductAPI>dataSources.productApi).getProductsTotal(input);
const items = (<ProductAPI>dataSources.productApi).getProducts(input);
const offset = input.pagination?.offset ?? 0;
@@ -82,9 +78,8 @@ async function getProductsResult(
async function getProductsSearchResult(
_,
{ q },
{ dataSources, auth },
{ dataSources },
): Promise<ProductsSearchResult> {
checkAccess(['products.read', 'designers.read'], auth);
const prodApi = <ProductAPI>dataSources.productApi;
const catApi = <CategoryAPI>dataSources.categoryApi;
const keywApi = <KeywordAPI>dataSources.keywordApi;
@@ -117,7 +112,7 @@ async function getProductsSearchResult(
};
}
async function getProduct(_, { id }, { dataSources, auth }): Promise<Product> {
async function getProduct(_, { id }, { dataSources }): Promise<Product> {
return (<ProductAPI>dataSources.productApi).getProduct(id);
}
@@ -142,15 +137,16 @@ export const productQueryTypeDefs = {
productsSearch: getProductsSearchResult,
};
///////////////////
// Mutations below
// ---------------------------------------------------------
// MUTATIONS
// ---------------------------------------------------------
export const productMutationTypeDefs = {
/**
* @function addProduct
* @description Will add a product
*/
async addProduct(_, { name, batch, designerId }, { dataSources, auth }) {
checkAccess(['products.write'], auth);
async addProduct(_, { name, batch, designerId }, { dataSources }) {
const id = await (<ProductAPI>dataSources.productApi).addProduct(
name,
batch,
@@ -163,8 +159,7 @@ export const productMutationTypeDefs = {
* @function productInfo
* @description Mutate base information about a product
*/
async productInfo(_, { productId, info }, { dataSources, auth }) {
checkAccess(['products.write'], auth);
async productInfo(_, { productId, info }, { dataSources }) {
await (<ProductAPI>dataSources.productApi).updateProductInfo(
productId,
info,
@@ -179,9 +174,8 @@ export const productMutationTypeDefs = {
async productFocusPoint(
_,
{ productId, focusXpoint2, focusYpoint2 },
{ dataSources, auth },
{ dataSources },
) {
checkAccess(['products.write'], auth);
await (<ProductAPI>dataSources.productApi).updateFocusPoint(
productId,
focusXpoint2,
@@ -202,8 +196,7 @@ export const productMutationTypeDefs = {
* @function productBlacklisting
* @description Mutate the product blacklist
*/
async productBlacklisting(_, { productId, markets }, { dataSources, auth }) {
checkAccess(['products.write'], auth);
async productBlacklisting(_, { productId, markets }, { dataSources }) {
await (<ProductAPI>dataSources.productApi).updateBlacklisting(
productId,
markets,
@@ -215,8 +208,7 @@ export const productMutationTypeDefs = {
* @function productGroup
* @description Mutate the product groups, when changing group interiors lambda is triggered.
*/
async productGroup(_, { productId, groupIds }, { dataSources, auth }) {
checkAccess(['products.write'], auth);
async productGroup(_, { productId, groupIds }, { dataSources }) {
await (<ProductAPI>dataSources.productApi).updateGroups(
productId,
groupIds,
@@ -237,9 +229,8 @@ export const productMutationTypeDefs = {
async productGroupInteriors(
_,
{ productId, groupId, uris },
{ dataSources, auth },
{ dataSources },
) {
checkAccess(['products.write'], auth);
await (<ProductAPI>dataSources.productApi).addInteriorsToProductGroup(
productId,
groupId,
@@ -252,8 +243,7 @@ export const productMutationTypeDefs = {
* @function productKeywords
* @description Mutate the keywords for a product
*/
async productKeywords(_, { productId, keywordIds }, { dataSources, auth }) {
checkAccess(['products.write'], auth);
async productKeywords(_, { productId, keywordIds }, { dataSources }) {
await (<KeywordAPI>dataSources.keywordApi).setProductKeywords(
productId,
keywordIds,
@@ -268,9 +258,8 @@ export const productMutationTypeDefs = {
async productProportionsWarning(
_,
{ productId, proportions },
{ dataSources, auth },
{ dataSources },
) {
checkAccess(['products.write'], auth);
await (<ProductAPI>dataSources.productApi).setProportionsWarning(
productId,
proportions,
@@ -285,9 +274,8 @@ export const productMutationTypeDefs = {
async addOwnInteriorToPrintProduct(
_,
{ printId, uploadedS3Key },
{ dataSources, auth },
{ dataSources },
): Promise<IdNumberResult> {
checkAccess(['products.write'], auth);
return (<InteriorAPI>dataSources.interiorApi).addOwnUploadToPrintId(
printId,
uploadedS3Key,
@@ -301,9 +289,8 @@ export const productMutationTypeDefs = {
async printProductDefaults(
_,
{ printId, widthMm, heightMm, cropX, cropY, border },
{ dataSources, auth },
{ dataSources },
): Promise<PrintProductDefaults> {
checkAccess(['products.write'], auth);
return (<PrintProductDefaultsAPI>(
dataSources.printProductDefaultsApi
)).updateDefaults(printId, widthMm, heightMm, cropX, cropY, border);
@@ -316,9 +303,8 @@ export const productMutationTypeDefs = {
async productWallpaperType(
_,
{ productId, wallpaperTypes },
{ dataSources, auth },
{ dataSources },
) {
checkAccess(['products.write'], auth);
await (<ProductAPI>dataSources.productApi).setWallpaperTypes(
productId,
wallpaperTypes,
@@ -335,9 +321,8 @@ export const productMutationTypeDefs = {
async updateProductImage(
_,
{ productId, uploadedS3Key, width, height },
{ dataSources, auth },
{ dataSources },
) {
checkAccess(['products.write'], auth);
await moveS3File(
CONFIG.uploadBucket,
uploadedS3Key,
@@ -369,12 +354,7 @@ export const productMutationTypeDefs = {
* @description Adds a related product to a product, when doing this the related product
* gets the same relationship back. So products are always related to eachother.
*/
async addRelatedProducts(
_,
{ productId, articleNumbers },
{ dataSources, auth },
) {
checkAccess(['products.write'], auth);
async addRelatedProducts(_, { productId, articleNumbers }, { dataSources }) {
await (<ProductAPI>dataSources.productApi).addRelatedProducts(
productId,
articleNumbers,
@@ -389,9 +369,8 @@ export const productMutationTypeDefs = {
async removeRelatedProducts(
_,
{ productId, relatedProductIds },
{ dataSources, auth },
{ dataSources },
) {
checkAccess(['products.write'], auth);
await (<ProductAPI>dataSources.productApi).removeRelatedProducts(
productId,
relatedProductIds,
@@ -403,12 +382,7 @@ export const productMutationTypeDefs = {
* @function addCategoriesToProduct
* @description Add categories to a product
*/
async addCategoriesToProduct(
_,
{ productId, categoryIds },
{ dataSources, auth },
) {
checkAccess(['products.write'], auth);
async addCategoriesToProduct(_, { productId, categoryIds }, { dataSources }) {
await (<ProductAPI>dataSources.productApi).addCategoriesToProduct(
productId,
categoryIds,
@@ -423,9 +397,8 @@ export const productMutationTypeDefs = {
async removeCategoriesFromProduct(
_,
{ productId, categoryIds },
{ dataSources, auth },
{ dataSources },
) {
checkAccess(['products.write'], auth);
await (<ProductAPI>dataSources.productApi).removeCategoriesFromProduct(
productId,
categoryIds,
@@ -437,12 +410,7 @@ export const productMutationTypeDefs = {
* @function updateProductComments
* @description Mutate product comments
*/
async updateProductComments(
_,
{ productId, comments },
{ dataSources, auth },
) {
checkAccess(['products.write'], auth);
async updateProductComments(_, { productId, comments }, { dataSources }) {
await (<ProductAPI>dataSources.productApi).updateComments(
productId,
comments,
@@ -456,9 +424,8 @@ export const productMutationTypeDefs = {
async massUpdatePublishing(
_,
{ productIds, visible, browsable },
{ dataSources, auth },
{ dataSources },
) {
checkAccess(['products.write'], auth);
await (<ProductAPI>dataSources.productApi).massUpdatePublishing(
productIds,
visible,
@@ -472,12 +439,7 @@ export const productMutationTypeDefs = {
* @function massUpdateBlacklisting
* @description Mutate the blacklisting for products
*/
async massUpdateBlacklisting(
_,
{ productIds, markets },
{ dataSources, auth },
) {
checkAccess(['products.write'], auth);
async massUpdateBlacklisting(_, { productIds, markets }, { dataSources }) {
await (<ProductAPI>dataSources.productApi).massUpdateBlacklisting(
productIds,
markets,
@@ -490,12 +452,7 @@ export const productMutationTypeDefs = {
* @function massUpdatePublishing
* @description Mutate the Publishing for products
*/
async massUpdatePublishingDate(
_,
{ productIds, date },
{ dataSources, auth },
) {
checkAccess(['products.write'], auth);
async massUpdatePublishingDate(_, { productIds, date }, { dataSources }) {
await (<ProductAPI>dataSources.productApi).massUpdatePublishingDate(
productIds,
date,
+3 -1
View File
@@ -1,6 +1,8 @@
import { translateText, TranslateInput } from '../aws/translate';
import { ScopeAccess, Scopes } from '../cognito/access-control';
async function translate(_, { input }, _ctx) {
async function translate(_, { input }, { user }) {
ScopeAccess.validate(user).all([Scopes.TEXTS_READ]);
const value = await translateText(input as TranslateInput);
return { value };
}
+40
View File
@@ -0,0 +1,40 @@
import axios from 'axios';
import { Scopes } from '../cognito/access-control';
export const getClientAccessToken = async (req) => {
const token = req.headers.authorization || '';
const tokenKey = Buffer.from(
`${process.env.WEB_CLIENT_USERNAME}:${process.env.WEB_CLIENT_PASSWORD}`,
).toString('base64');
if (token !== `Basic ${tokenKey}`) {
return Promise.reject(new Error('password or username did not match'));
}
const clientId = `${process.env.COGNITO_LOGIN_CLIENT_ID}`;
const cognitoAppUrl = `${process.env.COGNITO_LOGIN_CLIENT_URL}`;
const authString =
'Basic ' +
Buffer.from(
clientId + ':' + process.env.COGNITO_LOGIN_CLIENT_SECRET,
).toString('base64');
const res = await axios({
url: cognitoAppUrl + '/oauth2/token',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
Authorization: authString,
},
data: {
grant_type: 'client_credentials',
client_id: clientId,
scope: `https://graphql.photowall.com/${Scopes.PRODUCTS_PUBLIC_READ} https://graphql.photowall.com/${Scopes.DESIGNERS_PUBLIC_READ}`,
},
});
return {
access_token: res.data.access_token,
expires_in: res.data.expires_in,
};
};
+4
View File
@@ -43,6 +43,10 @@ type Query {
translate(input: TranslateInput!): StringResult!
}
type HealthCheck {
result: String!
}
input TranslateInput {
text: String!
"""
+17
View File
@@ -1,5 +1,22 @@
import { KeyValueCache } from '@apollo/utils.keyvaluecache';
import { ClaimVerifyResult } from '../cognito/cognito-client';
export type Maybe<T> = T | undefined;
export interface IAuthObject {
userName: String;
isValid?: boolean;
accessToken?: String | null;
idToken?: String | null;
}
export type User = IAuthObject | ClaimVerifyResult;
export type DataSourceOptions = {
cache: KeyValueCache<string>;
user: IAuthObject | ClaimVerifyResult;
};
export interface PaginationInput {
limit: number;
offset?: number;