UNPKG

@grouparoo/core

Version:
191 lines (190 loc) 7.57 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var Import_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.Import = void 0; const sequelize_typescript_1 = require("sequelize-typescript"); const moment_1 = __importDefault(require("moment")); const sequelize_1 = require("sequelize"); const GrouparooRecord_1 = require("./GrouparooRecord"); const Run_1 = require("./Run"); const plugin_1 = require("../modules/plugin"); const apiData_1 = require("../modules/apiData"); const commonModel_1 = require("../classes/commonModel"); const stateMachine_1 = require("../modules/stateMachine"); const IMPORT_CREATORS = ["run", "group"]; const STATES = [ "associating", "importing", "processing", "failed", "complete", ]; const STATE_TRANSITIONS = [ { from: "associating", to: "failed", checks: [] }, { from: "associating", to: "importing", checks: [] }, { from: "importing", to: "failed", checks: [] }, { from: "importing", to: "complete", checks: [] }, { from: "importing", to: "processing", checks: [] }, { from: "processing", to: "failed", checks: [] }, { from: "processing", to: "complete", checks: [] }, ]; let Import = Import_1 = class Import extends commonModel_1.CommonModel { idPrefix() { return "imp"; } get data() { //@ts-ignore return JSON.parse(this.getDataValue("data") || "{}"); } set data(value) { //@ts-ignore this.setDataValue("data", JSON.stringify(value)); } async apiData() { const data = this.data || {}; delete data._meta; const record = await this.$get("record"); return { state: this.state, // IDs id: this.id, creatorType: this.creatorType, creatorId: this.creatorId, recordId: this.recordId, modelId: record === null || record === void 0 ? void 0 : record.modelId, //data data, // lifecycle timestamps createdAt: apiData_1.APIData.formatDate(this.createdAt), startedAt: apiData_1.APIData.formatDate(this.startedAt), recordAssociatedAt: apiData_1.APIData.formatDate(this.recordAssociatedAt), importedAt: apiData_1.APIData.formatDate(this.importedAt), processedAt: apiData_1.APIData.formatDate(this.processedAt), createdRecord: this.createdRecord, // errors errorMessage: this.errorMessage, errorMetadata: this.errorMetadata, }; } async setError(error, step) { this.state = "failed"; this.errorMessage = `Error on step ${step}: ${error.message}`; this.errorMetadata = JSON.stringify({ step, message: error.message, stack: error.stack, }); await this.save(); if (this.creatorType === "run") { const run = await Run_1.Run.findOne({ where: { id: this.creatorId } }); if (run && run.state === "complete") await run.buildErrorMessage(); } } static async updateState(instance) { await stateMachine_1.StateMachine.transition(instance, STATE_TRANSITIONS); } static async sweep(limit) { const days = parseInt((await plugin_1.plugin.readSetting("core", "sweeper-delete-old-imports-days")) .value); const count = await Import_1.destroy({ where: { createdAt: { [sequelize_1.Op.lt]: (0, moment_1.default)().subtract(days, "days").toDate(), }, }, force: true, limit, }); return { count, days }; } }; // --- Class Methods --- // Import.defaultState = "associating"; __decorate([ (0, sequelize_typescript_1.AllowNull)(false), (0, sequelize_typescript_1.Default)("associating"), (0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.ENUM(...STATES)), __metadata("design:type", Object) ], Import.prototype, "state", void 0); __decorate([ (0, sequelize_typescript_1.AllowNull)(false), (0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.ENUM(...IMPORT_CREATORS)), __metadata("design:type", Object) ], Import.prototype, "creatorType", void 0); __decorate([ (0, sequelize_typescript_1.AllowNull)(false), (0, sequelize_typescript_1.ForeignKey)(() => Run_1.Run), sequelize_typescript_1.Column, __metadata("design:type", String) ], Import.prototype, "creatorId", void 0); __decorate([ (0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.TEXT), __metadata("design:type", Object), __metadata("design:paramtypes", [Object]) ], Import.prototype, "data", null); __decorate([ (0, sequelize_typescript_1.ForeignKey)(() => GrouparooRecord_1.GrouparooRecord), sequelize_typescript_1.Column, __metadata("design:type", String) ], Import.prototype, "recordId", void 0); __decorate([ (0, sequelize_typescript_1.BelongsTo)(() => GrouparooRecord_1.GrouparooRecord), __metadata("design:type", GrouparooRecord_1.GrouparooRecord) ], Import.prototype, "record", void 0); __decorate([ (0, sequelize_typescript_1.AllowNull)(false), (0, sequelize_typescript_1.Default)(false), sequelize_typescript_1.Column, __metadata("design:type", Boolean) ], Import.prototype, "createdRecord", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", Date) ], Import.prototype, "startedAt", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", Date) ], Import.prototype, "recordAssociatedAt", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", Date) ], Import.prototype, "importedAt", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", Date) ], Import.prototype, "processedAt", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", String) ], Import.prototype, "errorMessage", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", String) ], Import.prototype, "errorMetadata", void 0); __decorate([ (0, sequelize_typescript_1.BelongsTo)(() => Run_1.Run), __metadata("design:type", Run_1.Run) ], Import.prototype, "run", void 0); __decorate([ sequelize_typescript_1.BeforeSave, __metadata("design:type", Function), __metadata("design:paramtypes", [Import]), __metadata("design:returntype", Promise) ], Import, "updateState", null); Import = Import_1 = __decorate([ (0, sequelize_typescript_1.Table)({ tableName: "imports", paranoid: false }) ], Import); exports.Import = Import;