47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
const { findSellerByDomain } = require("../db/seller.db")
|
|
const { getSellerById, getSellerIdByDomain } = require("./redis/sellerCache.service")
|
|
|
|
function normalizeDomain(hostname) {
|
|
return hostname.replace(/^www\./, "")
|
|
}
|
|
|
|
async function findSellerFromLink(url) {
|
|
let hostname
|
|
|
|
try {
|
|
hostname = new URL(url).hostname
|
|
} catch {
|
|
return null
|
|
}
|
|
|
|
const domain = normalizeDomain(hostname)
|
|
|
|
const cachedSellerId = await getSellerIdByDomain(domain)
|
|
if (cachedSellerId) {
|
|
const cachedSeller = await getSellerById(cachedSellerId)
|
|
if (cachedSeller) return cachedSeller
|
|
}
|
|
|
|
const seller = await findSellerByDomain(domain)
|
|
if (seller) return seller
|
|
|
|
const domainParts = domain.split(".")
|
|
for (let i = 1; i <= domainParts.length - 2; i += 1) {
|
|
const parentDomain = domainParts.slice(i).join(".")
|
|
const cachedParentId = await getSellerIdByDomain(parentDomain)
|
|
if (cachedParentId) {
|
|
const cachedParent = await getSellerById(cachedParentId)
|
|
if (cachedParent) return cachedParent
|
|
}
|
|
|
|
const parentSeller = await findSellerByDomain(parentDomain)
|
|
if (parentSeller) return parentSeller
|
|
}
|
|
|
|
return null
|
|
}
|
|
|
|
module.exports = {
|
|
findSellerFromLink,
|
|
}
|