| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | 
							- const pengunjungModel = require('../../model/pengunjung.model')
 
- const handleError = require('../../utils/v1/handleError')
 
- const response = require('../../utils/responseHandler')
 
- const { validate } = require('../../utils/v1/validation')
 
- exports.create = handleError(async (req, res) => {
 
-   const { os, ipv4, location } = req.body
 
-   const isValid = validate(res, req.body, {
 
-     os: 'string',
 
-     ipv4: 'string',
 
-     location: {
 
-       $$type: 'object',
 
-       country: 'string',
 
-       region: 'string',
 
-       city: 'string',
 
-       lat: 'number',
 
-       lon: 'number',
 
-       timezone: 'string',
 
-     },
 
-   })
 
-   if (!isValid) return
 
-   await pengunjungModel.create({ os, ipv4, location })
 
-   return response.success(res, {
 
-     message: 'data pengunjung berhasil dibuat',
 
-   })
 
- })
 
- exports.getPengunjung = handleError(async (req, res) => {
 
-   const { tahun } = req.query
 
-   let date = {}
 
-   if (tahun) {
 
-     date = {
 
-       $expr: {
 
-         $eq: [
 
-           { $year: '$createdAt' },
 
-           parseInt(tahun) || new Date().getFullYear(),
 
-         ],
 
-       },
 
-     }
 
-   }
 
-   const pengunjung = await pengunjungModel.aggregate([
 
-     { $match: date },
 
-     {
 
-       $group: {
 
-         _id: {
 
-           bulan: {
 
-             $month: '$createdAt',
 
-           },
 
-           tahun: {
 
-             $year: '$createdAt',
 
-           },
 
-         },
 
-         jumlah_pengunjung: {
 
-           $sum: 1,
 
-         },
 
-       },
 
-     },
 
-     {
 
-       $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, {
 
-     message: 'data pengunjung',
 
-     data: pengunjung,
 
-   })
 
- })
 
 
  |