narinder1231's picture
improve error logging and error messages
d747060
import { Request, Response } from 'express';
import { fetchBuildings, fetchPortfolio, fetchUnits } from '../../shared/services/propertyware.service';
import { logger } from '../../utils/logger';
import { syncUnitsDataFromUrlService, syncUnitsDataService } from '../../shared/services/units.service';
import PwPortfolio from '../../models/pwPortfolio';
import PwBuilding from '../../models/pwBuildings';
import PwUnit from '../../models/pwUnits';
export const syncUnitsData = async (req: Request, res: Response) => {
try {
const result = await syncUnitsDataService();
res.status(200).send(result);
} catch (error) {
logger.error('Error syncing Units');
logger.error(error);
res.status(500).send((error as Error).message);
}
};
export const syncUnitsDataFromUrl = async (req: Request, res: Response) => {
try {
const result = await syncUnitsDataFromUrlService();
res.status(200).send(result);
} catch (error) {
logger.error('Error syncing Units from URL');
logger.error(error);
res.status(500).send((error as Error).message);
}
};
export const LocationLookup = async (req: Request, res: Response) => {
try {
const unitsWithBuildingPortfolio = await PwUnit.findAll({
attributes: [['pw_id', 'id'], 'name'],
include: [
{
model: PwPortfolio,
as: 'portfolio',
attributes: [['pw_id', 'id'], 'name'],
},
{
model: PwBuilding,
as: 'building',
attributes: [['pw_id', 'id'], 'name'],
},
],
});
const portfolios = transformUnitsToPortfolios(unitsWithBuildingPortfolio)
res.json(portfolios);
} catch (error) {
logger.error('Error fetching location data:', error);
logger.error(error);
res.status(500).json({ error: 'An error occurred while fetching data' });
}
};
function transformUnitsToPortfolios(units: any[]) {
const portfolios: any[] = [];
units.forEach(unit => {
const { portfolio, building, id, name } = unit;
let portfolioEntry = portfolios.find(p => p.id === portfolio.id);
if (!portfolioEntry) {
portfolioEntry = { id: portfolio.id, name: portfolio.name, buildings: [] };
portfolios.push(portfolioEntry);
}
let buildingEntry = portfolioEntry.buildings.find((b: { id: any; }) => b.id === building.id);
if (!buildingEntry) {
buildingEntry = { id: building.id, name: building.name, units: [] };
portfolioEntry.buildings.push(buildingEntry);
}
buildingEntry.units.push({ id, name });
});
return portfolios;
}