const config = require('../../config'); const providers = config.providers; const crypto = require('crypto'); const bcrypt = require('bcrypt'); const moment = require('moment'); module.exports = function(sequelize, DataTypes) { const ai_tools = sequelize.define( 'ai_tools', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true, }, name: { type: DataTypes.TEXT, }, tool_type: { type: DataTypes.ENUM, values: [ "llm_chat", "legal_research", "contract_review", "ediscovery", "drafting", "internal_llm", "workflow_automation", "other" ], }, deployment_model: { type: DataTypes.ENUM, values: [ "saas", "on_prem", "private_cloud", "hybrid" ], }, approval_status: { type: DataTypes.ENUM, values: [ "proposed", "in_review", "approved", "restricted", "rejected", "retired" ], }, supports_sso: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false, }, supports_audit_logs: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false, }, soc2_status: { type: DataTypes.ENUM, values: [ "none", "type_i", "type_ii", "in_progress", "not_applicable" ], }, data_retention_policy: { type: DataTypes.ENUM, values: [ "no_retention", "limited_retention", "configurable", "unknown" ], }, training_on_client_data_policy: { type: DataTypes.ENUM, values: [ "no", "opt_out", "opt_in", "unknown" ], }, data_residency: { type: DataTypes.ENUM, values: [ "us", "eu", "uk", "global", "configurable", "unknown" ], }, deletion_policy: { type: DataTypes.ENUM, values: [ "immediate", "within_30_days", "within_90_days", "contractual", "unknown" ], }, security_posture_summary: { type: DataTypes.TEXT, }, monthly_cost: { type: DataTypes.DECIMAL, }, subprocessors: { type: DataTypes.TEXT, }, notes: { type: DataTypes.TEXT, }, importHash: { type: DataTypes.STRING(255), allowNull: true, unique: true, }, }, { timestamps: true, paranoid: true, freezeTableName: true, }, ); ai_tools.associate = (db) => { /// loop through entities and it's fields, and if ref === current e[name] and create relation has many on parent entity db.ai_tools.hasMany(db.ai_use_cases, { as: 'ai_use_cases_intended_tool', foreignKey: { name: 'intended_toolId', }, constraints: false, }); db.ai_tools.hasMany(db.vendor_risk_assessments, { as: 'vendor_risk_assessments_tool', foreignKey: { name: 'toolId', }, constraints: false, }); db.ai_tools.hasMany(db.tool_entitlements, { as: 'tool_entitlements_tool', foreignKey: { name: 'toolId', }, constraints: false, }); db.ai_tools.hasMany(db.workflow_runs, { as: 'workflow_runs_tool', foreignKey: { name: 'toolId', }, constraints: false, }); //end loop db.ai_tools.belongsTo(db.vendors, { as: 'vendor', foreignKey: { name: 'vendorId', }, constraints: false, }); db.ai_tools.hasMany(db.file, { as: 'security_documents', foreignKey: 'belongsToId', constraints: false, scope: { belongsTo: db.ai_tools.getTableName(), belongsToColumn: 'security_documents', }, }); db.ai_tools.belongsTo(db.users, { as: 'createdBy', }); db.ai_tools.belongsTo(db.users, { as: 'updatedBy', }); }; return ai_tools; };