UNPKG

@grouparoo/core

Version:
155 lines (154 loc) 6.83 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); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RecordProperty = exports.InvalidReasons = void 0; const sequelize_typescript_1 = require("sequelize-typescript"); const GrouparooRecord_1 = require("./GrouparooRecord"); const Property_1 = require("./Property"); const recordProperty_1 = require("../modules/ops/recordProperty"); const stateMachine_1 = require("../modules/stateMachine"); const apiData_1 = require("../modules/apiData"); const commonModel_1 = require("../classes/commonModel"); const propertiesCache_1 = require("../modules/caches/propertiesCache"); const STATES = ["draft", "pending", "ready"]; const STATE_TRANSITIONS = [ { from: "draft", to: "ready", checks: [] }, { from: "draft", to: "pending", checks: [] }, { from: "pending", to: "ready", checks: [] }, { from: "ready", to: "pending", checks: [] }, ]; var InvalidReasons; (function (InvalidReasons) { InvalidReasons["Duplicate"] = "Duplicate Value"; })(InvalidReasons = exports.InvalidReasons || (exports.InvalidReasons = {})); let RecordProperty = class RecordProperty extends commonModel_1.CommonModel { idPrefix() { return "rpr"; } async apiData() { const property = await this.ensureProperty(); return { recordId: this.recordId, property: this.property, state: this.state, valueChangedAt: apiData_1.APIData.formatDate(this.valueChangedAt), stateChangedAt: apiData_1.APIData.formatDate(this.stateChangedAt), confirmedAt: apiData_1.APIData.formatDate(this.confirmedAt), startedAt: apiData_1.APIData.formatDate(this.startedAt), position: this.position, unique: this.unique, key: property.key, value: await this.getValue(), invalidValue: this.invalidValue, invalidReason: this.invalidReason, }; } async getValue() { const property = await this.ensureProperty(); return recordProperty_1.RecordPropertyOps.getValue(this.rawValue, property.type); } async setValue(value) { const property = await this.ensureProperty(); const { rawValue, invalidValue, invalidReason } = await recordProperty_1.RecordPropertyOps.buildRawValue(value, property.type, this); this.rawValue = rawValue; this.invalidValue = invalidValue; this.invalidReason = invalidReason; } async ensureProperty() { const property = await propertiesCache_1.PropertiesCache.findOneWithCache(this.propertyId, undefined, "ready"); if (!property) { throw new Error(`property not found for propertyId ${this.propertyId}`); } return property; } // --- Class Methods --- // static async updateState(instance) { await stateMachine_1.StateMachine.transition(instance, STATE_TRANSITIONS); } }; __decorate([ (0, sequelize_typescript_1.AllowNull)(false), (0, sequelize_typescript_1.ForeignKey)(() => GrouparooRecord_1.GrouparooRecord), sequelize_typescript_1.Column, __metadata("design:type", String) ], RecordProperty.prototype, "recordId", void 0); __decorate([ (0, sequelize_typescript_1.AllowNull)(false), (0, sequelize_typescript_1.ForeignKey)(() => Property_1.Property), sequelize_typescript_1.Column, __metadata("design:type", String) ], RecordProperty.prototype, "propertyId", void 0); __decorate([ (0, sequelize_typescript_1.AllowNull)(false), (0, sequelize_typescript_1.Default)("pending"), (0, sequelize_typescript_1.Column)(sequelize_typescript_1.DataType.ENUM(...STATES)), __metadata("design:type", Object) ], RecordProperty.prototype, "state", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", String) ], RecordProperty.prototype, "rawValue", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", String) ], RecordProperty.prototype, "invalidValue", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", String) ], RecordProperty.prototype, "invalidReason", void 0); __decorate([ (0, sequelize_typescript_1.AllowNull)(false), (0, sequelize_typescript_1.Default)(0), sequelize_typescript_1.Column, __metadata("design:type", Number) ], RecordProperty.prototype, "position", void 0); __decorate([ (0, sequelize_typescript_1.AllowNull)(false), (0, sequelize_typescript_1.Default)(false), sequelize_typescript_1.Column, __metadata("design:type", Boolean) ], RecordProperty.prototype, "unique", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", Date) ], RecordProperty.prototype, "valueChangedAt", void 0); __decorate([ (0, sequelize_typescript_1.AllowNull)(false), (0, sequelize_typescript_1.Default)(new Date()), sequelize_typescript_1.Column, __metadata("design:type", Date) ], RecordProperty.prototype, "stateChangedAt", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", Date) ], RecordProperty.prototype, "confirmedAt", void 0); __decorate([ sequelize_typescript_1.Column, __metadata("design:type", Date) ], RecordProperty.prototype, "startedAt", void 0); __decorate([ (0, sequelize_typescript_1.BelongsTo)(() => GrouparooRecord_1.GrouparooRecord), __metadata("design:type", GrouparooRecord_1.GrouparooRecord) ], RecordProperty.prototype, "record", void 0); __decorate([ (0, sequelize_typescript_1.BelongsTo)(() => Property_1.Property), __metadata("design:type", Property_1.Property) ], RecordProperty.prototype, "property", void 0); __decorate([ sequelize_typescript_1.BeforeSave, __metadata("design:type", Function), __metadata("design:paramtypes", [RecordProperty]), __metadata("design:returntype", Promise) ], RecordProperty, "updateState", null); RecordProperty = __decorate([ (0, sequelize_typescript_1.Table)({ tableName: "recordProperties", paranoid: false }) ], RecordProperty); exports.RecordProperty = RecordProperty;