From e70a80bf467f0519f9b43fbd77a36948a7c964dd Mon Sep 17 00:00:00 2001 From: Jonas L Date: Mon, 24 Jun 2019 00:00:00 +0000 Subject: [PATCH] Update sequelize --- package-lock.json | 144 ++++++++---------- package.json | 5 +- src/database/adddevicetoken.ts | 8 +- src/database/app.ts | 8 +- src/database/appactivity.ts | 8 +- src/database/authtoken.ts | 8 +- src/database/category.ts | 8 +- src/database/categoryapp.ts | 8 +- src/database/columns.ts | 20 +-- src/database/config.ts | 8 +- src/database/device.ts | 8 +- src/database/family.ts | 8 +- src/database/index.ts | 63 ++++---- src/database/maillogintoken.ts | 8 +- .../migrations/20181014-setup-tables.ts | 4 +- ...end-device-table-and-create-old-devices.ts | 6 +- .../migrations/20190113-mail-login-tokens.ts | 6 +- ...20190124-add-device-user-keep-signed-in.ts | 6 +- .../20190125-add-category-for-unused-apps.ts | 6 +- .../20190128-add-parent-categories.ts | 6 +- .../20190129-add-show-device-connected.ts | 6 +- ...0190207-add-used-time-items-last-update.ts | 6 +- ...-extend-tables-for-improved-user-system.ts | 6 +- ...0190218-add-reboot-manipulation-columns.ts | 6 +- .../20190224-add-mail-notification-flags.ts | 6 +- ...190304-add-block-all-notifications-flag.ts | 6 +- .../20190401-add-overlay-permission.ts | 6 +- .../migrations/20190402-add-as-permission.ts | 6 +- .../20190415-add-activity-level-blocking.ts | 6 +- ...0190603-add-time-warnings-and-android-q.ts | 6 +- .../migrations/20190624-add-config-table.ts | 6 +- src/database/olddevice.ts | 8 +- src/database/purchase.ts | 8 +- src/database/timelimitrule.ts | 8 +- src/database/types.ts | 2 +- src/database/usedtime.ts | 8 +- src/database/user.ts | 8 +- src/function/statusmessage/index.ts | 4 +- 38 files changed, 238 insertions(+), 220 deletions(-) diff --git a/package-lock.json b/package-lock.json index 87ece3f..bd7de7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -143,11 +143,6 @@ "@types/range-parser": "*" } }, - "@types/geojson": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", - "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==" - }, "@types/http-errors": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.6.1.tgz", @@ -419,6 +414,11 @@ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -1554,9 +1554,9 @@ } }, "dottie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.0.tgz", - "integrity": "sha1-2hkZgci41xPKARXViYzzl8Lw3dA=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.1.tgz", + "integrity": "sha512-ch5OQgvGDK2u8pSZeSYAQaV/lczImd7pMJ7BcEPXmnFVjy4yJIzP6CsODJUTH8mg1tyH1Z2abOiuJO3DjZ/GBw==" }, "duplexer": { "version": "0.1.1", @@ -2828,11 +2828,6 @@ "is-property": "^1.0.2" } }, - "generic-pool": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.4.2.tgz", - "integrity": "sha512-H7cUpwCQSiJmAHM4c/aFu6fUfrhWXW1ncyh8ftxEPMu6AiYkHw9K8br720TGPZJbk5eOH2bynjZD1yPvdDAmag==" - }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", @@ -4103,14 +4098,14 @@ } }, "moment": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", - "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, "moment-timezone": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.21.tgz", - "integrity": "sha512-j96bAh4otsgj3lKydm3K7kdtA3iKf2m6MY2iSYCzCm5a1zmHo1g+aK3068dDEeocLZQIS9kU8bsdQHLqEvgW0A==", + "version": "0.5.25", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.25.tgz", + "integrity": "sha512-DgEaTyN/z0HFaVcVbSyVCUU6HeFdnNC3vE4c9cgu2dgMTvjBUBdBzWfasTBmAW45u5OIMeCJtU8yNjM22DHucw==", "requires": { "moment": ">= 2.9.0" } @@ -5123,22 +5118,11 @@ "dev": true }, "retry-as-promised": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.2.tgz", - "integrity": "sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-3.2.0.tgz", + "integrity": "sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg==", "requires": { - "bluebird": "^3.4.6", - "debug": "^2.6.9" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } + "any-promise": "^1.3.0" } }, "right-align": { @@ -5278,29 +5262,52 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.38.0.tgz", - "integrity": "sha512-ZCcV2HuzU+03xunWgVeyXnPa/RYY5D2U/WUNpq+xF8VmDTLnSDsHl+pEwmiWrpZD7KdBqDczCeTgjToYyVzYQg==", + "version": "5.8.12", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.8.12.tgz", + "integrity": "sha512-TtgGgQx/+Nub/IdkV7hqEoozUnOYv28waB/l44fMk37Rr+4G3Inrn9opDb/g81zSuRUKsYGOucdWq0qLH+7ujA==", "requires": { "bluebird": "^3.5.0", "cls-bluebird": "^2.1.0", - "debug": "^3.1.0", - "depd": "^1.1.0", + "debug": "^4.1.1", "dottie": "^2.0.0", - "generic-pool": "^3.4.0", "inflection": "1.12.0", - "lodash": "^4.17.1", - "moment": "^2.20.0", - "moment-timezone": "^0.5.14", - "retry-as-promised": "^2.3.2", - "semver": "^5.5.0", - "terraformer-wkt-parser": "^1.1.2", + "lodash": "^4.17.11", + "moment": "^2.24.0", + "moment-timezone": "^0.5.21", + "retry-as-promised": "^3.1.0", + "semver": "^6.1.1", + "sequelize-pool": "^2.2.0", "toposort-class": "^1.0.1", "uuid": "^3.2.1", - "validator": "^10.4.0", - "wkx": "^0.4.1" + "validator": "^10.11.0", + "wkx": "^0.4.6" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.2.tgz", + "integrity": "sha512-z4PqiCpomGtWj8633oeAdXm1Kn1W++3T8epkZYnwiVgIYIJ0QHszhInYSJTYxebByQH7KVCEAn8R9duzZW2PhQ==" + } } }, + "sequelize-pool": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-2.2.0.tgz", + "integrity": "sha512-N/cYyxNHShfANGXAhHtMExjWNr+eYCS4/pF5fs5fvPYxn1VgUhEX8kDmVV5bNS0gZwt55fjU9Sgg48k3Dy/uMg==" + }, "serve-static": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", @@ -5365,9 +5372,9 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "shimmer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.0.tgz", - "integrity": "sha512-xTCx2vohXC2EWWDqY/zb4+5Mu28D+HYNSOuFzsyRDRvI/e1ICb69afwaUwfjr+25ZXldbOLyp+iDUZHq8UnTag==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" }, "signal-exit": { "version": "3.0.2", @@ -5740,23 +5747,6 @@ "execa": "^0.7.0" } }, - "terraformer": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.9.tgz", - "integrity": "sha512-YlmQ1fsMWTkKGDGibCRWgmLzrpDRUr63Q025LJ/taYQ6j1Yb8q9McKF7NBi6ACAyUXO6F/bl9w6v4MY307y5Ag==", - "requires": { - "@types/geojson": "^1.0.0" - } - }, - "terraformer-wkt-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.0.tgz", - "integrity": "sha512-QU3iA54St5lF8Za1jg1oj4NYc8sn5tCZ08aNSWDeGzrsaV48eZk1iAVWasxhNspYBoCqdHuoot1pUTUrE1AJ4w==", - "requires": { - "@types/geojson": "^1.0.0", - "terraformer": "~1.0.5" - } - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -5973,9 +5963,9 @@ "integrity": "sha1-0cIJOlT/ihn1jP+HfuqlTyJC04M=" }, "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz", + "integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA==", "dev": true }, "typescript-json-schema": { @@ -6288,9 +6278,9 @@ "integrity": "sha512-FXg2qXMzfAhZc0y2HzELNfUeiOjPr+52hU1DNBWiJJ2luXD+dD1R9NA48Ug5aj0ibbxroeGDc/RJv6ThiGgkDw==" }, "validator": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.4.0.tgz", - "integrity": "sha512-Q/wBy3LB1uOyssgNlXSRmaf22NxjvDNZM2MtIQ4jaEOAB61xsh1TQxsq1CgzUMBV1lDrVMogIh8GjG1DYW0zLg==" + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", + "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" }, "vary": { "version": "1.1.2", @@ -6449,9 +6439,9 @@ } }, "wkx": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.5.tgz", - "integrity": "sha512-01dloEcJZAJabLO5XdcRgqdKpmnxS0zIT02LhkdWOZX2Zs2tPM6hlZ4XG9tWaWur1Qd1OO4kJxUbe2+5BofvnA==", + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.7.tgz", + "integrity": "sha512-pHf546L96TK8RradLt1cWaIffstgv/zXZ14CGz5KnBs1AxBX0wm+IDphjJw0qrEqRv8P9W9CdTt8Z1unMRZ19A==", "requires": { "@types/node": "*" } diff --git a/package.json b/package.json index f29f9ad..25936d0 100644 --- a/package.json +++ b/package.json @@ -31,14 +31,13 @@ "@types/express": "^4.16.0", "@types/http-errors": "^1.6.1", "@types/lodash": "^4.14.116", - "@types/sequelize": "^4.27.24", "@types/socket.io": "^1.4.36", "@types/tokgen": "^1.0.0", "@types/umzug": "^2.2.0", "nodemon": "^1.18.3", "tslint": "^5.11.0", "tslint-config-standard": "^7.1.0", - "typescript": "^2.9.2", + "typescript": "^3.5.2", "typescript-json-schema": "^0.31.0" }, "dependencies": { @@ -57,7 +56,7 @@ "pg": "^7.8.0", "pg-hstore": "^2.3.2", "rate-limiter-flexible": "^0.21.2", - "sequelize": "^4.38.0", + "sequelize": "^5.8.12", "socket.io": "^2.1.1", "tokgen": "^1.0.0", "umzug": "^2.1.0" diff --git a/src/database/adddevicetoken.ts b/src/database/adddevicetoken.ts index 466612e..2ea6a13 100644 --- a/src/database/adddevicetoken.ts +++ b/src/database/adddevicetoken.ts @@ -26,8 +26,10 @@ export interface AddDeviceTokenAttributes { createdAt: string } -export type AddDeviceTokenInstance = Sequelize.Instance & AddDeviceTokenAttributes -export type AddDeviceTokenModel = Sequelize.Model +export type AddDeviceTokenModel = Sequelize.Model & AddDeviceTokenAttributes +export type AddDeviceTokenModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): AddDeviceTokenModel; +} export const attributes: SequelizeAttributes = { token: { @@ -39,4 +41,4 @@ export const attributes: SequelizeAttributes = { createdAt: { ...timestampColumn } } -export const createAddDeviceTokenModel = (sequelize: Sequelize.Sequelize): AddDeviceTokenModel => sequelize.define('AddDeviceToken', attributes) +export const createAddDeviceTokenModel = (sequelize: Sequelize.Sequelize): AddDeviceTokenModelStatic => sequelize.define('AddDeviceToken', attributes) diff --git a/src/database/app.ts b/src/database/app.ts index 295fb11..b928294 100644 --- a/src/database/app.ts +++ b/src/database/app.ts @@ -29,8 +29,10 @@ export interface AppAttributes { recommendation: AppRecommendation } -export type AppInstance = Sequelize.Instance & AppAttributes -export type AppModel = Sequelize.Model +export type AppModel = Sequelize.Model & AppAttributes +export type AppModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): AppModel; +} export const attributes: SequelizeAttributes = { familyId: { @@ -54,4 +56,4 @@ export const attributes: SequelizeAttributes = { recommendation: createEnumColumn(appRecommendationValues) } -export const createAppModel = (sequelize: Sequelize.Sequelize): AppModel => sequelize.define('App', attributes) +export const createAppModel = (sequelize: Sequelize.Sequelize): AppModelStatic => sequelize.define('App', attributes) diff --git a/src/database/appactivity.ts b/src/database/appactivity.ts index 515a0fb..64c9aca 100644 --- a/src/database/appactivity.ts +++ b/src/database/appactivity.ts @@ -27,8 +27,10 @@ export interface AppActivityAttributes { title: string } -export type AppActivityInstance = Sequelize.Instance & AppActivityAttributes -export type AppActivityModel = Sequelize.Model +export type AppActivityModel = Sequelize.Model & AppActivityAttributes +export type AppActivityModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): AppActivityModel; +} export const attributes: SequelizeAttributes = { familyId: { @@ -58,4 +60,4 @@ export const attributes: SequelizeAttributes = { title: { ...optionalLabelColumn } } -export const createAppActivityModel = (sequelize: Sequelize.Sequelize): AppActivityModel => sequelize.define('AppActivity', attributes) +export const createAppActivityModel = (sequelize: Sequelize.Sequelize): AppActivityModelStatic => sequelize.define('AppActivity', attributes) diff --git a/src/database/authtoken.ts b/src/database/authtoken.ts index a11195b..0cef023 100644 --- a/src/database/authtoken.ts +++ b/src/database/authtoken.ts @@ -25,8 +25,10 @@ export interface AuthTokenAttributes { createdAt: string } -export type AuthTokenInstance = Sequelize.Instance & AuthTokenAttributes -export type AuthTokenModel = Sequelize.Model +export type AuthTokenModel = Sequelize.Model & AuthTokenAttributes +export type AuthTokenModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): AuthTokenModel; +} export const attributes: SequelizeAttributes = { token: { @@ -43,4 +45,4 @@ export const attributes: SequelizeAttributes = { createdAt: { ...timestampColumn } } -export const createAuthtokenModel = (sequelize: Sequelize.Sequelize): AuthTokenModel => sequelize.define('AuthToken', attributes) +export const createAuthtokenModel = (sequelize: Sequelize.Sequelize): AuthTokenModelStatic => sequelize.define('AuthToken', attributes) diff --git a/src/database/category.ts b/src/database/category.ts index 55f510b..392797d 100644 --- a/src/database/category.ts +++ b/src/database/category.ts @@ -51,8 +51,10 @@ export interface CategoryAttributesVersion4 { export type CategoryAttributes = CategoryAttributesVersion1 & CategoryAttributesVersion2 & CategoryAttributesVersion3 & CategoryAttributesVersion4 -export type CategoryInstance = Sequelize.Instance & CategoryAttributes -export type CategoryModel = Sequelize.Model +export type CategoryModel = Sequelize.Model & CategoryAttributes +export type CategoryModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): CategoryModel; +} export const attributesVersion1: SequelizeAttributes = { familyId: { @@ -124,4 +126,4 @@ export const attributes: SequelizeAttributes = { ...attributesVersion4 } -export const createCategoryModel = (sequelize: Sequelize.Sequelize): CategoryModel => sequelize.define('Category', attributes) +export const createCategoryModel = (sequelize: Sequelize.Sequelize): CategoryModelStatic => sequelize.define('Category', attributes) diff --git a/src/database/categoryapp.ts b/src/database/categoryapp.ts index bc88c1b..58b51c1 100644 --- a/src/database/categoryapp.ts +++ b/src/database/categoryapp.ts @@ -25,8 +25,10 @@ export interface CategoryAppAttributes { packageName: string } -export type CategoryAppInstance = Sequelize.Instance & CategoryAppAttributes -export type CategoryAppModel = Sequelize.Model +export type CategoryAppModel = Sequelize.Model & CategoryAppAttributes +export type CategoryAppModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): CategoryAppModel; +} export const attributes: SequelizeAttributes = { familyId: { @@ -47,4 +49,4 @@ export const attributes: SequelizeAttributes = { } } -export const createCategoryAppModel = (sequelize: Sequelize.Sequelize): CategoryAppModel => sequelize.define('CategoryApp', attributes) +export const createCategoryAppModel = (sequelize: Sequelize.Sequelize): CategoryAppModelStatic => sequelize.define('CategoryApp', attributes) diff --git a/src/database/columns.ts b/src/database/columns.ts index 93f2616..76efc48 100644 --- a/src/database/columns.ts +++ b/src/database/columns.ts @@ -17,7 +17,7 @@ import * as Sequelize from 'sequelize' -export const familyIdColumn: Sequelize.DefineAttributeColumnOptions = { +export const familyIdColumn: Sequelize.ModelAttributeColumnOptions = { type: Sequelize.STRING(10), allowNull: false, validate: { @@ -26,7 +26,7 @@ export const familyIdColumn: Sequelize.DefineAttributeColumnOptions = { } } -export const idWithinFamilyColumn: Sequelize.DefineAttributeColumnOptions = { +export const idWithinFamilyColumn: Sequelize.ModelAttributeColumnOptions = { type: Sequelize.STRING(6), allowNull: false, validate: { @@ -35,7 +35,7 @@ export const idWithinFamilyColumn: Sequelize.DefineAttributeColumnOptions = { } } -export const optionalIdWithinFamilyColumn: Sequelize.DefineAttributeColumnOptions = { +export const optionalIdWithinFamilyColumn: Sequelize.ModelAttributeColumnOptions = { type: Sequelize.STRING(6), allowNull: false, validate: { @@ -43,7 +43,7 @@ export const optionalIdWithinFamilyColumn: Sequelize.DefineAttributeColumnOption } } -export const versionColumn: Sequelize.DefineAttributeColumnOptions = { +export const versionColumn: Sequelize.ModelAttributeColumnOptions = { type: Sequelize.STRING(4), allowNull: false, validate: { @@ -51,7 +51,7 @@ export const versionColumn: Sequelize.DefineAttributeColumnOptions = { is: /^[a-zA-Z0-9]{4}$/ } } -export const labelColumn: Sequelize.DefineAttributeColumnOptions = { +export const labelColumn: Sequelize.ModelAttributeColumnOptions = { type: Sequelize.STRING, allowNull: false, validate: { @@ -59,12 +59,12 @@ export const labelColumn: Sequelize.DefineAttributeColumnOptions = { } } -export const optionalLabelColumn: Sequelize.DefineAttributeColumnOptions = { +export const optionalLabelColumn: Sequelize.ModelAttributeColumnOptions = { type: Sequelize.STRING, allowNull: false } -export const createEnumColumn = (possibleValues: Array): Sequelize.DefineAttributeColumnOptions => ({ +export const createEnumColumn = (possibleValues: Array): Sequelize.ModelAttributeColumnOptions => ({ type: Sequelize.STRING, allowNull: false, validate: { @@ -74,7 +74,7 @@ export const createEnumColumn = (possibleValues: Array): Sequelize.Defin }) // warning: this results in an string field -export const timestampColumn: Sequelize.DefineAttributeColumnOptions = { +export const timestampColumn: Sequelize.ModelAttributeColumnOptions = { type: Sequelize.BIGINT, allowNull: false, validate: { @@ -82,12 +82,12 @@ export const timestampColumn: Sequelize.DefineAttributeColumnOptions = { } } -export const booleanColumn: Sequelize.DefineAttributeColumnOptions = { +export const booleanColumn: Sequelize.ModelAttributeColumnOptions = { type: Sequelize.BOOLEAN, allowNull: false } -export const authTokenColumn: Sequelize.DefineAttributeColumnOptions = { +export const authTokenColumn: Sequelize.ModelAttributeColumnOptions = { type: Sequelize.STRING(32), allowNull: false, validate: { diff --git a/src/database/config.ts b/src/database/config.ts index 2787592..e925b69 100644 --- a/src/database/config.ts +++ b/src/database/config.ts @@ -23,8 +23,10 @@ export interface ConfigAttributes { value: string | null } -export type ConfigInstance = Sequelize.Instance & ConfigAttributes -export type ConfigModel = Sequelize.Model +export type ConfigModel = Sequelize.Model & ConfigAttributes +export type ConfigModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): ConfigModel; +} export const attributes: SequelizeAttributes = { id: { @@ -41,7 +43,7 @@ export const attributes: SequelizeAttributes = { } } -export const createConfigModel = (sequelize: Sequelize.Sequelize): ConfigModel => sequelize.define('Config', attributes) +export const createConfigModel = (sequelize: Sequelize.Sequelize): ConfigModelStatic => sequelize.define('Config', attributes) export const configItemIds = { statusMessage: 'status_message' diff --git a/src/database/device.ts b/src/database/device.ts index 52b7527..3819495 100644 --- a/src/database/device.ts +++ b/src/database/device.ts @@ -93,8 +93,10 @@ export type DeviceAttributes = DeviceAttributesVersion1 & DeviceAttributesVersio DeviceAttributesVersion6 & DeviceAttributesVersion7 & DeviceAttributesVersion8 & DeviceAttributesVersion9 & DeviceAttributesVersion10 -export type DeviceInstance = Sequelize.Instance & DeviceAttributes -export type DeviceModel = Sequelize.Model +export type DeviceModel = Sequelize.Model & DeviceAttributes +export type DeviceModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): DeviceModel; +} export const attributesVersion1: SequelizeAttributes = { familyId: { @@ -244,7 +246,7 @@ export const attributes: SequelizeAttributes = { ...attributesVersion10 } -export const createDeviceModel = (sequelize: Sequelize.Sequelize): DeviceModel => sequelize.define('Device', attributes) +export const createDeviceModel = (sequelize: Sequelize.Sequelize): DeviceModelStatic => sequelize.define('Device', attributes) export const hasDeviceManipulation = (device: DeviceAttributes) => { const manipulationOfProtectionLevel = device.currentProtectionLevel !== device.highestProtectionLevel const manipulationOfUsageStats = device.currentUsageStatsPermission !== device.highestUsageStatsPermission diff --git a/src/database/family.ts b/src/database/family.ts index 82dbdaa..498cd75 100644 --- a/src/database/family.ts +++ b/src/database/family.ts @@ -29,8 +29,10 @@ export interface FamilyAttributes { hasFullVersion: boolean } -export type FamilyInstance = Sequelize.Instance & FamilyAttributes -export type FamilyModel = Sequelize.Model +export type FamilyModel = Sequelize.Model & FamilyAttributes +export type FamilyModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): FamilyModel; +} export const attributes: SequelizeAttributes = { familyId: { @@ -45,4 +47,4 @@ export const attributes: SequelizeAttributes = { hasFullVersion: { ...booleanColumn } } -export const createFamilyModel = (sequelize: Sequelize.Sequelize): FamilyModel => sequelize.define('Family', attributes) +export const createFamilyModel = (sequelize: Sequelize.Sequelize): FamilyModelStatic => sequelize.define('Family', attributes) diff --git a/src/database/index.ts b/src/database/index.ts index 6ff6863..36adceb 100644 --- a/src/database/index.ts +++ b/src/database/index.ts @@ -16,39 +16,39 @@ */ import * as Sequelize from 'sequelize' -import { AddDeviceTokenModel, createAddDeviceTokenModel } from './adddevicetoken' -import { AppModel, createAppModel } from './app' -import { AppActivityModel, createAppActivityModel } from './appactivity' -import { AuthTokenModel, createAuthtokenModel } from './authtoken' -import { CategoryModel, createCategoryModel } from './category' -import { CategoryAppModel, createCategoryAppModel } from './categoryapp' -import { ConfigModel, createConfigModel } from './config' -import { createDeviceModel, DeviceModel } from './device' -import { createFamilyModel, FamilyModel } from './family' -import { createMailLoginTokenModel, MailLoginTokenModel } from './maillogintoken' +import { AddDeviceTokenModelStatic, createAddDeviceTokenModel } from './adddevicetoken' +import { AppModelStatic, createAppModel } from './app' +import { AppActivityModelStatic, createAppActivityModel } from './appactivity' +import { AuthTokenModelStatic, createAuthtokenModel } from './authtoken' +import { CategoryModelStatic, createCategoryModel } from './category' +import { CategoryAppModelStatic, createCategoryAppModel } from './categoryapp' +import { ConfigModelStatic, createConfigModel } from './config' +import { createDeviceModel, DeviceModelStatic } from './device' +import { createFamilyModel, FamilyModelStatic } from './family' +import { createMailLoginTokenModel, MailLoginTokenModelStatic } from './maillogintoken' import { createUmzug } from './migration/umzug' -import { createOldDeviceModel, OldDeviceModel } from './olddevice' -import { createPurchaseModel, PurchaseModel } from './purchase' -import { createTimelimitRuleModel, TimelimitRuleModel } from './timelimitrule' -import { createUsedTimeModel, UsedTimeModel } from './usedtime' -import { createUserModel, UserModel } from './user' +import { createOldDeviceModel, OldDeviceModelStatic } from './olddevice' +import { createPurchaseModel, PurchaseModelStatic } from './purchase' +import { createTimelimitRuleModel, TimelimitRuleModelStatic } from './timelimitrule' +import { createUsedTimeModel, UsedTimeModelStatic } from './usedtime' +import { createUserModel, UserModelStatic } from './user' export interface Database { - addDeviceToken: AddDeviceTokenModel - authtoken: AuthTokenModel - app: AppModel - appActivity: AppActivityModel - category: CategoryModel - categoryApp: CategoryAppModel - config: ConfigModel - device: DeviceModel - family: FamilyModel - mailLoginToken: MailLoginTokenModel - oldDevice: OldDeviceModel - purchase: PurchaseModel - timelimitRule: TimelimitRuleModel - usedTime: UsedTimeModel - user: UserModel + addDeviceToken: AddDeviceTokenModelStatic + authtoken: AuthTokenModelStatic + app: AppModelStatic + appActivity: AppActivityModelStatic + category: CategoryModelStatic + categoryApp: CategoryAppModelStatic + config: ConfigModelStatic + device: DeviceModelStatic + family: FamilyModelStatic + mailLoginToken: MailLoginTokenModelStatic + oldDevice: OldDeviceModelStatic + purchase: PurchaseModelStatic + timelimitRule: TimelimitRuleModelStatic + usedTime: UsedTimeModelStatic + user: UserModelStatic transaction: (autoCallback: (t: Sequelize.Transaction) => Promise) => Promise } @@ -73,11 +73,10 @@ const createDatabase = (sequelize: Sequelize.Sequelize): Database => ({ }, autoCallback) as any) as Promise }) -export const sequelize = new Sequelize(process.env.DATABASE_URL || 'sqlite://test.db', { +export const sequelize = new Sequelize.Sequelize(process.env.DATABASE_URL || 'sqlite://test.db', { define: { timestamps: false }, - operatorsAliases: false, logging: false }) diff --git a/src/database/maillogintoken.ts b/src/database/maillogintoken.ts index c0b7af1..e8f4acb 100644 --- a/src/database/maillogintoken.ts +++ b/src/database/maillogintoken.ts @@ -27,8 +27,10 @@ export interface MailLoginTokenAttributes { remainingAttempts: number } -export type MailLoginTokenInstance = Sequelize.Instance & MailLoginTokenAttributes -export type MailLoginTokenModel = Sequelize.Model +export type MailLoginTokenModel = Sequelize.Model & MailLoginTokenAttributes +export type MailLoginTokenModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): MailLoginTokenModel; +} export const attributes: SequelizeAttributes = { mailLoginToken: { @@ -59,4 +61,4 @@ export const attributes: SequelizeAttributes = { } } -export const createMailLoginTokenModel = (sequelize: Sequelize.Sequelize): MailLoginTokenModel => sequelize.define('MailLoginToken', attributes) +export const createMailLoginTokenModel = (sequelize: Sequelize.Sequelize): MailLoginTokenModelStatic => sequelize.define('MailLoginToken', attributes) diff --git a/src/database/migration/migrations/20181014-setup-tables.ts b/src/database/migration/migrations/20181014-setup-tables.ts index f31bfcc..b1a1d91 100644 --- a/src/database/migration/migrations/20181014-setup-tables.ts +++ b/src/database/migration/migrations/20181014-setup-tables.ts @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributes as addDeviceTokenAttributes } from '../../adddevicetoken' import { attributes as appAttributes } from '../../app' import { attributes as authTokenAttributes } from '../../authtoken' @@ -30,7 +30,7 @@ import { attributesVersion1 as userAttributes } from '../../user' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.createTable('AddDeviceTokens', addDeviceTokenAttributes, { transaction }) await queryInterface.createTable('Apps', appAttributes, { transaction }) diff --git a/src/database/migration/migrations/20181022-extend-device-table-and-create-old-devices.ts b/src/database/migration/migrations/20181022-extend-device-table-and-create-old-devices.ts index fcead0e..4f0fbdf 100644 --- a/src/database/migration/migrations/20181022-extend-device-table-and-create-old-devices.ts +++ b/src/database/migration/migrations/20181022-extend-device-table-and-create-old-devices.ts @@ -15,13 +15,13 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributesVersion2 } from '../../device' import { attributes as oldDeviceAttributes } from '../../olddevice' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.addColumn('Devices', 'lastConnectivity', { ...attributesVersion2.lastConnectivity @@ -47,7 +47,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.removeColumn('Devices', 'lastConnectivity', { transaction }) await queryInterface.removeColumn('Devices', 'notSeenForLongTime', { transaction }) diff --git a/src/database/migration/migrations/20190113-mail-login-tokens.ts b/src/database/migration/migrations/20190113-mail-login-tokens.ts index cf16bc7..0f122ab 100644 --- a/src/database/migration/migrations/20190113-mail-login-tokens.ts +++ b/src/database/migration/migrations/20190113-mail-login-tokens.ts @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributes as mailLoginTokenAttributes } from '../../maillogintoken' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.createTable('MailLoginTokens', mailLoginTokenAttributes, { transaction }) }) @@ -28,7 +28,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.dropTable('MailLoginTokens', { transaction }) }) diff --git a/src/database/migration/migrations/20190124-add-device-user-keep-signed-in.ts b/src/database/migration/migrations/20190124-add-device-user-keep-signed-in.ts index e189dee..b970baf 100644 --- a/src/database/migration/migrations/20190124-add-device-user-keep-signed-in.ts +++ b/src/database/migration/migrations/20190124-add-device-user-keep-signed-in.ts @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributesVersion3 } from '../../device' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.addColumn('Devices', 'isUserKeptSignedIn', { ...attributesVersion3.isUserKeptSignedIn @@ -32,7 +32,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.removeColumn('Devices', 'isUserKeptSignedIn', { transaction }) }) diff --git a/src/database/migration/migrations/20190125-add-category-for-unused-apps.ts b/src/database/migration/migrations/20190125-add-category-for-unused-apps.ts index 67c2ea6..1ac8d28 100644 --- a/src/database/migration/migrations/20190125-add-category-for-unused-apps.ts +++ b/src/database/migration/migrations/20190125-add-category-for-unused-apps.ts @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributesVersion2 } from '../../user' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.addColumn('Users', 'categoryForNotAssignedApps', { ...attributesVersion2.categoryForNotAssignedApps @@ -32,7 +32,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.removeColumn('Users', 'categoryForNotAssignedApps', { transaction }) }) diff --git a/src/database/migration/migrations/20190128-add-parent-categories.ts b/src/database/migration/migrations/20190128-add-parent-categories.ts index 27cfa77..6268a28 100644 --- a/src/database/migration/migrations/20190128-add-parent-categories.ts +++ b/src/database/migration/migrations/20190128-add-parent-categories.ts @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributesVersion2 } from '../../category' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.addColumn('Categories', 'parentCategoryId', { ...attributesVersion2.parentCategoryId @@ -32,7 +32,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.removeColumn('Categories', 'parentCategoryId', { transaction }) }) diff --git a/src/database/migration/migrations/20190129-add-show-device-connected.ts b/src/database/migration/migrations/20190129-add-show-device-connected.ts index e9ce27e..ac16e4c 100644 --- a/src/database/migration/migrations/20190129-add-show-device-connected.ts +++ b/src/database/migration/migrations/20190129-add-show-device-connected.ts @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributesVersion4 } from '../../device' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.addColumn('Devices', 'showDeviceConnected', { ...attributesVersion4.showDeviceConnected @@ -32,7 +32,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.removeColumn('Devices', 'showDeviceConnected', { transaction }) }) diff --git a/src/database/migration/migrations/20190207-add-used-time-items-last-update.ts b/src/database/migration/migrations/20190207-add-used-time-items-last-update.ts index a5ec28c..d1c104c 100644 --- a/src/database/migration/migrations/20190207-add-used-time-items-last-update.ts +++ b/src/database/migration/migrations/20190207-add-used-time-items-last-update.ts @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributesVersion2 } from '../../usedtime' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.addColumn('UsedTimes', 'lastUpdate', { ...attributesVersion2.lastUpdate @@ -34,7 +34,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.removeIndex('UsedTimes', ['lastUpdate'], { transaction }) await queryInterface.removeColumn('UsedTimes', 'lastUpdate', { transaction }) diff --git a/src/database/migration/migrations/20190210-extend-tables-for-improved-user-system.ts b/src/database/migration/migrations/20190210-extend-tables-for-improved-user-system.ts index 06ec219..ead9718 100644 --- a/src/database/migration/migrations/20190210-extend-tables-for-improved-user-system.ts +++ b/src/database/migration/migrations/20190210-extend-tables-for-improved-user-system.ts @@ -15,13 +15,13 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributesVersion5 as deviceAttributes } from '../../device' import { attributesVersion3 as userAttributes } from '../../user' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { // users await queryInterface.addColumn('Users', 'relaxPrimaryDeviceRule', { @@ -41,7 +41,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { // users await queryInterface.removeColumn('Users', 'relaxPrimaryDeviceRule', { transaction }) diff --git a/src/database/migration/migrations/20190218-add-reboot-manipulation-columns.ts b/src/database/migration/migrations/20190218-add-reboot-manipulation-columns.ts index 233cf76..0c99b17 100644 --- a/src/database/migration/migrations/20190218-add-reboot-manipulation-columns.ts +++ b/src/database/migration/migrations/20190218-add-reboot-manipulation-columns.ts @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributesVersion6 } from '../../device' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.addColumn('Devices', 'considerRebootManipulation', { ...attributesVersion6.considerRebootManipulation @@ -38,7 +38,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.removeColumn('Devices', 'considerRebootManipulation', { transaction }) await queryInterface.removeColumn('Devices', 'didReboot', { transaction }) diff --git a/src/database/migration/migrations/20190224-add-mail-notification-flags.ts b/src/database/migration/migrations/20190224-add-mail-notification-flags.ts index 76d1a4f..98df72a 100644 --- a/src/database/migration/migrations/20190224-add-mail-notification-flags.ts +++ b/src/database/migration/migrations/20190224-add-mail-notification-flags.ts @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributesVersion4 as userAttributes } from '../../user' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.addColumn('Users', 'mailNotificationFlags', { ...userAttributes.mailNotificationFlags @@ -30,7 +30,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.removeColumn('Users', 'mailNotificationFlags', { transaction }) }) diff --git a/src/database/migration/migrations/20190304-add-block-all-notifications-flag.ts b/src/database/migration/migrations/20190304-add-block-all-notifications-flag.ts index cde7086..4b0a4f2 100644 --- a/src/database/migration/migrations/20190304-add-block-all-notifications-flag.ts +++ b/src/database/migration/migrations/20190304-add-block-all-notifications-flag.ts @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributesVersion3 as categoryAttributes } from '../../category' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.addColumn('Categories', 'blockAllNotifications', { ...categoryAttributes.blockAllNotifications @@ -30,7 +30,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.removeColumn('Categories', 'blockAllNotifications', { transaction }) }) diff --git a/src/database/migration/migrations/20190401-add-overlay-permission.ts b/src/database/migration/migrations/20190401-add-overlay-permission.ts index be9d973..f452621 100644 --- a/src/database/migration/migrations/20190401-add-overlay-permission.ts +++ b/src/database/migration/migrations/20190401-add-overlay-permission.ts @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributesVersion7 } from '../../device' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.addColumn('Devices', 'currentOverlayPermission', { ...attributesVersion7.currentOverlayPermission @@ -38,7 +38,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.removeColumn('Devices', 'currentOverlayPermission', { transaction }) await queryInterface.removeColumn('Devices', 'highestOverlayPermission', { transaction }) diff --git a/src/database/migration/migrations/20190402-add-as-permission.ts b/src/database/migration/migrations/20190402-add-as-permission.ts index 7cab24b..37a22c0 100644 --- a/src/database/migration/migrations/20190402-add-as-permission.ts +++ b/src/database/migration/migrations/20190402-add-as-permission.ts @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributesVersion8 } from '../../device' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.addColumn('Devices', 'asEnabled', { ...attributesVersion8.asEnabled @@ -38,7 +38,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.removeColumn('Devices', 'asEnabled', { transaction }) await queryInterface.removeColumn('Devices', 'wasAsEnabled', { transaction }) diff --git a/src/database/migration/migrations/20190415-add-activity-level-blocking.ts b/src/database/migration/migrations/20190415-add-activity-level-blocking.ts index f8c3404..492fcfc 100644 --- a/src/database/migration/migrations/20190415-add-activity-level-blocking.ts +++ b/src/database/migration/migrations/20190415-add-activity-level-blocking.ts @@ -15,13 +15,13 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributes as appActivityAttributes } from '../../appactivity' import { attributesVersion9 as deviceAttributes } from '../../device' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.createTable('AppActivities', appActivityAttributes, { transaction }) await queryInterface.addColumn('Devices', 'activityLevelBlocking', { @@ -34,7 +34,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.dropTable('AppActivities', { transaction }) await queryInterface.removeColumn('Devices', 'activityLevelBlocking', { transaction }) diff --git a/src/database/migration/migrations/20190603-add-time-warnings-and-android-q.ts b/src/database/migration/migrations/20190603-add-time-warnings-and-android-q.ts index 4153d82..99499ab 100644 --- a/src/database/migration/migrations/20190603-add-time-warnings-and-android-q.ts +++ b/src/database/migration/migrations/20190603-add-time-warnings-and-android-q.ts @@ -15,13 +15,13 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributes as categoryAttributes } from '../../category' import { attributesVersion10 as deviceAttributes } from '../../device' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.addColumn('Devices', 'isQorLater', { ...deviceAttributes.isQorLater @@ -39,7 +39,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.removeColumn('Devices', 'isQorLater', { transaction }) await queryInterface.removeColumn('Categories', 'timeWarningFlags', { transaction }) diff --git a/src/database/migration/migrations/20190624-add-config-table.ts b/src/database/migration/migrations/20190624-add-config-table.ts index 2593132..4f6831b 100644 --- a/src/database/migration/migrations/20190624-add-config-table.ts +++ b/src/database/migration/migrations/20190624-add-config-table.ts @@ -15,12 +15,12 @@ * along with this program. If not, see . */ -import { QueryInterface, Sequelize } from 'sequelize' +import { QueryInterface, Sequelize, Transaction } from 'sequelize' import { attributes as configAttributes } from '../../config' export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.createTable('Configs', configAttributes, { transaction }) }) @@ -28,7 +28,7 @@ export async function up (queryInterface: QueryInterface, sequelize: Sequelize) export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { await sequelize.transaction({ - type: 'EXCLUSIVE' + type: Transaction.TYPES.EXCLUSIVE }, async (transaction) => { await queryInterface.dropTable('Configs', { transaction }) }) diff --git a/src/database/olddevice.ts b/src/database/olddevice.ts index b221e3b..6154602 100644 --- a/src/database/olddevice.ts +++ b/src/database/olddevice.ts @@ -23,8 +23,10 @@ export interface OldDeviceAttributes { deviceAuthToken: string } -export type OldDeviceInstance = Sequelize.Instance & OldDeviceAttributes -export type OldDeviceModel = Sequelize.Model +export type OldDeviceModel = Sequelize.Model & OldDeviceAttributes +export type OldDeviceModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): OldDeviceModel; +} export const attributes: SequelizeAttributes = { deviceAuthToken: { @@ -33,4 +35,4 @@ export const attributes: SequelizeAttributes = { } } -export const createOldDeviceModel = (sequelize: Sequelize.Sequelize): OldDeviceModel => sequelize.define('OldDevice', attributes) +export const createOldDeviceModel = (sequelize: Sequelize.Sequelize): OldDeviceModelStatic => sequelize.define('OldDevice', attributes) diff --git a/src/database/purchase.ts b/src/database/purchase.ts index 4c70747..63155fc 100644 --- a/src/database/purchase.ts +++ b/src/database/purchase.ts @@ -29,8 +29,10 @@ export interface PurchaseAttributes { newFullVersionEndTime: string } -export type PurchaseInstance = Sequelize.Instance & PurchaseAttributes -export type PurchaseModel = Sequelize.Model +export type PurchaseModel = Sequelize.Model & PurchaseAttributes +export type PurchaseModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): PurchaseModel; +} export const attributes: SequelizeAttributes = { familyId: { ...familyIdColumn }, @@ -48,4 +50,4 @@ export const attributes: SequelizeAttributes = { newFullVersionEndTime: timestampColumn } -export const createPurchaseModel = (sequelize: Sequelize.Sequelize): PurchaseModel => sequelize.define('Purchase', attributes) +export const createPurchaseModel = (sequelize: Sequelize.Sequelize): PurchaseModelStatic => sequelize.define('Purchase', attributes) diff --git a/src/database/timelimitrule.ts b/src/database/timelimitrule.ts index 1cfcd39..af9a2b4 100644 --- a/src/database/timelimitrule.ts +++ b/src/database/timelimitrule.ts @@ -28,8 +28,10 @@ export interface TimelimitRuleAttributes { maximumTimeInMillis: number } -export type TimelimitRuleInstance = Sequelize.Instance & TimelimitRuleAttributes -export type TimelimitRuleModel = Sequelize.Model +export type TimelimitRuleModel = Sequelize.Model & TimelimitRuleAttributes +export type TimelimitRuleModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): TimelimitRuleModel; +} export const attributes: SequelizeAttributes = { familyId: { @@ -59,4 +61,4 @@ export const attributes: SequelizeAttributes = { } } -export const createTimelimitRuleModel = (sequelize: Sequelize.Sequelize): TimelimitRuleModel => sequelize.define('TimelimitRule', attributes) +export const createTimelimitRuleModel = (sequelize: Sequelize.Sequelize): TimelimitRuleModelStatic => sequelize.define('TimelimitRule', attributes) diff --git a/src/database/types.ts b/src/database/types.ts index 4a02e62..13690a1 100644 --- a/src/database/types.ts +++ b/src/database/types.ts @@ -18,5 +18,5 @@ import * as Sequelize from 'sequelize' export type SequelizeAttributes = { - [P in keyof T]: Sequelize.DefineAttributeColumnOptions; + [P in keyof T]: Sequelize.ModelAttributeColumnOptions; } diff --git a/src/database/usedtime.ts b/src/database/usedtime.ts index 010a402..81beb44 100644 --- a/src/database/usedtime.ts +++ b/src/database/usedtime.ts @@ -32,8 +32,10 @@ export interface UsedTimeAttributesVersion2 { export type UsedTimeAttributes = UsedTimeAttributesVersion1 & UsedTimeAttributesVersion2 -export type UsedTimeInstance = Sequelize.Instance & UsedTimeAttributes -export type UsedTimeModel = Sequelize.Model +export type UsedTimeModel = Sequelize.Model & UsedTimeAttributes +export type UsedTimeModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): UsedTimeModel; +} export const attributesVersion1: SequelizeAttributes = { familyId: { @@ -73,4 +75,4 @@ export const attributes = { ...attributesVersion2 } -export const createUsedTimeModel = (sequelize: Sequelize.Sequelize): UsedTimeModel => sequelize.define('UsedTime', attributes) +export const createUsedTimeModel = (sequelize: Sequelize.Sequelize): UsedTimeModelStatic => sequelize.define('UsedTime', attributes) diff --git a/src/database/user.ts b/src/database/user.ts index ce19333..b5fffd9 100644 --- a/src/database/user.ts +++ b/src/database/user.ts @@ -52,8 +52,10 @@ export interface UserAttributesVersion4 { export type UserAttributes = UserAttributesVersion1 & UserAttributesVersion2 & UserAttributesVersion3 & UserAttributesVersion4 -export type UserInstance = Sequelize.Instance & UserAttributes -export type UserModel = Sequelize.Model +export type UserModel = Sequelize.Model & UserAttributes +export type UserModelStatic = typeof Sequelize.Model & { + new (values?: object, options?: Sequelize.BuildOptions): UserModel; +} export const attributesVersion1: SequelizeAttributes = { familyId: { @@ -128,4 +130,4 @@ export const attributes: SequelizeAttributes = { ...attributesVersion4 } -export const createUserModel = (sequelize: Sequelize.Sequelize): UserModel => sequelize.define('User', attributes) +export const createUserModel = (sequelize: Sequelize.Sequelize): UserModelStatic => sequelize.define('User', attributes) diff --git a/src/function/statusmessage/index.ts b/src/function/statusmessage/index.ts index 0bc6eda..87eefca 100644 --- a/src/function/statusmessage/index.ts +++ b/src/function/statusmessage/index.ts @@ -23,7 +23,7 @@ export const getStatusMessage = async ({ database, transaction }: { database: Database transaction?: Sequelize.Transaction }) => { - const currentStatusMessageItem = await database.config.findById(configItemIds.statusMessage, { transaction }) + const currentStatusMessageItem = await database.config.findByPk(configItemIds.statusMessage, { transaction }) const currentStatusMessage = (currentStatusMessageItem ? currentStatusMessageItem.value : null) || '' return currentStatusMessage @@ -40,7 +40,7 @@ export const setStatusMessage = async ({ database, newStatusMessage }: { } }) } else { - await database.config.insertOrUpdate({ + await database.config.upsert({ id: configItemIds.statusMessage, value: newStatusMessage })