schema updated and due to uuid constarin

This commit is contained in:
yashwin-foxy 2025-09-23 18:27:51 +05:30
parent af72fa4c98
commit 4bc0ba77db
30 changed files with 89 additions and 78 deletions

View File

@ -908,7 +908,7 @@ async function getPerformanceData(req, res) {
const getUserReport = async (req, res) => { const getUserReport = async (req, res) => {
try { try {
const { sdate, edate, dateFormat, startIndex } = req.query; const { sdate, edate, dateFormat, startIndex } = req.query;
const userId = req.user.id; const userId = req.user.uuid;
const zohoClient = new ZohoClient(userId); const zohoClient = new ZohoClient(userId);
const attendanceReport = await zohoClient.getUserReport({ const attendanceReport = await zohoClient.getUserReport({
@ -927,7 +927,7 @@ const getUserReport = async (req, res) => {
// Get leave tracker report // Get leave tracker report
const getLeaveTrackerReport = async (req, res) => { const getLeaveTrackerReport = async (req, res) => {
try { try {
const userId = req.user.id; const userId = req.user.uuid;
const zohoClient = new ZohoClient(userId); const zohoClient = new ZohoClient(userId);
const leaveTrackerReport = await zohoClient.getLeaveTrackerReport(); const leaveTrackerReport = await zohoClient.getLeaveTrackerReport();
@ -941,7 +941,7 @@ const getLeaveTrackerReport = async (req, res) => {
// Get holidays // Get holidays
const getHolidays = async (req, res) => { const getHolidays = async (req, res) => {
try { try {
const userId = req.user.id; const userId = req.user.uuid;
const zohoClient = new ZohoClient(userId); const zohoClient = new ZohoClient(userId);
const holidays = await zohoClient.getHolidays(); const holidays = await zohoClient.getHolidays();

View File

@ -20,7 +20,7 @@ class ReportsController {
// Base filters // Base filters
const baseFilters = { const baseFilters = {
user_id: userId, user_uuid: userId,
provider: 'zoho', provider: 'zoho',
...dateFilter, ...dateFilter,
...ownerFilter ...ownerFilter

View File

@ -58,7 +58,7 @@ async function exchangeZohoToken(req, res) {
const expiresAt = expires_in ? new Date(Date.now() + expires_in * 1000) : null; const expiresAt = expires_in ? new Date(Date.now() + expires_in * 1000) : null;
await userAuthTokenRepo.upsertToken({ await userAuthTokenRepo.upsertToken({
userId: id, userUuid: id,
serviceName: service_name, serviceName: service_name,
accessToken: encrypt(access_token), accessToken: encrypt(access_token),
refreshToken: refresh_token? encrypt(refresh_token) : null, refreshToken: refresh_token? encrypt(refresh_token) : null,

View File

@ -7,11 +7,11 @@ class UserAuthToken extends Model {}
UserAuthToken.init( UserAuthToken.init(
{ {
id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true }, id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true },
userId: { userUuid: {
field: 'user_id', field: 'user_uuid',
type: DataTypes.INTEGER, type: DataTypes.CHAR(36),
allowNull: false, allowNull: false,
references: { model: 'users', key: 'id' }, references: { model: 'users', key: 'uuid' },
onDelete: 'CASCADE' onDelete: 'CASCADE'
}, },
serviceName: { serviceName: {
@ -32,13 +32,13 @@ UserAuthToken.init(
timestamps: true, timestamps: true,
paranoid: false, paranoid: false,
indexes: [ indexes: [
{ fields: ['user_id'] }, { fields: ['user_uuid'] },
{ fields: ['service_name'] } { fields: ['service_name'] }
] ]
} }
); );
UserAuthToken.belongsTo(User, { foreignKey: 'userId', as: 'user' }); UserAuthToken.belongsTo(User, { foreignKey: 'userUuid', as: 'user' });
module.exports = UserAuthToken; module.exports = UserAuthToken;

View File

@ -12,8 +12,8 @@ const ZohoAccountsBulk = sequelize.define('ZohoAccountsBulk', {
type: DataTypes.STRING(255), type: DataTypes.STRING(255),
allowNull: true allowNull: true
}, },
user_id: { user_uuid: {
type: DataTypes.STRING(255), type: DataTypes.CHAR(36),
allowNull: false allowNull: false
}, },
provider: { provider: {
@ -63,7 +63,7 @@ const ZohoAccountsBulk = sequelize.define('ZohoAccountsBulk', {
createdAt: 'created_at', createdAt: 'created_at',
updatedAt: 'updated_at', updatedAt: 'updated_at',
indexes: [ indexes: [
{ fields: ['user_id', 'provider'] }, { fields: ['user_uuid', 'provider'] },
{ fields: ['bulk_job_id'] }, { fields: ['bulk_job_id'] },
{ fields: ['created_time'] } { fields: ['created_time'] }
] ]

View File

@ -7,8 +7,8 @@ const ZohoBulkReadJobs = sequelize.define('ZohoBulkReadJobs', {
primaryKey: true, primaryKey: true,
allowNull: false allowNull: false
}, },
user_id: { user_uuid: {
type: DataTypes.STRING(255), type: DataTypes.CHAR(36),
allowNull: false allowNull: false
}, },
provider: { provider: {
@ -61,7 +61,7 @@ const ZohoBulkReadJobs = sequelize.define('ZohoBulkReadJobs', {
createdAt: 'created_at', createdAt: 'created_at',
updatedAt: 'updated_at', updatedAt: 'updated_at',
indexes: [ indexes: [
{ fields: ['user_id', 'provider'] }, { fields: ['user_uuid', 'provider'] },
{ fields: ['module'] }, { fields: ['module'] },
{ fields: ['status'] } { fields: ['status'] }
] ]

View File

@ -12,8 +12,8 @@ const ZohoContactsBulk = sequelize.define('ZohoContactsBulk', {
type: DataTypes.STRING(255), type: DataTypes.STRING(255),
allowNull: true allowNull: true
}, },
user_id: { user_uuid: {
type: DataTypes.STRING(255), type: DataTypes.CHAR(36),
allowNull: false allowNull: false
}, },
provider: { provider: {
@ -71,7 +71,7 @@ const ZohoContactsBulk = sequelize.define('ZohoContactsBulk', {
createdAt: 'created_at', createdAt: 'created_at',
updatedAt: 'updated_at', updatedAt: 'updated_at',
indexes: [ indexes: [
{ fields: ['user_id', 'provider'] }, { fields: ['user_uuid', 'provider'] },
{ fields: ['bulk_job_id'] }, { fields: ['bulk_job_id'] },
{ fields: ['created_time'] } { fields: ['created_time'] }
] ]

View File

@ -12,8 +12,8 @@ const ZohoInvoicesBulk = sequelize.define('ZohoInvoicesBulk', {
type: DataTypes.STRING(255), type: DataTypes.STRING(255),
allowNull: true allowNull: true
}, },
user_id: { user_uuid: {
type: DataTypes.STRING(255), type: DataTypes.CHAR(36),
allowNull: false allowNull: false
}, },
provider: { provider: {
@ -67,7 +67,7 @@ const ZohoInvoicesBulk = sequelize.define('ZohoInvoicesBulk', {
createdAt: 'created_at', createdAt: 'created_at',
updatedAt: 'updated_at', updatedAt: 'updated_at',
indexes: [ indexes: [
{ fields: ['user_id', 'provider'] }, { fields: ['user_uuid', 'provider'] },
{ fields: ['bulk_job_id'] }, { fields: ['bulk_job_id'] },
{ fields: ['created_time'] } { fields: ['created_time'] }
] ]

View File

@ -12,8 +12,8 @@ const ZohoLeadsBulk = sequelize.define('ZohoLeadsBulk', {
type: DataTypes.STRING(255), type: DataTypes.STRING(255),
allowNull: true allowNull: true
}, },
user_id: { user_uuid: {
type: DataTypes.STRING(255), type: DataTypes.CHAR(36),
allowNull: false allowNull: false
}, },
provider: { provider: {
@ -67,7 +67,7 @@ const ZohoLeadsBulk = sequelize.define('ZohoLeadsBulk', {
createdAt: 'created_at', createdAt: 'created_at',
updatedAt: 'updated_at', updatedAt: 'updated_at',
indexes: [ indexes: [
{ fields: ['user_id', 'provider'] }, { fields: ['user_uuid', 'provider'] },
{ fields: ['bulk_job_id'] }, { fields: ['bulk_job_id'] },
{ fields: ['created_time'] } { fields: ['created_time'] }
] ]

View File

@ -12,8 +12,8 @@ const ZohoPurchaseOrdersBulk = sequelize.define('ZohoPurchaseOrdersBulk', {
type: DataTypes.STRING(255), type: DataTypes.STRING(255),
allowNull: true allowNull: true
}, },
user_id: { user_uuid: {
type: DataTypes.STRING(255), type: DataTypes.CHAR(36),
allowNull: false allowNull: false
}, },
provider: { provider: {
@ -63,7 +63,7 @@ const ZohoPurchaseOrdersBulk = sequelize.define('ZohoPurchaseOrdersBulk', {
createdAt: 'created_at', createdAt: 'created_at',
updatedAt: 'updated_at', updatedAt: 'updated_at',
indexes: [ indexes: [
{ fields: ['user_id', 'provider'] }, { fields: ['user_uuid', 'provider'] },
{ fields: ['bulk_job_id'] }, { fields: ['bulk_job_id'] },
{ fields: ['created_time'] } { fields: ['created_time'] }
] ]

View File

@ -12,8 +12,8 @@ const ZohoSalesOrdersBulk = sequelize.define('ZohoSalesOrdersBulk', {
type: DataTypes.STRING(255), type: DataTypes.STRING(255),
allowNull: true allowNull: true
}, },
user_id: { user_uuid: {
type: DataTypes.STRING(255), type: DataTypes.CHAR(36),
allowNull: false allowNull: false
}, },
provider: { provider: {
@ -63,7 +63,7 @@ const ZohoSalesOrdersBulk = sequelize.define('ZohoSalesOrdersBulk', {
createdAt: 'created_at', createdAt: 'created_at',
updatedAt: 'updated_at', updatedAt: 'updated_at',
indexes: [ indexes: [
{ fields: ['user_id', 'provider'] }, { fields: ['user_uuid', 'provider'] },
{ fields: ['bulk_job_id'] }, { fields: ['bulk_job_id'] },
{ fields: ['created_time'] } { fields: ['created_time'] }
] ]

View File

@ -12,8 +12,8 @@ const ZohoTasksBulk = sequelize.define('ZohoTasksBulk', {
type: DataTypes.STRING(255), type: DataTypes.STRING(255),
allowNull: true allowNull: true
}, },
user_id: { user_uuid: {
type: DataTypes.STRING(255), type: DataTypes.CHAR(36),
allowNull: false allowNull: false
}, },
provider: { provider: {
@ -59,7 +59,7 @@ const ZohoTasksBulk = sequelize.define('ZohoTasksBulk', {
createdAt: 'created_at', createdAt: 'created_at',
updatedAt: 'updated_at', updatedAt: 'updated_at',
indexes: [ indexes: [
{ fields: ['user_id', 'provider'] }, { fields: ['user_uuid', 'provider'] },
{ fields: ['bulk_job_id'] }, { fields: ['bulk_job_id'] },
{ fields: ['created_time'] } { fields: ['created_time'] }
] ]

View File

@ -12,8 +12,8 @@ const ZohoVendorsBulk = sequelize.define('ZohoVendorsBulk', {
type: DataTypes.STRING(255), type: DataTypes.STRING(255),
allowNull: true allowNull: true
}, },
user_id: { user_uuid: {
type: DataTypes.STRING(255), type: DataTypes.CHAR(36),
allowNull: false allowNull: false
}, },
provider: { provider: {
@ -55,7 +55,7 @@ const ZohoVendorsBulk = sequelize.define('ZohoVendorsBulk', {
createdAt: 'created_at', createdAt: 'created_at',
updatedAt: 'updated_at', updatedAt: 'updated_at',
indexes: [ indexes: [
{ fields: ['user_id', 'provider'] }, { fields: ['user_uuid', 'provider'] },
{ fields: ['bulk_job_id'] }, { fields: ['bulk_job_id'] },
{ fields: ['created_time'] } { fields: ['created_time'] }
] ]

View File

@ -4,14 +4,14 @@ async function createToken(payload) {
return UserAuthToken.create(payload); return UserAuthToken.create(payload);
} }
async function findByUserAndService(userId, serviceName) { async function findByUserAndService(userUuid, serviceName) {
return UserAuthToken.findOne({ where: { userId, serviceName } }); return UserAuthToken.findOne({ where: { userUuid, serviceName } });
} }
async function upsertToken(payload) { async function upsertToken(payload) {
const { userId, serviceName } = payload; const { userUuid, serviceName } = payload;
const [token, created] = await UserAuthToken.findOrCreate({ const [token, created] = await UserAuthToken.findOrCreate({
where: { userId, serviceName }, where: { userUuid, serviceName },
defaults: payload defaults: payload
}); });
if (!created) { if (!created) {

View File

@ -73,7 +73,7 @@ class ZohoBulkReadRepository {
const result = await model.destroy({ const result = await model.destroy({
where: { where: {
user_id: userId, user_uuid: userId,
provider: 'zoho', provider: 'zoho',
bulk_job_id: jobId bulk_job_id: jobId
} }
@ -101,7 +101,7 @@ class ZohoBulkReadRepository {
const records = await model.findAll({ const records = await model.findAll({
where: { where: {
user_id: userId, user_uuid: userId,
provider: 'zoho' provider: 'zoho'
}, },
limit: parseInt(limit), limit: parseInt(limit),
@ -128,7 +128,7 @@ class ZohoBulkReadRepository {
const count = await model.count({ const count = await model.count({
where: { where: {
user_id: userId, user_uuid: userId,
provider: 'zoho' provider: 'zoho'
} }
}); });
@ -152,7 +152,7 @@ class ZohoBulkReadRepository {
const job = await ZohoBulkReadJobs.create({ const job = await ZohoBulkReadJobs.create({
id: jobData.id, id: jobData.id,
user_id: jobData.user_id, user_uuid: jobData.user_uuid,
provider: 'zoho', provider: 'zoho',
module: jobData.module, module: jobData.module,
operation: jobData.operation, operation: jobData.operation,
@ -224,7 +224,7 @@ class ZohoBulkReadRepository {
const { limit = 50, offset = 0, status } = options; const { limit = 50, offset = 0, status } = options;
const whereClause = { const whereClause = {
user_id: userId, user_uuid: userId,
provider: 'zoho' provider: 'zoho'
}; };

View File

@ -1,5 +1,5 @@
CREATE TABLE IF NOT EXISTS users ( CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT,
uuid CHAR(36) NOT NULL UNIQUE, uuid CHAR(36) NOT NULL UNIQUE,
email VARCHAR(255) NOT NULL UNIQUE, email VARCHAR(255) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL, password_hash VARCHAR(255) NOT NULL,
@ -10,5 +10,7 @@ CREATE TABLE IF NOT EXISTS users (
is_active TINYINT(1) NOT NULL DEFAULT 1, is_active TINYINT(1) NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at DATETIME NULL deleted_at DATETIME NULL,
PRIMARY KEY (id),
UNIQUE KEY (uuid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

View File

@ -1,13 +1,13 @@
CREATE TABLE IF NOT EXISTS user_auth_tokens ( CREATE TABLE IF NOT EXISTS user_auth_tokens (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
user_id CHAR(36) NOT NULL, user_uuid CHAR(36) NOT NULL,
service_name ENUM('zoho','keka','bamboohr','hubspot','other') NOT NULL, service_name ENUM('zoho','keka','bamboohr','hubspot','other') NOT NULL,
access_token TEXT NOT NULL, access_token TEXT NOT NULL,
refresh_token TEXT NULL, refresh_token TEXT NULL,
expires_at DATETIME NULL, expires_at DATETIME NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_user_auth_tokens_user FOREIGN KEY (user_id) REFERENCES users(uuid) ON DELETE CASCADE CONSTRAINT fk_user_auth_tokens_user FOREIGN KEY (user_uuid) REFERENCES users(uuid) ON DELETE CASCADE
); ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

View File

@ -4,7 +4,7 @@
CREATE TABLE IF NOT EXISTS zoho_contacts_bulk ( CREATE TABLE IF NOT EXISTS zoho_contacts_bulk (
internal_id INT AUTO_INCREMENT PRIMARY KEY, internal_id INT AUTO_INCREMENT PRIMARY KEY,
zoho_id VARCHAR(255), zoho_id VARCHAR(255),
user_id VARCHAR(255) NOT NULL, user_uuid CHAR(36) NOT NULL,
provider VARCHAR(50) NOT NULL DEFAULT 'zoho', provider VARCHAR(50) NOT NULL DEFAULT 'zoho',
first_name VARCHAR(255), first_name VARCHAR(255),
last_name VARCHAR(255), last_name VARCHAR(255),
@ -19,7 +19,8 @@ CREATE TABLE IF NOT EXISTS zoho_contacts_bulk (
bulk_job_id VARCHAR(255), bulk_job_id VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_provider (user_id, provider), INDEX idx_user_provider (user_uuid, provider),
CONSTRAINT fk_zoho_contacts_bulk_user FOREIGN KEY (user_uuid) REFERENCES users(uuid) ON DELETE CASCADE,
INDEX idx_bulk_job (bulk_job_id), INDEX idx_bulk_job (bulk_job_id),
INDEX idx_created_time (created_time), INDEX idx_created_time (created_time),
INDEX idx_zoho_id (zoho_id) INDEX idx_zoho_id (zoho_id)

View File

@ -4,7 +4,7 @@
CREATE TABLE IF NOT EXISTS zoho_leads_bulk ( CREATE TABLE IF NOT EXISTS zoho_leads_bulk (
internal_id INT AUTO_INCREMENT PRIMARY KEY, internal_id INT AUTO_INCREMENT PRIMARY KEY,
zoho_id VARCHAR(255), zoho_id VARCHAR(255),
user_id VARCHAR(255) NOT NULL, user_uuid CHAR(36) NOT NULL,
provider VARCHAR(50) NOT NULL DEFAULT 'zoho', provider VARCHAR(50) NOT NULL DEFAULT 'zoho',
first_name VARCHAR(255), first_name VARCHAR(255),
last_name VARCHAR(255), last_name VARCHAR(255),
@ -18,7 +18,8 @@ CREATE TABLE IF NOT EXISTS zoho_leads_bulk (
bulk_job_id VARCHAR(255), bulk_job_id VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_provider (user_id, provider), INDEX idx_user_provider (user_uuid, provider),
CONSTRAINT fk_zoho_leads_bulk_user FOREIGN KEY (user_uuid) REFERENCES users(uuid) ON DELETE CASCADE,
INDEX idx_bulk_job (bulk_job_id), INDEX idx_bulk_job (bulk_job_id),
INDEX idx_created_time (created_time), INDEX idx_created_time (created_time),
INDEX idx_zoho_id (zoho_id) INDEX idx_zoho_id (zoho_id)

View File

@ -4,7 +4,7 @@
CREATE TABLE IF NOT EXISTS zoho_accounts_bulk ( CREATE TABLE IF NOT EXISTS zoho_accounts_bulk (
internal_id INT AUTO_INCREMENT PRIMARY KEY, internal_id INT AUTO_INCREMENT PRIMARY KEY,
zoho_id VARCHAR(255), zoho_id VARCHAR(255),
user_id VARCHAR(255) NOT NULL, user_uuid CHAR(36) NOT NULL,
provider VARCHAR(50) NOT NULL DEFAULT 'zoho', provider VARCHAR(50) NOT NULL DEFAULT 'zoho',
account_name VARCHAR(255), account_name VARCHAR(255),
phone VARCHAR(255), phone VARCHAR(255),
@ -17,7 +17,8 @@ CREATE TABLE IF NOT EXISTS zoho_accounts_bulk (
bulk_job_id VARCHAR(255), bulk_job_id VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_provider (user_id, provider), INDEX idx_user_provider (user_uuid, provider),
CONSTRAINT fk_zoho_accounts_bulk_user FOREIGN KEY (user_uuid) REFERENCES users(uuid) ON DELETE CASCADE,
INDEX idx_bulk_job (bulk_job_id), INDEX idx_bulk_job (bulk_job_id),
INDEX idx_created_time (created_time), INDEX idx_created_time (created_time),
INDEX idx_zoho_id (zoho_id) INDEX idx_zoho_id (zoho_id)

View File

@ -4,7 +4,7 @@
CREATE TABLE IF NOT EXISTS zoho_tasks_bulk ( CREATE TABLE IF NOT EXISTS zoho_tasks_bulk (
internal_id INT AUTO_INCREMENT PRIMARY KEY, internal_id INT AUTO_INCREMENT PRIMARY KEY,
zoho_id VARCHAR(255), zoho_id VARCHAR(255),
user_id VARCHAR(255) NOT NULL, user_uuid CHAR(36) NOT NULL,
provider VARCHAR(50) NOT NULL DEFAULT 'zoho', provider VARCHAR(50) NOT NULL DEFAULT 'zoho',
subject VARCHAR(500), subject VARCHAR(500),
owner VARCHAR(255), owner VARCHAR(255),
@ -16,7 +16,8 @@ CREATE TABLE IF NOT EXISTS zoho_tasks_bulk (
bulk_job_id VARCHAR(255), bulk_job_id VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_provider (user_id, provider), INDEX idx_user_provider (user_uuid, provider),
CONSTRAINT fk_zoho_tasks_bulk_user FOREIGN KEY (user_uuid) REFERENCES users(uuid) ON DELETE CASCADE,
INDEX idx_bulk_job (bulk_job_id), INDEX idx_bulk_job (bulk_job_id),
INDEX idx_created_time (created_time), INDEX idx_created_time (created_time),
INDEX idx_zoho_id (zoho_id) INDEX idx_zoho_id (zoho_id)

View File

@ -4,7 +4,7 @@
CREATE TABLE IF NOT EXISTS zoho_vendors_bulk ( CREATE TABLE IF NOT EXISTS zoho_vendors_bulk (
internal_id INT AUTO_INCREMENT PRIMARY KEY, internal_id INT AUTO_INCREMENT PRIMARY KEY,
zoho_id VARCHAR(255), zoho_id VARCHAR(255),
user_id VARCHAR(255) NOT NULL, user_uuid CHAR(36) NOT NULL,
provider VARCHAR(50) NOT NULL DEFAULT 'zoho', provider VARCHAR(50) NOT NULL DEFAULT 'zoho',
vendor_name VARCHAR(255), vendor_name VARCHAR(255),
email VARCHAR(255), email VARCHAR(255),
@ -15,7 +15,8 @@ CREATE TABLE IF NOT EXISTS zoho_vendors_bulk (
bulk_job_id VARCHAR(255), bulk_job_id VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_provider (user_id, provider), INDEX idx_user_provider (user_uuid, provider),
CONSTRAINT fk_zoho_vendors_bulk_user FOREIGN KEY (user_uuid) REFERENCES users(uuid) ON DELETE CASCADE,
INDEX idx_bulk_job (bulk_job_id), INDEX idx_bulk_job (bulk_job_id),
INDEX idx_created_time (created_time), INDEX idx_created_time (created_time),
INDEX idx_zoho_id (zoho_id) INDEX idx_zoho_id (zoho_id)

View File

@ -4,7 +4,7 @@
CREATE TABLE IF NOT EXISTS zoho_invoices_bulk ( CREATE TABLE IF NOT EXISTS zoho_invoices_bulk (
internal_id INT AUTO_INCREMENT PRIMARY KEY, internal_id INT AUTO_INCREMENT PRIMARY KEY,
zoho_id VARCHAR(255), zoho_id VARCHAR(255),
user_id VARCHAR(255) NOT NULL, user_uuid CHAR(36) NOT NULL,
provider VARCHAR(50) NOT NULL DEFAULT 'zoho', provider VARCHAR(50) NOT NULL DEFAULT 'zoho',
invoice_number VARCHAR(255), invoice_number VARCHAR(255),
invoice_date DATE, invoice_date DATE,
@ -18,7 +18,8 @@ CREATE TABLE IF NOT EXISTS zoho_invoices_bulk (
bulk_job_id VARCHAR(255), bulk_job_id VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_provider (user_id, provider), INDEX idx_user_provider (user_uuid, provider),
CONSTRAINT fk_zoho_invoices_bulk_user FOREIGN KEY (user_uuid) REFERENCES users(uuid) ON DELETE CASCADE,
INDEX idx_bulk_job (bulk_job_id), INDEX idx_bulk_job (bulk_job_id),
INDEX idx_created_time (created_time), INDEX idx_created_time (created_time),
INDEX idx_zoho_id (zoho_id) INDEX idx_zoho_id (zoho_id)

View File

@ -4,7 +4,7 @@
CREATE TABLE IF NOT EXISTS zoho_sales_orders_bulk ( CREATE TABLE IF NOT EXISTS zoho_sales_orders_bulk (
internal_id INT AUTO_INCREMENT PRIMARY KEY, internal_id INT AUTO_INCREMENT PRIMARY KEY,
zoho_id VARCHAR(255), zoho_id VARCHAR(255),
user_id VARCHAR(255) NOT NULL, user_uuid CHAR(36) NOT NULL,
provider VARCHAR(50) NOT NULL DEFAULT 'zoho', provider VARCHAR(50) NOT NULL DEFAULT 'zoho',
sales_order_number VARCHAR(255), sales_order_number VARCHAR(255),
subject VARCHAR(500), subject VARCHAR(500),
@ -17,7 +17,8 @@ CREATE TABLE IF NOT EXISTS zoho_sales_orders_bulk (
bulk_job_id VARCHAR(255), bulk_job_id VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_provider (user_id, provider), INDEX idx_user_provider (user_uuid, provider),
CONSTRAINT fk_zoho_sales_orders_bulk_user FOREIGN KEY (user_uuid) REFERENCES users(uuid) ON DELETE CASCADE,
INDEX idx_bulk_job (bulk_job_id), INDEX idx_bulk_job (bulk_job_id),
INDEX idx_created_time (created_time), INDEX idx_created_time (created_time),
INDEX idx_zoho_id (zoho_id) INDEX idx_zoho_id (zoho_id)

View File

@ -4,7 +4,7 @@
CREATE TABLE IF NOT EXISTS zoho_purchase_orders_bulk ( CREATE TABLE IF NOT EXISTS zoho_purchase_orders_bulk (
internal_id INT AUTO_INCREMENT PRIMARY KEY, internal_id INT AUTO_INCREMENT PRIMARY KEY,
zoho_id VARCHAR(255), zoho_id VARCHAR(255),
user_id VARCHAR(255) NOT NULL, user_uuid CHAR(36) NOT NULL,
provider VARCHAR(50) NOT NULL DEFAULT 'zoho', provider VARCHAR(50) NOT NULL DEFAULT 'zoho',
purchase_order_number VARCHAR(255), purchase_order_number VARCHAR(255),
subject VARCHAR(500), subject VARCHAR(500),
@ -17,7 +17,8 @@ CREATE TABLE IF NOT EXISTS zoho_purchase_orders_bulk (
bulk_job_id VARCHAR(255), bulk_job_id VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_provider (user_id, provider), INDEX idx_user_provider (user_uuid, provider),
CONSTRAINT fk_zoho_purchase_orders_bulk_user FOREIGN KEY (user_uuid) REFERENCES users(uuid) ON DELETE CASCADE,
INDEX idx_bulk_job (bulk_job_id), INDEX idx_bulk_job (bulk_job_id),
INDEX idx_created_time (created_time), INDEX idx_created_time (created_time),
INDEX idx_zoho_id (zoho_id) INDEX idx_zoho_id (zoho_id)

View File

@ -3,7 +3,7 @@
CREATE TABLE IF NOT EXISTS zoho_bulk_read_jobs ( CREATE TABLE IF NOT EXISTS zoho_bulk_read_jobs (
id VARCHAR(255) PRIMARY KEY, id VARCHAR(255) PRIMARY KEY,
user_id VARCHAR(255) NOT NULL, user_uuid CHAR(36) NOT NULL,
provider VARCHAR(50) NOT NULL DEFAULT 'zoho', provider VARCHAR(50) NOT NULL DEFAULT 'zoho',
module VARCHAR(100) NOT NULL, module VARCHAR(100) NOT NULL,
operation VARCHAR(50) NOT NULL, operation VARCHAR(50) NOT NULL,
@ -16,7 +16,8 @@ CREATE TABLE IF NOT EXISTS zoho_bulk_read_jobs (
error_message TEXT, error_message TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_provider (user_id, provider), INDEX idx_user_provider (user_uuid, provider),
CONSTRAINT fk_zoho_bulk_read_jobs_user FOREIGN KEY (user_uuid) REFERENCES users(uuid) ON DELETE CASCADE,
INDEX idx_module (module), INDEX idx_module (module),
INDEX idx_status (status) INDEX idx_status (status)
); );

View File

@ -86,7 +86,7 @@ class ZohoClient {
const expiresAt = expires_in ? new Date(Date.now() + expires_in * 1000) : null; const expiresAt = expires_in ? new Date(Date.now() + expires_in * 1000) : null;
await userAuthTokenRepo.upsertToken({ await userAuthTokenRepo.upsertToken({
userId: this.userId, userUuid: this.userId,
serviceName: 'zoho', serviceName: 'zoho',
accessToken: encrypt(access_token), accessToken: encrypt(access_token),
refreshToken: refreshToken ? encrypt(refreshToken) : null, refreshToken: refreshToken ? encrypt(refreshToken) : null,

View File

@ -495,7 +495,7 @@ class ZohoHandler {
// Create job record with the webhook data // Create job record with the webhook data
const jobData = { const jobData = {
id: job_id, id: job_id,
user_id: userId, user_uuid: userId,
module: query.module, module: query.module,
operation: operation, operation: operation,
state: state, state: state,
@ -508,9 +508,9 @@ class ZohoHandler {
console.log('✅ Created new job record'); console.log('✅ Created new job record');
} else { } else {
// Update existing job record with user ID if it was unknown // Update existing job record with user ID if it was unknown
if (jobRecord.user_id === 'unknown') { if (jobRecord.user_uuid === 'unknown') {
await ZohoBulkReadRepository.updateBulkReadJob(job_id, { await ZohoBulkReadRepository.updateBulkReadJob(job_id, {
user_id: userId user_uuid: userId
}); });
console.log('✅ Updated job record with user ID'); console.log('✅ Updated job record with user ID');
} }
@ -642,7 +642,7 @@ class ZohoHandler {
const jobData = { const jobData = {
id: data.job_id, id: data.job_id,
user_id: user.uuid, user_uuid: user.uuid,
module: data.query?.module || 'unknown', module: data.query?.module || 'unknown',
operation: data.operation || 'read', operation: data.operation || 'read',
state: data.state || 'CREATED', state: data.state || 'CREATED',

View File

@ -63,7 +63,7 @@ class BulkReadService {
// Store job in database // Store job in database
const jobRecord = await ZohoBulkReadRepository.createBulkReadJob({ const jobRecord = await ZohoBulkReadRepository.createBulkReadJob({
id: jobData.id, id: jobData.id,
user_id: userId, user_uuid: userId,
module: module, module: module,
operation: 'read', operation: 'read',
state: 'CREATED', state: 'CREATED',
@ -111,7 +111,7 @@ class BulkReadService {
throw new Error('Job not found'); throw new Error('Job not found');
} }
if (job.user_id !== userId) { if (job.user_uuid !== userId) {
throw new Error('Unauthorized access to job'); throw new Error('Unauthorized access to job');
} }

View File

@ -140,7 +140,7 @@ class CsvService {
const mappedData = csvData.map(record => { const mappedData = csvData.map(record => {
const baseRecord = { const baseRecord = {
user_id: userId, user_uuid: userId,
provider: 'zoho', provider: 'zoho',
bulk_job_id: jobId bulk_job_id: jobId
}; };