From 061f9121b9037ad3cad662201882a82186c08f6d Mon Sep 17 00:00:00 2001 From: Aarish <118203269+ImprobableGenius@users.noreply.github.com> Date: Sat, 24 May 2025 18:37:36 -0500 Subject: [PATCH] add insert validation --- models/SiteModel.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/models/SiteModel.js b/models/SiteModel.js index 1b15056..2a99592 100644 --- a/models/SiteModel.js +++ b/models/SiteModel.js @@ -3,6 +3,7 @@ */ const { supabase } = require('../auth'); +const { isValidDomain } = require('../helpers/utils'); class SiteModel { @@ -17,6 +18,21 @@ class SiteModel { * @returns {Promise} - The result of the insert operation. */ async insert(name, domainName) { + // validate inputs + if (!name || !domainName) { + throw new Error('Name and domain name are required to insert a site.'); + } + + // validate domain name format + if (!isValidDomain(domainName)) { + throw new Error('Invalid domain name format.'); + } + + // check if the domain name already exists + if (await this.getByDomainName(domainName).then(data => data.length !== 0)) { + throw new Error('Domain name already exists.'); + } + const { data, error } = await supabase.from(SiteModel.tableName).insert({ name: name, domain_name: domainName, @@ -64,6 +80,24 @@ class SiteModel { return data; } + /** + * Retrieves a site by its domain name. + * + * @param {string} domainName - The domain name of the site. + * + * @returns {Promise} - The site object. + */ + async getByDomainName(domainName) { + const { data, error } = await supabase.from(SiteModel.tableName).select('*').eq('domain_name', domainName); + + if (error) { + console.error('Error fetching site by domain name:', error); + throw error; + } + + return data; + } + } module.exports = SiteModel; \ No newline at end of file