Эх сурвалжийг харах

Check for limit when creating a visit

poeti8 6 жил өмнө
parent
commit
43bfbf59ca

+ 7 - 1
server/controllers/urlController.js

@@ -10,6 +10,7 @@ const ua = require('universal-analytics');
 const isbot = require('isbot');
 const { addIPCooldown } = require('../db/user');
 const {
+  addUrlCount,
   createShortUrl,
   createVisit,
   deleteCustomDomain,
@@ -32,7 +33,7 @@ const {
 } = require('./validateBodyController');
 const transporter = require('../mail/mail');
 const redis = require('../redis');
-const { addProtocol, generateShortUrl, getStatsCacheTime } = require('../utils');
+const { addProtocol, getStatsLimit, generateShortUrl, getStatsCacheTime } = require('../utils');
 
 const dnsLookup = promisify(dns.lookup);
 
@@ -160,12 +161,14 @@ exports.goToUrl = async (req, res, next) => {
     req.pageType = 'password';
     return next();
   }
+
   if (url.password) {
     const isMatch = await bcrypt.compare(req.body.password, url.password);
     if (!isMatch) {
       return res.status(401).json({ error: 'Password is not correct' });
     }
     if (url.user && !isBot) {
+      addUrlCount(url.id, domain);
       createVisit({
         browser,
         country: country || 'Unknown',
@@ -173,11 +176,13 @@ exports.goToUrl = async (req, res, next) => {
         id: url.id,
         os,
         referrer: referrer || 'Direct',
+        limit: getStatsLimit(url),
       });
     }
     return res.status(200).json({ target: url.target });
   }
   if (url.user && !isBot) {
+    addUrlCount(url.id, domain);
     createVisit({
       browser,
       country: country || 'Unknown',
@@ -185,6 +190,7 @@ exports.goToUrl = async (req, res, next) => {
       id: url.id,
       os,
       referrer: referrer || 'Direct',
+      limit: getStatsLimit(url),
     });
   }
 

+ 2 - 1
server/db/url.js

@@ -72,7 +72,7 @@ exports.createVisit = async params => {
   const session = driver.session();
   const { records = [] } = await session.writeTransaction(tx =>
     tx.run(
-      'MATCH (l:URL { id: $id }) ' +
+      'MATCH (l:URL { id: $id }) WHERE l.count < $limit' +
         `${params.domain ? 'MATCH (l)-[:USES]->({ name: $domain })' : ''} ` +
         'CREATE (v:VISIT)' +
         'MERGE (b:BROWSER { browser: $browser })' +
@@ -95,6 +95,7 @@ exports.createVisit = async params => {
         os: params.os,
         referrer: params.referrer,
         date: getUTCDate().toJSON(),
+        limit: params.limit,
       }
     )
   );