|
| 1 | +import { isMatch } from 'lodash'; |
| 2 | +import { RepoVersionInfo } from '../../model/repoVersionInfo'; |
| 3 | +import { firebase } from '../../config/firebase'; |
| 4 | +import { Discord } from '../../config/discord'; |
| 5 | + |
| 6 | +const plural = (amount: number) => { |
| 7 | + return amount === 1 ? 'version' : 'versions'; |
| 8 | +}; |
| 9 | + |
| 10 | +export const updateDatabase = async (ingestedInfoList: RepoVersionInfo[]): Promise<void> => { |
| 11 | + const existingInfoList = await RepoVersionInfo.getAll(); |
| 12 | + |
| 13 | + const newVersions: RepoVersionInfo[] = []; |
| 14 | + const updatedVersions: RepoVersionInfo[] = []; |
| 15 | + |
| 16 | + ingestedInfoList.forEach((ingestedInfo: RepoVersionInfo) => { |
| 17 | + const { version } = ingestedInfo; |
| 18 | + const existingVersion = existingInfoList.find((info) => info.version === version); |
| 19 | + |
| 20 | + if (!existingVersion) { |
| 21 | + newVersions.push(ingestedInfo); |
| 22 | + return; |
| 23 | + } |
| 24 | + |
| 25 | + if (!isMatch(existingVersion, ingestedInfo)) { |
| 26 | + updatedVersions.push(ingestedInfo); |
| 27 | + return; |
| 28 | + } |
| 29 | + }); |
| 30 | + |
| 31 | + let message = ''; |
| 32 | + |
| 33 | + if (newVersions.length >= 1) { |
| 34 | + await RepoVersionInfo.createMany(newVersions); |
| 35 | + message += ` |
| 36 | + ${newVersions.length} new repository ${plural(newVersions.length)} detected. |
| 37 | + (${newVersions.map((version) => version.version).join(', ')}`; |
| 38 | + } |
| 39 | + |
| 40 | + if (updatedVersions.length >= 1) { |
| 41 | + await RepoVersionInfo.updateMany(updatedVersions); |
| 42 | + message += ` |
| 43 | + ${updatedVersions.length} updated repository ${plural(updatedVersions.length)} detected. |
| 44 | + (${updatedVersions.map((version) => version.version).join(', ')})`; |
| 45 | + } |
| 46 | + |
| 47 | + message = message.trimEnd(); |
| 48 | + if (message.length >= 1) { |
| 49 | + firebase.logger.info(message); |
| 50 | + await Discord.sendMessageToMaintainers(message); |
| 51 | + } else { |
| 52 | + firebase.logger.info('Database is up-to-date. (no updated repo versions found)'); |
| 53 | + } |
| 54 | +}; |
0 commit comments