Initial commit

This commit is contained in:
2025-10-13 00:23:31 -03:00
commit 42921527f8
725 changed files with 91395 additions and 0 deletions
+90
View File
@@ -0,0 +1,90 @@
import { Sequelize } from "sequelize-typescript";
import User from "../models/User";
import Setting from "../models/Setting";
import Contact from "../models/Contact";
import Ticket from "../models/Ticket";
import Whatsapp from "../models/Whatsapp";
import ContactCustomField from "../models/ContactCustomField";
import Message from "../models/Message";
import Queue from "../models/Queue";
import WhatsappQueue from "../models/WhatsappQueue";
import UserQueue from "../models/UserQueue";
import Company from "../models/Company";
import Plan from "../models/Plan";
import TicketNote from "../models/TicketNote";
import QuickMessage from "../models/QuickMessage";
import Help from "../models/Help";
import TicketTraking from "../models/TicketTraking";
import UserRating from "../models/UserRating";
import QueueOption from "../models/QueueOption";
import Schedule from "../models/Schedule";
import Tag from "../models/Tag";
import TicketTag from "../models/TicketTag";
import ContactList from "../models/ContactList";
import ContactListItem from "../models/ContactListItem";
import Campaign from "../models/Campaign";
import CampaignSetting from "../models/CampaignSetting";
import Baileys from "../models/Baileys";
import CampaignShipping from "../models/CampaignShipping";
import Announcement from "../models/Announcement";
import Chat from "../models/Chat";
import ChatUser from "../models/ChatUser";
import ChatMessage from "../models/ChatMessage";
import Invoices from "../models/Invoices";
import Subscriptions from "../models/Subscriptions";
import BaileysChats from "../models/BaileysChats";
import Files from "../models/Files";
import FilesOptions from "../models/FilesOptions";
import Prompt from "../models/Prompt";
import QueueIntegrations from "../models/QueueIntegrations";
// eslint-disable-next-line
const dbConfig = require("../config/database");
// import dbConfig from "../config/database";
const sequelize = new Sequelize(dbConfig);
const models = [
Company,
User,
Contact,
Ticket,
Message,
Whatsapp,
ContactCustomField,
Setting,
Queue,
WhatsappQueue,
UserQueue,
Plan,
TicketNote,
QuickMessage,
Help,
TicketTraking,
UserRating,
QueueOption,
Schedule,
Tag,
TicketTag,
ContactList,
ContactListItem,
Campaign,
CampaignSetting,
Baileys,
CampaignShipping,
Announcement,
Chat,
ChatUser,
ChatMessage,
Invoices,
Subscriptions,
BaileysChats,
Files,
FilesOptions,
Prompt,
QueueIntegrations,
];
sequelize.addModels(models);
export default sequelize;
@@ -0,0 +1,10 @@
import { QueryInterface, DataTypes, Sequelize } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.sequelize.query('CREATE EXTENSION IF NOT EXISTS "uuid-ossp"'),
]);
},
};
@@ -0,0 +1,39 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Users", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
name: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
passwordHash: {
type: DataTypes.STRING,
allowNull: false
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Users");
}
};
@@ -0,0 +1,37 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Contacts", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
name: {
type: DataTypes.STRING,
allowNull: false
},
number: {
type: DataTypes.STRING,
allowNull: false
},
profilePicUrl: {
type: DataTypes.STRING
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Contacts");
}
};
@@ -0,0 +1,46 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Tickets", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
status: {
type: DataTypes.STRING,
defaultValue: "pending",
allowNull: false
},
lastMessage: {
type: DataTypes.STRING
},
contactId: {
type: DataTypes.INTEGER,
references: { model: "Contacts", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE"
},
userId: {
type: DataTypes.INTEGER,
references: { model: "Users", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
},
createdAt: {
type: DataTypes.DATE(6),
allowNull: false
},
updatedAt: {
type: DataTypes.DATE(6),
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Tickets");
}
};
@@ -0,0 +1,58 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Messages", {
id: {
type: DataTypes.STRING,
primaryKey: true,
allowNull: false
},
body: {
type: DataTypes.TEXT,
allowNull: false
},
ack: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: 0
},
read: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
},
mediaType: {
type: DataTypes.STRING
},
mediaUrl: {
type: DataTypes.STRING
},
userId: {
type: DataTypes.INTEGER,
references: { model: "Users", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
},
ticketId: {
type: DataTypes.INTEGER,
references: { model: "Tickets", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
createdAt: {
type: DataTypes.DATE(6),
allowNull: false
},
updatedAt: {
type: DataTypes.DATE(6),
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Messages");
}
};
@@ -0,0 +1,41 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Whatsapps", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
session: {
type: DataTypes.TEXT
},
qrcode: {
type: DataTypes.TEXT
},
status: {
type: DataTypes.STRING
},
battery: {
type: DataTypes.STRING
},
plugged: {
type: DataTypes.BOOLEAN
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Whatsapps");
}
};
@@ -0,0 +1,41 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("ContactCustomFields", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
name: {
type: DataTypes.STRING,
allowNull: false
},
value: {
type: DataTypes.STRING,
allowNull: false
},
contactId: {
type: DataTypes.INTEGER,
references: { model: "Contacts", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("ContactCustomFields");
}
};
@@ -0,0 +1,15 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Contacts", "email", {
type: DataTypes.STRING,
allowNull: false,
defaultValue: ""
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Contacts", "email");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Messages", "userId");
},
down: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Messages", "userId", {
type: DataTypes.INTEGER,
references: { model: "Users", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
});
}
};
@@ -0,0 +1,15 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Messages", "fromMe", {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Messages", "fromMe");
}
};
@@ -0,0 +1,15 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.changeColumn("Tickets", "lastMessage", {
type: DataTypes.TEXT
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.changeColumn("Tickets", "lastMessage", {
type: DataTypes.STRING
});
}
};
@@ -0,0 +1,15 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Users", "profile", {
type: DataTypes.STRING,
allowNull: false,
defaultValue: "admin"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Users", "profile");
}
};
@@ -0,0 +1,29 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Settings", {
key: {
type: DataTypes.STRING,
primaryKey: true,
allowNull: false
},
value: {
type: DataTypes.TEXT,
allowNull: false
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Settings");
}
};
@@ -0,0 +1,15 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Whatsapps", "name", {
type: DataTypes.STRING,
allowNull: false,
unique: true
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Whatsapps", "name");
}
};
@@ -0,0 +1,15 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Whatsapps", "default", {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Whatsapps", "default");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Tickets", "whatsappId", {
type: DataTypes.INTEGER,
references: { model: "Whatsapps", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Tickets", "whatsappId");
}
};
@@ -0,0 +1,11 @@
import { QueryInterface } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.renameColumn("Whatsapps", "default", "isDefault");
},
down: (queryInterface: QueryInterface) => {
return queryInterface.renameColumn("Whatsapps", "isDefault", "default");
}
};
@@ -0,0 +1,15 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Messages", "isDeleted", {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Messages", "isDeleted");
}
};
@@ -0,0 +1,15 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Users", "tokenVersion", {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: 0
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Users", "tokenVersion");
}
};
@@ -0,0 +1,15 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Tickets", "isGroup", {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Tickets", "isGroup");
}
};
@@ -0,0 +1,15 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Contacts", "isGroup", {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Contacts", "isGroup");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Messages", "contactId", {
type: DataTypes.INTEGER,
references: { model: "Contacts", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Messages", "contactId");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Messages", "vcardContactId", {
type: DataTypes.INTEGER,
references: { model: "Contacts", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Messages", "vcardContactId");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Messages", "vcardContactId");
},
down: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Messages", "vcardContactId", {
type: DataTypes.INTEGER,
references: { model: "Contacts", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE"
});
}
};
@@ -0,0 +1,15 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Whatsapps", "retries", {
type: DataTypes.INTEGER,
defaultValue: 0,
allowNull: false
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Whatsapps", "retries");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Messages", "quotedMsgId", {
type: DataTypes.STRING,
references: { model: "Messages", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Messages", "quotedMsgId");
}
};
@@ -0,0 +1,13 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Tickets", "unreadMessages", {
type: DataTypes.INTEGER
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Tickets", "unreadMessages");
}
};
@@ -0,0 +1,39 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Queues", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
color: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
greetingMessage: {
type: DataTypes.TEXT
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Queues");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Tickets", "queueId", {
type: DataTypes.INTEGER,
references: { model: "Queues", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Tickets", "queueId");
}
};
@@ -0,0 +1,28 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("WhatsappQueues", {
whatsappId: {
type: DataTypes.INTEGER,
primaryKey: true
},
queueId: {
type: DataTypes.INTEGER,
primaryKey: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("WhatsappQueues");
}
};
@@ -0,0 +1,28 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("UserQueues", {
userId: {
type: DataTypes.INTEGER,
primaryKey: true
},
queueId: {
type: DataTypes.INTEGER,
primaryKey: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("UserQueues");
}
};
@@ -0,0 +1,13 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Whatsapps", "greetingMessage", {
type: DataTypes.TEXT
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Whatsapps", "greetingMessage");
}
};
@@ -0,0 +1,39 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Companies", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
phone: {
type: DataTypes.STRING,
allowNull: true
},
email: {
type: DataTypes.STRING,
allowNull: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Companies");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Settings", "companyId", {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Settings", "companyId");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Users", "companyId", {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Users", "companyId");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Contacts", "companyId", {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Contacts", "companyId");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Messages", "companyId", {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Messages", "companyId");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Queues", "companyId", {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Queues", "companyId");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Whatsapps", "companyId", {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Whatsapps", "companyId");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Tickets", "companyId", {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Tickets", "companyId");
}
};
@@ -0,0 +1,47 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Plans", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
users: {
type: DataTypes.INTEGER,
defaultValue: 0
},
connections: {
type: DataTypes.INTEGER,
defaultValue: 0
},
queues: {
type: DataTypes.INTEGER,
defaultValue: 0
},
value: {
type: DataTypes.FLOAT,
defaultValue: 0
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Plans");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Companies", "planId", {
type: DataTypes.INTEGER,
references: { model: "Plans", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Companies", "planId");
}
};
@@ -0,0 +1,23 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.addColumn("Companies", "status", {
type: DataTypes.BOOLEAN,
defaultValue: true
}),
queryInterface.addColumn("Companies", "schedules", {
type: DataTypes.JSONB,
defaultValue: []
})
]);
},
down: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.removeColumn("Companies", "schedules"),
queryInterface.removeColumn("Companies", "status")
]);
}
};
@@ -0,0 +1,49 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("TicketNotes", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
note: {
type: DataTypes.STRING,
allowNull: false
},
userId: {
type: DataTypes.INTEGER,
references: { model: "Users", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
},
contactId: {
type: DataTypes.INTEGER,
references: { model: "Contacts", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
ticketId: {
type: DataTypes.INTEGER,
references: { model: "Tickets", key: "id" },
onUpdate: "CASCADE",
onDelete: "SET NULL"
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Plans");
}
};
@@ -0,0 +1,40 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("QuickMessages", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
shortcode: {
type: DataTypes.STRING,
allowNull: false
},
message: {
type: DataTypes.STRING,
allowNull: false
},
companyId: {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE"
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("QuickMessages");
}
};
@@ -0,0 +1,13 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Whatsapps", "complationMessage", {
type: DataTypes.TEXT
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Whatsapps", "complationMessage");
}
};
@@ -0,0 +1,13 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Whatsapps", "outOfHoursMessage", {
type: DataTypes.TEXT
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Whatsapps", "outOfHoursMessage");
}
};
@@ -0,0 +1,14 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Users", "super", {
type: DataTypes.BOOLEAN,
defaultValue: false
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Users", "super");
}
};
@@ -0,0 +1,14 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.changeColumn("QuickMessages", "message", {
type: DataTypes.TEXT
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.changeColumn("QuickMessages", "message", {
type: DataTypes.STRING
});
}
};
@@ -0,0 +1,42 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Helps", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
title: {
type: DataTypes.STRING,
allowNull: false
},
description: {
type: DataTypes.TEXT,
allowNull: true
},
video: {
type: DataTypes.STRING,
allowNull: true
},
link: {
type: DataTypes.TEXT,
allowNull: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Helps");
}
};
@@ -0,0 +1,17 @@
import { QueryInterface } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addConstraint("Contacts", ["number", "companyId"], {
type: "unique",
name: "number_companyid_unique"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeConstraint(
"Contacts",
"number_companyid_unique"
);
}
};
@@ -0,0 +1,60 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("TicketTraking", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
ticketId: {
type: DataTypes.INTEGER,
references: { model: "Tickets", key: "id" },
onDelete: "SET NULL"
},
companyId: {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onDelete: "SET NULL"
},
whatsappId: {
type: DataTypes.INTEGER,
references: { model: "Whatsapps", key: "id" },
onDelete: "SET NULL",
allowNull: true
},
userId: {
type: DataTypes.INTEGER,
references: { model: "Users", key: "id" },
onDelete: "SET NULL",
allowNull: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: true
},
updatedAt: {
type: DataTypes.DATE,
allowNull: true
},
queuedAt: {
type: DataTypes.DATE,
allowNull: true
},
startedAt: {
type: DataTypes.DATE,
allowNull: true
},
finishedAt: {
type: DataTypes.DATE,
allowNull: true
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("TicketTraking");
}
};
@@ -0,0 +1,14 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Users", "online", {
type: DataTypes.BOOLEAN,
defaultValue: false
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Users", "online");
}
};
@@ -0,0 +1,46 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("UserRatings", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
ticketId: {
type: DataTypes.INTEGER,
references: { model: "Tickets", key: "id" },
onDelete: "SET NULL"
},
companyId: {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onDelete: "SET NULL"
},
userId: {
type: DataTypes.INTEGER,
references: { model: "Users", key: "id" },
onDelete: "SET NULL",
allowNull: true
},
rate: {
type: DataTypes.INTEGER,
defaultValue: 0
},
createdAt: {
type: DataTypes.DATE,
allowNull: true
},
updatedAt: {
type: DataTypes.DATE,
allowNull: true
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("UserRatings");
}
};
@@ -0,0 +1,24 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.addColumn("TicketTraking", "ratingAt", {
type: DataTypes.DATE,
allowNull: true,
defaultValue: null
}),
queryInterface.addColumn("TicketTraking", "rated", {
type: DataTypes.BOOLEAN,
defaultValue: false
})
]);
},
down: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.removeColumn("TicketTraking", "ratingAt"),
queryInterface.removeColumn("TicketTraking", "rated")
]);
}
};
@@ -0,0 +1,13 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Whatsapps", "ratingMessage", {
type: DataTypes.TEXT
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Whatsapps", "ratingMessage");
}
};
@@ -0,0 +1,17 @@
import { QueryInterface } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addConstraint("Tickets", ["contactId", "companyId"], {
type: "unique",
name: "contactid_companyid_unique"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeConstraint(
"Tickets",
"contactid_companyid_unique"
);
}
};
@@ -0,0 +1,17 @@
import { QueryInterface, DataTypes, Sequelize } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.addColumn("Tickets", "uuid", {
type: DataTypes.UUID,
allowNull: true,
defaultValue: Sequelize.literal('uuid_generate_v4()')
})
]);
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Tickets", "uuid");
}
};
@@ -0,0 +1,25 @@
import { QueryInterface } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.removeConstraint("Queues", "Queues_color_key"),
queryInterface.removeConstraint("Queues", "Queues_name_key"),
queryInterface.removeIndex("Queues", "Queues_color_key"),
queryInterface.removeIndex("Queues", "Queues_name_key"),
]);
},
down: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.addConstraint("Queues", ["color"], {
name: "Queues_color_key",
type: 'unique'
}),
queryInterface.addConstraint("Queues", ["name"], {
name: "Queues_name_key",
type: 'unique'
}),
]);
}
};
@@ -0,0 +1,23 @@
import { QueryInterface } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.addConstraint("Queues", ["color", "companyId"], {
name: "Queues_color_key",
type: 'unique'
}),
queryInterface.addConstraint("Queues", ["name", "companyId"], {
name: "Queues_name_key",
type: 'unique'
}),
]);
},
down: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.removeConstraint("Queues", "Queues_color_key"),
queryInterface.removeConstraint("Queues", "Queues_name_key"),
]);
}
};
@@ -0,0 +1,14 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Whatsapps", "token", {
type: DataTypes.TEXT,
allowNull: true
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Whatsapps", "token");
}
};
@@ -0,0 +1,51 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("QueueOptions", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
title: {
type: DataTypes.STRING,
allowNull: false,
},
message: {
type: DataTypes.TEXT,
allowNull: true,
},
option: {
type: DataTypes.TEXT,
allowNull: true,
},
queueId: {
type: DataTypes.INTEGER,
references: { model: "Queues", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE"
},
parentId: {
type: DataTypes.INTEGER,
references: { model: "QueueOptions", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("QueueOptions");
}
};
@@ -0,0 +1,24 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.addColumn("Tickets", "chatbot", {
type: DataTypes.BOOLEAN,
allowNull: true,
defaultValue: false
}),
queryInterface.addColumn("Tickets", "queueOptionId", {
type: DataTypes.INTEGER,
references: { model: "QueueOptions", key: "id" },
onUpdate: "SET null",
onDelete: "SET null",
allowNull: true
})
]);
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Tickets", "chatbot");
}
};
@@ -0,0 +1,66 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Schedules", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
body: {
type: DataTypes.TEXT,
allowNull: false
},
sendAt: {
type: DataTypes.DATE,
allowNull: true
},
sentAt: {
type: DataTypes.DATE,
allowNull: true
},
contactId: {
type: DataTypes.INTEGER,
references: { model: "Contacts", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: true
},
ticketId: {
type: DataTypes.INTEGER,
references: { model: "Tickets", key: "id" },
onUpdate: "SET NULL",
onDelete: "SET NULL",
allowNull: true
},
userId: {
type: DataTypes.INTEGER,
references: { model: "Users", key: "id" },
onUpdate: "SET NULL",
onDelete: "SET NULL",
allowNull: true
},
companyId: {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Schedules");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("QuickMessages", "userId", {
type: DataTypes.INTEGER,
references: { model: "Users", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("QuickMessages", "userId");
}
};
@@ -0,0 +1,41 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Tags", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
name: {
type: DataTypes.STRING,
allowNull: false
},
color: {
type: DataTypes.STRING,
allowNull: true
},
companyId: {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Tags");
}
};
@@ -0,0 +1,34 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("TicketTags", {
ticketId: {
type: DataTypes.INTEGER,
references: { model: "Tickets", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
tagId: {
type: DataTypes.INTEGER,
references: { model: "Tags", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("TicketTags");
}
};
@@ -0,0 +1,14 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Schedules", "status", {
type: DataTypes.STRING,
allowNull: true
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Schedules", "status");
}
};
@@ -0,0 +1,13 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Whatsapps", "farewellMessage", {
type: DataTypes.TEXT
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Whatsapps", "farewellMessage");
}
};
@@ -0,0 +1,14 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Whatsapps", "provider", {
type: DataTypes.TEXT,
defaultValue: "stable"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Whatsapps", "provider");
}
};
@@ -0,0 +1,13 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Messages", "remoteJid", {
type: DataTypes.TEXT
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Messages", "remoteJid");
}
};
@@ -0,0 +1,13 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Messages", "dataJson", {
type: DataTypes.TEXT
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Messages", "dataJson");
}
};
@@ -0,0 +1,13 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Messages", "participant", {
type: DataTypes.TEXT
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Messages", "participant");
}
};
@@ -0,0 +1,38 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Baileys", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
whatsappId: {
type: DataTypes.INTEGER,
primaryKey: true
},
contacts: {
type: DataTypes.TEXT,
allowNull: true
},
chats: {
type: DataTypes.TEXT,
allowNull: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Baileys");
}
};
@@ -0,0 +1,37 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("ContactLists", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
name: {
type: DataTypes.STRING,
allowNull: false
},
companyId: {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("ContactLists");
}
};
@@ -0,0 +1,56 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("ContactListItems", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
name: {
type: DataTypes.STRING,
allowNull: false
},
number: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: true
},
contactListId: {
type: DataTypes.INTEGER,
references: { model: "ContactLists", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
isWhatsappValid: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
companyId: {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("ContactListItems");
}
};
@@ -0,0 +1,126 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Campaigns", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
name: {
type: DataTypes.STRING,
allowNull: false
},
message1: {
type: DataTypes.TEXT,
allowNull: true,
defaultValue: ""
},
message2: {
type: DataTypes.TEXT,
allowNull: true,
defaultValue: ""
},
message3: {
type: DataTypes.TEXT,
allowNull: true,
defaultValue: ""
},
message4: {
type: DataTypes.TEXT,
allowNull: true,
defaultValue: ""
},
message5: {
type: DataTypes.TEXT,
allowNull: true,
defaultValue: ""
},
confirmationMessage1: {
type: DataTypes.TEXT,
allowNull: true,
defaultValue: ""
},
confirmationMessage2: {
type: DataTypes.TEXT,
allowNull: true,
defaultValue: ""
},
confirmationMessage3: {
type: DataTypes.TEXT,
allowNull: true,
defaultValue: ""
},
confirmationMessage4: {
type: DataTypes.TEXT,
allowNull: true,
defaultValue: ""
},
confirmationMessage5: {
type: DataTypes.TEXT,
allowNull: true,
defaultValue: ""
},
status: {
type: DataTypes.STRING,
allowNull: true
},
confirmation: {
type: DataTypes.BOOLEAN,
allowNull: true,
defaultValue: false
},
mediaPath: {
type: DataTypes.TEXT,
allowNull: true
},
mediaName: {
type: DataTypes.TEXT,
allowNull: true
},
companyId: {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
contactListId: {
type: DataTypes.INTEGER,
references: { model: "ContactLists", key: "id" },
onUpdate: "SET NULL",
onDelete: "SET NULL",
allowNull: true
},
whatsappId: {
type: DataTypes.INTEGER,
references: { model: "Whatsapps", key: "id" },
onUpdate: "SET NULL",
onDelete: "SET NULL",
allowNull: true
},
scheduledAt: {
type: DataTypes.DATE,
allowNull: true
},
completedAt: {
type: DataTypes.DATE,
allowNull: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Campaigns");
}
};
@@ -0,0 +1,41 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("CampaignSettings", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
key: {
type: DataTypes.STRING,
allowNull: false
},
value: {
type: DataTypes.TEXT,
allowNull: true
},
companyId: {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("CampaignSettings");
}
};
@@ -0,0 +1,27 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.sequelize.query('DELETE FROM "Settings"'),
queryInterface.removeConstraint("Settings", "Settings_pkey"),
queryInterface.addColumn("Settings", "id", {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
})
]);
},
down: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.sequelize.query('DELETE FROM "Settings"'),
queryInterface.removeColumn("Settings", "id"),
queryInterface.addConstraint("Settings", ["key"], {
type: "primary key",
name: "Settings_pkey"
})
]);
}
};
@@ -0,0 +1,72 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("CampaignShipping", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
jobId: {
type: DataTypes.STRING,
allowNull: true
},
number: {
type: DataTypes.STRING,
allowNull: false
},
message: {
type: DataTypes.TEXT,
allowNull: false
},
confirmationMessage: {
type: DataTypes.TEXT,
allowNull: true
},
confirmation: {
type: DataTypes.BOOLEAN,
allowNull: true
},
contactId: {
type: DataTypes.INTEGER,
references: { model: "ContactListItems", key: "id" },
onUpdate: "SET NULL",
onDelete: "SET NULL",
allowNull: true
},
campaignId: {
type: DataTypes.INTEGER,
references: { model: "Campaigns", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
confirmationRequestedAt: {
type: DataTypes.DATE,
allowNull: true
},
confirmedAt: {
type: DataTypes.DATE,
allowNull: true
},
deliveredAt: {
type: DataTypes.DATE,
allowNull: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("CampaignShipping");
}
};
@@ -0,0 +1,16 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Messages", "queueId", {
type: DataTypes.INTEGER,
references: { model: "Queues", key: "id" },
onUpdate: "SET NULL",
onDelete: "SET NULL"
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Messages", "queueId");
}
};
@@ -0,0 +1,14 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Companies", "dueDate", {
type: DataTypes.DATE,
allowNull: true
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Companies", "dueDate");
}
};
@@ -0,0 +1,15 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Companies", "recurrence", {
type: DataTypes.STRING,
allowNull: true,
defaultValue: ""
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Companies", "recurrence");
}
};
@@ -0,0 +1,28 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.addColumn("Queues", "startTime", {
type: DataTypes.STRING,
defaultValue: null
}),
queryInterface.addColumn("Queues", "endTime", {
type: DataTypes.STRING,
defaultValue: null
}),
queryInterface.addColumn("Queues", "outOfHoursMessage", {
type: DataTypes.TEXT,
defaultValue: null
})
]);
},
down: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.removeColumn("Queues", "startTime"),
queryInterface.removeColumn("Queues", "endTime"),
queryInterface.removeColumn("Queues", "outOfHoursMessage")
]);
}
};
@@ -0,0 +1,28 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.removeColumn("Queues", "startTime"),
queryInterface.removeColumn("Queues", "endTime"),
queryInterface.removeColumn("Queues", "outOfHoursMessage")
]);
},
down: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.addColumn("Queues", "startTime", {
type: DataTypes.STRING,
defaultValue: null
}),
queryInterface.addColumn("Queues", "endTime", {
type: DataTypes.STRING,
defaultValue: null
}),
queryInterface.addColumn("Queues", "outOfHoursMessage", {
type: DataTypes.TEXT,
defaultValue: null
})
]);
}
};
@@ -0,0 +1,23 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.addColumn("Queues", "schedules", {
type: DataTypes.JSONB,
defaultValue: []
}),
queryInterface.addColumn("Queues", "outOfHoursMessage", {
type: DataTypes.TEXT,
allowNull: true
})
]);
},
down: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.removeColumn("Queues", "schedules"),
queryInterface.removeColumn("Queues", "outOfHoursMessage")
]);
}
};
@@ -0,0 +1,57 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Announcements", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
priority: {
type: DataTypes.INTEGER,
allowNull: true
},
title: {
type: DataTypes.STRING,
allowNull: false
},
text: {
type: DataTypes.TEXT,
allowNull: false
},
mediaPath: {
type: DataTypes.TEXT,
allowNull: true
},
mediaName: {
type: DataTypes.TEXT,
allowNull: true
},
companyId: {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
status: {
type: DataTypes.BOOLEAN,
allowNull: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Announcements");
}
};
@@ -0,0 +1,54 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Chats", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
title: {
type: DataTypes.TEXT,
defaultValue: "",
allowNull: true
},
uuid: {
type: DataTypes.STRING,
defaultValue: "",
allowNull: true
},
ownerId: {
type: DataTypes.INTEGER,
references: { model: "Users", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
lastMessage: {
type: DataTypes.TEXT,
allowNull: true
},
companyId: {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Chats");
}
};
@@ -0,0 +1,44 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("ChatUsers", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
chatId: {
type: DataTypes.INTEGER,
references: { model: "Chats", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
userId: {
type: DataTypes.INTEGER,
references: { model: "Users", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
unreads: {
type: DataTypes.INTEGER,
defaultValue: 0
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("ChatUsers");
}
};
@@ -0,0 +1,53 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("ChatMessages", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
chatId: {
type: DataTypes.INTEGER,
references: { model: "Chats", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
senderId: {
type: DataTypes.INTEGER,
references: { model: "Users", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE",
allowNull: false
},
message: {
type: DataTypes.TEXT,
allowNull: true,
defaultValue: ""
},
mediaPath: {
type: DataTypes.TEXT,
allowNull: true
},
mediaName: {
type: DataTypes.TEXT,
allowNull: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("ChatMessages");
}
};
@@ -0,0 +1,37 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.addIndex("Schedules", ["companyId"], {
name: "idx_sched_company_id"
}),
queryInterface.addIndex("Contacts", ["companyId"], {
name: "idx_cont_company_id"
}),
queryInterface.addIndex("Tags", ["companyId"], {
name: "idx_tg_company_id"
}),
queryInterface.addIndex("Messages", ["companyId", "ticketId"], {
name: "idx_ms_company_id_ticket_id"
}),
queryInterface.addIndex("CampaignShipping", ["campaignId"], {
name: "idx_cpsh_campaign_id"
}),
queryInterface.addIndex("ContactListItems", ["contactListId"], {
name: "idx_ctli_contact_list_id"
})
]);
},
down: (queryInterface: QueryInterface) => {
return Promise.all([
queryInterface.removeIndex("Schedules", "idx_sched_company_id"),
queryInterface.removeIndex("Contacts", "idx_cont_company_id"),
queryInterface.removeIndex("Tags", "idx_tg_company_id"),
queryInterface.removeIndex("Messages", "idx_ms_company_id_ticket_id"),
queryInterface.removeIndex("CampaignShipping", "idx_cpsh_campaign_id"),
queryInterface.removeIndex("ContactListItems", "idx_ctli_contact_list_id")
]);
}
};
@@ -0,0 +1,58 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Subscriptions", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
isActive: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
expiresAt: {
type: DataTypes.DATE,
allowNull: false
},
userPriceCents: {
type: DataTypes.INTEGER
},
whatsPriceCents: {
type: DataTypes.INTEGER
},
lastInvoiceUrl: {
type: DataTypes.STRING,
allowNull: true
},
lastPlanChange: {
type: DataTypes.DATE,
allowNull: true
},
companyId: {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE"
},
providerSubscriptionId: {
type: DataTypes.STRING,
allowNull: false
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Subscriptions");
}
};
@@ -0,0 +1,44 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("Invoices", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
detail: {
type: DataTypes.STRING,
},
status: {
type: DataTypes.STRING,
},
value: {
type: DataTypes.FLOAT
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
},
dueDate: {
type: DataTypes.STRING,
},
companyId: {
type: DataTypes.INTEGER,
references: { model: "Companies", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE"
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("Invoices");
}
};
@@ -0,0 +1,15 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("QuickMessages", "mediaPath", {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("QuickMessages", "mediaPath");
}
};
@@ -0,0 +1,15 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("QuickMessages", "mediaName", {
type: DataTypes.STRING,
allowNull: true,
defaultValue: null
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("QuickMessages", "mediaName");
}
};
@@ -0,0 +1,44 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("BaileysChats", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
whatsappId: {
type: DataTypes.INTEGER,
references: { model: "Whatsapps", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE"
},
jid: {
type: DataTypes.STRING,
allowNull: false
},
conversationTimestamp: {
type: DataTypes.STRING,
allowNull: false
},
unreadCount: {
type: DataTypes.INTEGER,
defaultValue: 0
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("BaileysChats");
}
};
@@ -0,0 +1,42 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.createTable("BaileysMessages", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
whatsappId: {
type: DataTypes.INTEGER,
references: { model: "Whatsapps", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE"
},
baileysChatId: {
type: DataTypes.INTEGER,
references: { model: "BaileysChats", key: "id" },
onUpdate: "CASCADE",
onDelete: "CASCADE"
},
jsonMessage: {
type: DataTypes.JSON,
allowNull: false
},
createdAt: {
type: DataTypes.DATE,
allowNull: false
},
updatedAt: {
type: DataTypes.DATE,
allowNull: false
}
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.dropTable("BaileysMessages");
}
};
@@ -0,0 +1,14 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Plans", "useCampaigns", {
type: DataTypes.BOOLEAN,
defaultValue: true
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Plans", "useCampaigns");
}
};
@@ -0,0 +1,14 @@
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: (queryInterface: QueryInterface) => {
return queryInterface.addColumn("Plans", "useExternalApi", {
type: DataTypes.BOOLEAN,
defaultValue: true
});
},
down: (queryInterface: QueryInterface) => {
return queryInterface.removeColumn("Plans", "useExternalApi");
}
};

Some files were not shown because too many files have changed in this diff Show More