Kaynağa Gözat

commit aja deh

yazid138 3 yıl önce
ebeveyn
işleme
65ed20b8c3

+ 78 - 0
controller/pengunjung.controller.js

@@ -59,6 +59,84 @@ exports.getPengunjung = handleError(async (req, res) => {
         },
       },
     },
+    {
+      $sort: {
+        ['_id.bulan']: 1,
+      },
+    },
+  ])
+
+  return response.success(res, {
+    message: 'data pengunjung',
+    data: pengunjung,
+  })
+})
+
+exports.getPengunjungPublic = handleError(async (req, res) => {
+  const { tahun, bulan } = req.query
+
+  let date = {}
+  if (tahun || bulan) {
+    date = {
+      $expr: {
+        $and: [
+          {
+            $eq: [
+              { $year: '$createdAt' },
+              parseInt(tahun) || new Date().getFullYear(),
+            ],
+          },
+          {
+            $eq: [
+              { $month: '$createdAt' },
+              parseInt(bulan) || new Date().getMonth() + 1,
+            ],
+          },
+        ],
+      },
+    }
+  }
+
+  const pengunjung = await pengunjungModel.aggregate([
+    { $match: date },
+    {
+      $group: {
+        _id: {
+          tanggal: {
+            $dayOfMonth: '$createdAt',
+          },
+          bulan: {
+            $month: '$createdAt',
+          },
+          tahun: {
+            $year: '$createdAt',
+          },
+        },
+        jumlah_pengunjung: {
+          $sum: 1,
+        },
+        data_ip: {
+          $addToSet: '$ipv4',
+        },
+      },
+    },
+    {
+      $addFields: {
+        jumlah_pengunjung: {
+          $size: '$data_ip',
+        },
+      },
+    },
+    {
+      $project: {
+        data_ip: 0,
+      },
+    },
+    {
+      $sort: {
+        ['_id.tanggal']: 1,
+      },
+    },
   ])
 
   return response.success(res, {

+ 2 - 0
routes/v1/public.routes.js

@@ -6,6 +6,7 @@ const laporan = require('../../controller/laporan.controller')
 const pemantauan = require('../../controller/pemantauan.controller')
 const handleDokumen = require('../../utils/handleDokumen')
 const auth = require('../../middleware/verifyTokenPublic')
+const pengunjung = require('../../controller/pengunjung.controller')
 
 router.get('/pt', pt.public)
 router.get('/pelanggaran', pelanggaran.public)
@@ -18,5 +19,6 @@ router.post(
   laporan.public
 )
 router.post('/user/create', handleDokumen.single('foto'), user.addUserPublic)
+router.get('/pengunjung', pengunjung.getPengunjungPublic)
 
 module.exports = router

+ 5 - 0
utils/cekData.js

@@ -204,6 +204,11 @@ exports.dataLaporanAggregate = async (user, where, aggregate) => {
   const laporan = await laporanModel.aggregate([
     { $match: w },
     { $group: aggregate },
+    {
+      $sort: {
+        ['_id.bulan']: 1,
+      },
+    },
   ])
 
   return laporan