From 752dc7cd6c92c8851b3942ce60d9cb26df60c546 Mon Sep 17 00:00:00 2001 From: poeti8 Date: Thu, 3 Oct 2019 20:42:37 +0330 Subject: [PATCH] :boom: Move to Postgres from MongoDB --- .eslintrc | 7 +- client/components/Stats/Stats.js | 5 +- client/components/Table/TBody/TBody.js | 4 +- client/components/Table/TBody/TBodyCount.js | 8 +- client/components/Table/Table.js | 18 +- client/pages/_document.js | 14 +- client/pages/stats.js | 8 +- global.d.ts | 114 ++ nodemon.json | 2 +- package-lock.json | 1335 +++++++++++++----- package.json | 51 +- scripts/migration.ts | 27 - server/configToEnv.ts | 42 +- server/controllers/authController.ts | 171 +-- server/controllers/linkController.ts | 324 +++-- server/controllers/validateBodyController.ts | 163 ++- server/cron.ts | 4 +- server/db/domain.ts | 134 +- server/db/host.ts | 58 +- server/db/ip.ts | 56 +- server/db/link.ts | 587 ++++---- server/db/user.ts | 252 ++-- server/knex.ts | 28 + server/mail/mail.ts | 12 +- server/migration/01_host.ts | 67 + server/migration/02_users.ts | 86 ++ server/migration/03_domains.ts | 97 ++ server/migration/04_links.ts | 181 +++ server/models/domain.ts | 50 +- server/models/host.ts | 42 +- server/models/ip.ts | 28 +- server/models/link.ts | 63 +- server/models/user.ts | 77 +- server/models/visit.ts | 128 +- server/module.d.ts | 8 - server/passport.ts | 22 +- server/redis.ts | 10 +- server/server.ts | 195 +-- server/utils/index.ts | 58 +- tsconfig.server.json | 2 +- 40 files changed, 2976 insertions(+), 1562 deletions(-) create mode 100644 global.d.ts delete mode 100644 scripts/migration.ts create mode 100644 server/knex.ts create mode 100644 server/migration/01_host.ts create mode 100644 server/migration/02_users.ts create mode 100644 server/migration/03_domains.ts create mode 100644 server/migration/04_links.ts delete mode 100644 server/module.d.ts diff --git a/.eslintrc b/.eslintrc index ee1996e..138245f 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,10 +1,8 @@ { "extends": [ "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended", - "prettier", - "prettier/@typescript-eslint" + "plugin:prettier/recommended" ], "parser": "@typescript-eslint/parser", "parserOptions": { @@ -15,6 +13,7 @@ "eqeqeq": ["warn", "always", { "null": "ignore" }], "no-useless-return": "warn", "no-var": "warn", + "no-console": "warn", "max-len": ["warn", { "comments": 80 }], "no-param-reassign": ["warn", { "props": false }], "require-atomic-updates": 0, @@ -22,11 +21,13 @@ "@typescript-eslint/no-unused-vars": "off", // "warn" for production "@typescript-eslint/no-explicit-any": "off", // "warn" for production "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/camelcase": "off", "@typescript-eslint/no-object-literal-type-assertion": "off", "@typescript-eslint/no-parameter-properties": "off", "@typescript-eslint/explicit-function-return-type": "off" }, "env": { + "es6": true, "browser": true, "node": true, "mocha": true diff --git a/client/components/Stats/Stats.js b/client/components/Stats/Stats.js index c767214..ce029d9 100644 --- a/client/components/Stats/Stats.js +++ b/client/components/Stats/Stats.js @@ -85,10 +85,10 @@ class Stats extends Component { } componentDidMount() { - const { id } = this.props; + const { domain, id } = this.props; if (!id) return null; return axios - .get(`/api/url/stats?id=${id}`, { headers: { Authorization: cookie.get('token') } }) + .get(`/api/url/stats?id=${id}&domain=${domain}`, { headers: { Authorization: cookie.get('token') } }) .then(({ data }) => this.setState({ stats: data, @@ -155,6 +155,7 @@ class Stats extends Component { Stats.propTypes = { isAuthenticated: PropTypes.bool.isRequired, + domain: PropTypes.string.isRequired, id: PropTypes.string.isRequired, showPageLoading: PropTypes.func.isRequired, }; diff --git a/client/components/Table/TBody/TBody.js b/client/components/Table/TBody/TBody.js index 524e9e3..aa2188e 100644 --- a/client/components/Table/TBody/TBody.js +++ b/client/components/Table/TBody/TBody.js @@ -93,13 +93,13 @@ const TableBody = ({ copiedIndex, handleCopy, tableLoading, showModal, urls }) = {url.target} - {`${distanceInWordsToNow(url.createdAt)} ago`} + {`${distanceInWordsToNow(url.created_at)} ago`} - + ); diff --git a/client/components/Table/TBody/TBodyCount.js b/client/components/Table/TBody/TBodyCount.js index a47b9e7..38c1a90 100644 --- a/client/components/Table/TBody/TBodyCount.js +++ b/client/components/Table/TBody/TBodyCount.js @@ -50,9 +50,9 @@ class TBodyCount extends Component { goTo(e) { e.preventDefault(); + const { id, domain } = this.props.url; this.props.showLoading(); - const host = URL.parse(this.props.url.shortLink).hostname; - Router.push(`/stats?id=${this.props.url.id}${`&domain=${host}`}`); + Router.push(`/stats?id=${id}${domain ? `&domain=${domain}`: ''}`); } render() { @@ -61,10 +61,10 @@ class TBodyCount extends Component { return ( - {url.count || 0} + {url.visit_count || 0} {url.password && } - {url.count > 0 && ( + {url.visit_count > 0 && ( Stats diff --git a/client/components/Table/Table.js b/client/components/Table/Table.js index c69a216..87765ff 100644 --- a/client/components/Table/Table.js +++ b/client/components/Table/Table.js @@ -93,15 +93,15 @@ class Table extends Component { }, 1500); } - showModal(e) { - e.preventDefault(); - const modalUrlId = e.currentTarget.dataset.id; - const modalUrlDomain = e.currentTarget.dataset.host; - this.setState({ - modalUrlId, - modalUrlDomain, - showModal: true, - }); + showModal(url) { + return e => { + e.preventDefault(); + this.setState({ + modalUrlId: url.address, + modalUrlDomain: url.domain, + showModal: true, + }); + } } closeModal() { diff --git a/client/pages/_document.js b/client/pages/_document.js index 3851975..3b3a9ee 100644 --- a/client/pages/_document.js +++ b/client/pages/_document.js @@ -59,20 +59,8 @@ class AppDocument extends Document { }} /> -