40346-vm/backend/src/db/models/businesses.js
2026-06-29 06:02:08 +00:00

385 lines
4.8 KiB
JavaScript

module.exports = function(sequelize, DataTypes) {
const businesses = sequelize.define(
'businesses',
{
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
name: {
type: DataTypes.TEXT,
},
google_review_link: {
type: DataTypes.TEXT,
},
yelp_review_link: {
type: DataTypes.TEXT,
},
facebook_review_link: {
type: DataTypes.TEXT,
},
delay_days: {
type: DataTypes.INTEGER,
},
email_subject_template: {
type: DataTypes.TEXT,
},
email_body_template: {
type: DataTypes.TEXT,
},
is_active: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false,
},
stripe_account_reference: {
type: DataTypes.TEXT,
},
stripe_connected: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false,
},
stripe_connected_at: {
type: DataTypes.DATE,
},
stripe_webhook_token: {
type: DataTypes.TEXT,
},
square_account_reference: {
type: DataTypes.TEXT,
},
square_connected: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false,
},
square_connected_at: {
type: DataTypes.DATE,
},
square_webhook_token: {
type: DataTypes.TEXT,
},
paypal_merchant_reference: {
type: DataTypes.TEXT,
},
paypal_connected: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false,
},
paypal_connected_at: {
type: DataTypes.DATE,
},
paypal_webhook_token: {
type: DataTypes.TEXT,
},
shopify_store_reference: {
type: DataTypes.TEXT,
},
shopify_connected: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false,
},
shopify_connected_at: {
type: DataTypes.DATE,
},
shopify_webhook_token: {
type: DataTypes.TEXT,
},
woocommerce_store_reference: {
type: DataTypes.TEXT,
},
woocommerce_connected: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false,
},
woocommerce_connected_at: {
type: DataTypes.DATE,
},
woocommerce_webhook_token: {
type: DataTypes.TEXT,
},
default_review_platform: {
type: DataTypes.ENUM,
values: [
"google",
"yelp",
"facebook",
"custom"
],
},
custom_review_link: {
type: DataTypes.TEXT,
},
review_destination: {
type: DataTypes.TEXT,
},
trustpilot_review_link: {
type: DataTypes.TEXT,
},
angi_review_link: {
type: DataTypes.TEXT,
},
opentable_review_link: {
type: DataTypes.TEXT,
},
shopify_hosted_reviews_enabled: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false,
},
importHash: {
type: DataTypes.STRING(255),
allowNull: true,
unique: true,
},
},
{
timestamps: true,
paranoid: true,
freezeTableName: true,
},
);
businesses.associate = (db) => {
/// loop through entities and it's fields, and if ref === current e[name] and create relation has many on parent entity
db.businesses.hasMany(db.customers, {
as: 'customers_business',
foreignKey: {
name: 'businessId',
},
constraints: false,
});
db.businesses.hasMany(db.review_requests, {
as: 'review_requests_business',
foreignKey: {
name: 'businessId',
},
constraints: false,
});
db.businesses.hasMany(db.stripe_events, {
as: 'stripe_events_business',
foreignKey: {
name: 'businessId',
},
constraints: false,
});
db.businesses.hasMany(db.transactions, {
as: 'transactions_business',
foreignKey: {
name: 'businessId',
},
constraints: false,
});
//end loop
db.businesses.belongsTo(db.users, {
as: 'owner',
foreignKey: {
name: 'ownerId',
},
constraints: false,
});
db.businesses.belongsTo(db.users, {
as: 'createdBy',
});
db.businesses.belongsTo(db.users, {
as: 'updatedBy',
});
};
return businesses;
};