const catchAsync = require('../../globalErrorHandler/catchAsync') const propertyService = require('./propertyService') const { eventEmitter } = require('../../events/eventEmitter') exports.searchProperties = catchAsync(async (req, res, next) => { const { facets, belongings, totalCount, pagesCount, searchEngine } = await propertyService.searchProperties(req.query) res.status(200).json({ status: 'success', facets, properties: belongings, totalCount, pagesCount, searchEngine, }) }) exports.searchPropertiesMongo = catchAsync(async (req, res, next) => { const { facets, belongings, totalCount, pagesCount, searchEngine } = await propertyService.searchPropertiesMongo(req.query) res.status(200).json({ status: 'success', facets, properties: belongings, totalCount, pagesCount, searchEngine: searchEngine || 'mongo', }) }) exports.indexAllProperties = catchAsync(async (req, res, next) => { const { indexedCount } = await propertyService.indexAllProperties() res.status(200).json({ status: 'success', indexedCount, }) }) exports.indexOneProperty = catchAsync(async (req, res, next) => { await propertyService.indexOneProperty(req.params.propertyId) res.status(200).json({ status: 'success', }) }) exports.getAllProperties = catchAsync(async (req, res, next) => { const properties = await propertyService.getAllProperties() res.status(200).json({ status: 'success', results: properties.length, data: properties, }) }) exports.createProperty = catchAsync(async (req, res, next) => { const property = await propertyService.createProperty(req.body) eventEmitter.emit('createProperty', property) res.status(201).json({ status: 'success', data: property, }) }) exports.getProperty = catchAsync(async (req, res, next) => { const property = await propertyService.getProperty(req.params.propertyId) res.status(200).json({ status: 'success', data: property, }) }) exports.updateProperty = catchAsync(async (req, res, next) => { const property = await propertyService.updateProperty(req.params.propertyId, req.body) eventEmitter.emit('updateProperty', property) res.status(200).json({ status: 'success', data: property, }) }) exports.deleteProperty = catchAsync(async (req, res, next) => { await propertyService.deleteProperty(req.params.propertyId) // eventEmitter.emit('deleteProperty') res.status(204).json({ status: 'success', data: null, }) })