Initial commit

This commit is contained in:
Jonas L
2019-02-25 00:00:00 +00:00
commit 22c372e246
200 changed files with 27781 additions and 0 deletions
+85
View File
@@ -0,0 +1,85 @@
/*
* server component for the TimeLimit App
* Copyright (C) 2019 Jonas Lochmann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import * as Sequelize from 'sequelize'
import { Database } from '../database'
import { notifyClientsAboutChanges } from '../function/websocket'
import { WebsocketApi } from '../websocket'
export function initDeleteDeprecatedPurchasesWorker ({ database, websocket }: {
database: Database
websocket: WebsocketApi
}) {
function doWorkSafe () {
deleteDeprecatedPurchases({ database, websocket }).catch((ex) => {
console.warn('error deleting deprecated purchases', ex)
})
}
setTimeout(() => {
doWorkSafe()
setInterval(() => {
doWorkSafe()
}, 1000 * 60 * 60 /* every hour */)
}, 1000 * 60 * 5 /* after 5 minutes */)
}
async function deleteDeprecatedPurchases ({ database, websocket }: {
database: Database
websocket: WebsocketApi
}) {
const { affectedFamilyIds } = await database.transaction(async (transaction) => {
const affectedFamilyIds = await database.family.findAll({
where: {
hasFullVersion: true,
fullVersionUntil: {
[Sequelize.Op.lt]: Date.now().toString(10)
}
},
attributes: ['familyId'],
transaction,
lock: Sequelize.Transaction.LOCK.UPDATE,
limit: 100
}).map((item) => item.familyId)
await database.family.update({
hasFullVersion: false
}, {
where: {
familyid: {
[Sequelize.Op.in]: affectedFamilyIds
}
},
transaction
})
return { affectedFamilyIds }
})
for (let i = 0; i < affectedFamilyIds.length; i++) {
const familyId = affectedFamilyIds[i]
await notifyClientsAboutChanges({
familyId,
sourceDeviceId: null,
database,
websocket,
isImportant: true
})
}
}