| 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,
- })
- })
|