898 lines
22 KiB
JavaScript
898 lines
22 KiB
JavaScript
import express, { json } from "express";
|
||
import cors from "cors";
|
||
import mongoose from "mongoose";
|
||
import nodemailer from "nodemailer";
|
||
import Mail from "./models/Mail.js";
|
||
|
||
const app = express();
|
||
const port = 3000;
|
||
|
||
app.use(cors());
|
||
app.use(json());
|
||
|
||
app.get("/", (req, res) => {
|
||
res.json({ ok: 1 });
|
||
});
|
||
|
||
app.get("/regions", async (req, res) => {
|
||
let regions = [
|
||
{
|
||
name: "Центральный ФО",
|
||
regions: [
|
||
{ id: 31, name: "Белгородская область" },
|
||
{ id: 32, name: "Брянская область" },
|
||
{ id: 33, name: "Владимирская область" },
|
||
{ id: 36, name: "Воронежская область" },
|
||
{ id: 37, name: "Ивановская область" },
|
||
{ id: 40, name: "Калужская область" },
|
||
{ id: 44, name: "Костромская область" },
|
||
{ id: 46, name: "Курская область" },
|
||
{ id: 48, name: "Липецкая область" },
|
||
{ id: 50, name: "Московская область" },
|
||
{ id: 57, name: "Орловская область" },
|
||
{ id: 62, name: "Рязанская область" },
|
||
{ id: 67, name: "Смоленская область" },
|
||
{ id: 68, name: "Тамбовская область" },
|
||
{ id: 69, name: "Тверская область" },
|
||
{ id: 71, name: "Тульская область" },
|
||
{ id: 76, name: "Ярославская область" },
|
||
{ id: 77, name: "Город Москва" },
|
||
],
|
||
},
|
||
{
|
||
name: "Северо-Западный ФО",
|
||
regions: [
|
||
{ id: 10, name: "Республика Карелия" },
|
||
{ id: 11, name: "Республика Коми" },
|
||
{ id: 29, name: "Архангельская область" },
|
||
{ id: 35, name: "Вологодская область" },
|
||
{ id: 39, name: "Калининградская область" },
|
||
{ id: 47, name: "Ленинградская область" },
|
||
{ id: 51, name: "Мурманская область" },
|
||
{ id: 53, name: "Новгородская область" },
|
||
{ id: 60, name: "Псковская область" },
|
||
{ id: 78, name: "Город Санкт-Петербург" },
|
||
{ id: 83, name: "Ненецкий АО" },
|
||
],
|
||
},
|
||
{
|
||
name: "Южный ФО",
|
||
regions: [
|
||
{ id: 1, name: "Республика Адыгея" },
|
||
{ id: 8, name: "Республика Калмыкия" },
|
||
{ id: 23, name: "Краснодарский край" },
|
||
{ id: 30, name: "Астраханская область" },
|
||
{ id: 34, name: "Волгоградская область" },
|
||
{ id: 61, name: "Ростовская область" },
|
||
{ id: 91, name: "Республика Крым" },
|
||
{ id: 92, name: "Город Севастополь" },
|
||
],
|
||
},
|
||
{
|
||
name: "Северо-Кавказский ФО",
|
||
regions: [
|
||
{ id: 5, name: "Республика Дагестан" },
|
||
{ id: 6, name: "Республика Ингушетия" },
|
||
{ id: 7, name: "Кабардино-Балкарская Республика" },
|
||
{ id: 9, name: "Карачаево-Черкесская Республика" },
|
||
{ id: 15, name: "Республика Северная Осетия" },
|
||
{ id: 20, name: "Чеченская Республика" },
|
||
{ id: 26, name: "Ставропольский край" },
|
||
],
|
||
},
|
||
{
|
||
name: "Приволжский ФО",
|
||
regions: [
|
||
{ id: 2, name: "Республика Башкортостан" },
|
||
{ id: 12, name: "Республика Марий Эл" },
|
||
{ id: 13, name: "Республика Мордовия" },
|
||
{ id: 16, name: "Республика Татарстан" },
|
||
{ id: 18, name: "Удмуртская Республика" },
|
||
{ id: 21, name: "Чувашская Республика" },
|
||
{ id: 43, name: "Кировская область" },
|
||
{ id: 52, name: "Нижегородская область" },
|
||
{ id: 56, name: "Оренбургская область" },
|
||
{ id: 58, name: "Пензенская область" },
|
||
{ id: 59, name: "Пермский край" },
|
||
{ id: 63, name: "Самарская область" },
|
||
{ id: 64, name: "Саратовская область" },
|
||
{ id: 73, name: "Ульяновская область" },
|
||
],
|
||
},
|
||
{
|
||
name: "Уральский ФО",
|
||
regions: [
|
||
{ id: 45, name: "Курганская область" },
|
||
{ id: 66, name: "Свердловская область" },
|
||
{ id: 72, name: "Тюменская область" },
|
||
{ id: 74, name: "Челябинская область" },
|
||
{ id: 86, name: "Ханты-Мансийский АО - Югра" },
|
||
{ id: 89, name: "Ямало-Ненецкий АО" },
|
||
],
|
||
},
|
||
{
|
||
name: "Сибирский ФО",
|
||
regions: [
|
||
{ id: 4, name: "Республика Алтай" },
|
||
{ id: 17, name: "Республика Тыва" },
|
||
{ id: 19, name: "Республика Хакасия" },
|
||
{ id: 22, name: "Алтайский край" },
|
||
{ id: 24, name: "Красноярский край" },
|
||
{ id: 38, name: "Иркутская область" },
|
||
{ id: 42, name: "Кемеровская область - Кузбасс" },
|
||
{ id: 54, name: "Новосибирская область" },
|
||
{ id: 55, name: "Омская область" },
|
||
{ id: 70, name: "Томская область" },
|
||
],
|
||
},
|
||
{
|
||
name: "Дальневосточный ФО",
|
||
regions: [
|
||
{ id: 3, name: "Республика Бурятия" },
|
||
{ id: 14, name: "Республика Саха (Якутия)" },
|
||
{ id: 25, name: "Приморский край" },
|
||
{ id: 27, name: "Хабаровский край" },
|
||
{ id: 28, name: "Амурская область" },
|
||
{ id: 41, name: "Камчатский край" },
|
||
{ id: 49, name: "Магаданская область" },
|
||
{ id: 65, name: "Сахалинская область" },
|
||
{ id: 75, name: "Забайкальский край" },
|
||
{ id: 79, name: "Еврейская АО" },
|
||
{ id: 87, name: "Чукотский АО" },
|
||
],
|
||
},
|
||
];
|
||
|
||
regions = regions
|
||
.map((item) => item.regions)
|
||
.flat()
|
||
.sort((a, b) => (a.name > b.name ? 1 : -1))
|
||
.filter((region) => {
|
||
if (![79, 41, 51, 83, 6, 87].includes(region.id)) {
|
||
return region;
|
||
}
|
||
});
|
||
|
||
res.json(regions);
|
||
});
|
||
|
||
app.get("/region/:id", async (req, res) => {
|
||
const regionsData = [
|
||
{
|
||
id: 1,
|
||
totalArea: 328326.4,
|
||
flatCount: 7433,
|
||
priceAvg: 71655,
|
||
objSquareLivingAmt: 328326.36,
|
||
objCnt: 49,
|
||
},
|
||
{
|
||
id: 2,
|
||
totalArea: 2667309.0,
|
||
flatCount: 55441,
|
||
priceAvg: 98441,
|
||
objSquareLivingAmt: 2667646.9,
|
||
objCnt: 247,
|
||
},
|
||
{
|
||
id: 3,
|
||
totalArea: 384171.1,
|
||
flatCount: 6932,
|
||
priceAvg: 70582,
|
||
objSquareLivingAmt: 384171.07,
|
||
objCnt: 62,
|
||
},
|
||
{
|
||
id: 4,
|
||
totalArea: 51068.6,
|
||
flatCount: 1132,
|
||
priceAvg: 89784,
|
||
objSquareLivingAmt: 51068.63,
|
||
objCnt: 11,
|
||
},
|
||
{
|
||
id: 5,
|
||
totalArea: 283714.4,
|
||
flatCount: 4571,
|
||
priceAvg: 34194,
|
||
objSquareLivingAmt: 283714.37,
|
||
objCnt: 33,
|
||
},
|
||
// {
|
||
// id: 6,
|
||
// totalArea: 31057.6,
|
||
// flatCount: 376,
|
||
|
||
// "objSquareLivingAmt": 31057.63,
|
||
// "objCnt": 4,
|
||
// },
|
||
{
|
||
id: 7,
|
||
totalArea: 302164.8,
|
||
flatCount: 4254,
|
||
priceAvg: 62048,
|
||
objSquareLivingAmt: 302164.81,
|
||
objCnt: 69,
|
||
},
|
||
{
|
||
id: 8,
|
||
totalArea: 40553.1,
|
||
flatCount: 676,
|
||
priceAvg: 52949,
|
||
objSquareLivingAmt: 40553.11,
|
||
objCnt: 9,
|
||
},
|
||
{
|
||
id: 9,
|
||
totalArea: 66177.7,
|
||
flatCount: 1025,
|
||
priceAvg: 73179,
|
||
objSquareLivingAmt: 66177.73,
|
||
objCnt: 6,
|
||
},
|
||
{
|
||
id: 10,
|
||
totalArea: 169525.7,
|
||
flatCount: 3441,
|
||
priceAvg: 107511,
|
||
objSquareLivingAmt: 169525.71,
|
||
objCnt: 26,
|
||
},
|
||
{
|
||
id: 11,
|
||
totalArea: 83689.5,
|
||
flatCount: 2005,
|
||
priceAvg: 80559,
|
||
objSquareLivingAmt: 83689.47,
|
||
objCnt: 9,
|
||
},
|
||
{
|
||
id: 12,
|
||
totalArea: 313555.9,
|
||
flatCount: 5252,
|
||
priceAvg: 62782,
|
||
objSquareLivingAmt: 313555.87,
|
||
objCnt: 51,
|
||
},
|
||
{
|
||
id: 13,
|
||
totalArea: 187186.1,
|
||
flatCount: 3609,
|
||
priceAvg: 72793,
|
||
objSquareLivingAmt: 187186.12,
|
||
objCnt: 25,
|
||
},
|
||
{
|
||
id: 14,
|
||
totalArea: 395419.9,
|
||
flatCount: 7983,
|
||
priceAvg: 120368,
|
||
objSquareLivingAmt: 395419.87,
|
||
objCnt: 55,
|
||
},
|
||
{
|
||
id: 15,
|
||
totalArea: 314864.7,
|
||
flatCount: 4873,
|
||
priceAvg: 71655,
|
||
objSquareLivingAmt: 314864.74,
|
||
objCnt: 50,
|
||
},
|
||
{
|
||
id: 16,
|
||
totalArea: 2270183.8,
|
||
flatCount: 44495,
|
||
priceAvg: 135012,
|
||
objSquareLivingAmt: 2270183.83,
|
||
objCnt: 234,
|
||
},
|
||
{
|
||
id: 17,
|
||
totalArea: 92368.1,
|
||
flatCount: 2082,
|
||
priceAvg: 123219,
|
||
objSquareLivingAmt: 92368.12,
|
||
objCnt: 29,
|
||
},
|
||
{
|
||
id: 18,
|
||
totalArea: 1515583.9,
|
||
flatCount: 30624,
|
||
priceAvg: 82633,
|
||
objSquareLivingAmt: 328326.36,
|
||
objCnt: 49,
|
||
},
|
||
{
|
||
id: 19,
|
||
totalArea: 272158.0,
|
||
flatCount: 5265,
|
||
priceAvg: 67283,
|
||
objSquareLivingAmt: 272157.99,
|
||
objCnt: 50,
|
||
},
|
||
{
|
||
id: 20,
|
||
totalArea: 244186.6,
|
||
flatCount: 3465,
|
||
priceAvg: 57603,
|
||
objSquareLivingAmt: 244186.6,
|
||
objCnt: 12,
|
||
},
|
||
{
|
||
id: 21,
|
||
totalArea: 727391.5,
|
||
flatCount: 12551,
|
||
priceAvg: 74907,
|
||
objSquareLivingAmt: 727391.49,
|
||
objCnt: 94,
|
||
},
|
||
{
|
||
id: 22,
|
||
totalArea: 595249.9,
|
||
flatCount: 11996,
|
||
priceAvg: 82778,
|
||
objSquareLivingAmt: 595249.94,
|
||
objCnt: 71,
|
||
},
|
||
{
|
||
id: 23,
|
||
totalArea: 8316302.2,
|
||
flatCount: 184301,
|
||
priceAvg: 118376,
|
||
objSquareLivingAmt: 8316302.17,
|
||
objCnt: 735,
|
||
},
|
||
{
|
||
id: 24,
|
||
totalArea: 1548047.8,
|
||
flatCount: 28193,
|
||
priceAvg: 98763,
|
||
objSquareLivingAmt: 1548047.81,
|
||
objCnt: 108,
|
||
},
|
||
{
|
||
id: 25,
|
||
totalArea: 2191066.9,
|
||
flatCount: 43965,
|
||
priceAvg: 133366,
|
||
objSquareLivingAmt: 2191066.88,
|
||
objCnt: 284,
|
||
},
|
||
{
|
||
id: 26,
|
||
totalArea: 1303948.2,
|
||
flatCount: 24103,
|
||
priceAvg: 79643,
|
||
objSquareLivingAmt: 1303948.21,
|
||
objCnt: 168,
|
||
},
|
||
{
|
||
id: 27,
|
||
totalArea: 894343.7,
|
||
flatCount: 16806,
|
||
priceAvg: 109923,
|
||
objSquareLivingAmt: 894343.67,
|
||
objCnt: 107,
|
||
},
|
||
{
|
||
id: 28,
|
||
totalArea: 268490.4,
|
||
flatCount: 5627,
|
||
priceAvg: 130501,
|
||
objSquareLivingAmt: 268490.39,
|
||
objCnt: 46,
|
||
},
|
||
{
|
||
id: 29,
|
||
totalArea: 485896.2,
|
||
flatCount: 11015,
|
||
priceAvg: 101319,
|
||
objSquareLivingAmt: 485896.18,
|
||
objCnt: 74,
|
||
},
|
||
{
|
||
id: 30,
|
||
totalArea: 521433.7,
|
||
flatCount: 10353,
|
||
priceAvg: 95551,
|
||
objSquareLivingAmt: 521433.67,
|
||
objCnt: 44,
|
||
},
|
||
{
|
||
id: 31,
|
||
totalArea: 301602.6,
|
||
flatCount: 5916,
|
||
priceAvg: 86137,
|
||
objSquareLivingAmt: 301602.61,
|
||
objCnt: 66,
|
||
},
|
||
{
|
||
id: 32,
|
||
totalArea: 410642.1,
|
||
flatCount: 7010,
|
||
priceAvg: 59869,
|
||
objSquareLivingAmt: 410642.1,
|
||
objCnt: 56,
|
||
},
|
||
{
|
||
id: 33,
|
||
totalArea: 728408.1,
|
||
flatCount: 13023,
|
||
priceAvg: 54047,
|
||
objSquareLivingAmt: 728408.08,
|
||
objCnt: 97,
|
||
},
|
||
{
|
||
id: 34,
|
||
totalArea: 929572.5,
|
||
flatCount: 18003,
|
||
priceAvg: 76183,
|
||
objSquareLivingAmt: 929572.53,
|
||
objCnt: 126,
|
||
},
|
||
{
|
||
id: 35,
|
||
totalArea: 623014.5,
|
||
flatCount: 12220,
|
||
priceAvg: 54415,
|
||
objSquareLivingAmt: 623014.54,
|
||
objCnt: 119,
|
||
},
|
||
{
|
||
id: 36,
|
||
totalArea: 1937243.4,
|
||
flatCount: 40193,
|
||
priceAvg: 76931,
|
||
objSquareLivingAmt: 1937243.38,
|
||
objCnt: 149,
|
||
},
|
||
{
|
||
id: 37,
|
||
totalArea: 316507.6,
|
||
flatCount: 5442,
|
||
priceAvg: 59796,
|
||
objSquareLivingAmt: 316507.64,
|
||
objCnt: 48,
|
||
},
|
||
{
|
||
id: 38,
|
||
totalArea: 785409.3,
|
||
flatCount: 15338,
|
||
priceAvg: 102540,
|
||
objSquareLivingAmt: 785409.27,
|
||
objCnt: 155,
|
||
},
|
||
{
|
||
id: 39,
|
||
totalArea: 1203847.6,
|
||
flatCount: 21650,
|
||
priceAvg: 87364,
|
||
objSquareLivingAmt: 1203847.68,
|
||
objCnt: 167,
|
||
},
|
||
{
|
||
id: 40,
|
||
totalArea: 415127.4,
|
||
flatCount: 7503,
|
||
priceAvg: 87725,
|
||
objSquareLivingAmt: 415127.41,
|
||
objCnt: 53,
|
||
},
|
||
// {
|
||
// id: 41,
|
||
// totalArea: 121973.3,
|
||
// flatCount: 1906,
|
||
|
||
// "objSquareLivingAmt": 121973.3,
|
||
// "objCnt": 12,
|
||
// },
|
||
{
|
||
id: 42,
|
||
totalArea: 573204.1,
|
||
flatCount: 11113,
|
||
priceAvg: 71425,
|
||
objSquareLivingAmt: 573204.09,
|
||
objCnt: 79,
|
||
},
|
||
{
|
||
id: 43,
|
||
totalArea: 337445.1,
|
||
flatCount: 6655,
|
||
priceAvg: 80492,
|
||
objSquareLivingAmt: 337445.09,
|
||
objCnt: 54,
|
||
},
|
||
{
|
||
id: 44,
|
||
totalArea: 163623.3,
|
||
flatCount: 2953,
|
||
priceAvg: 67385,
|
||
objSquareLivingAmt: 163623.29,
|
||
objCnt: 58,
|
||
},
|
||
{
|
||
id: 45,
|
||
totalArea: 233679.6,
|
||
flatCount: 4447,
|
||
priceAvg: 62972,
|
||
objSquareLivingAmt: 233679.61,
|
||
objCnt: 43,
|
||
},
|
||
{
|
||
id: 46,
|
||
totalArea: 295893.8,
|
||
flatCount: 5469,
|
||
priceAvg: 89784,
|
||
objSquareLivingAmt: 295893.85,
|
||
objCnt: 42,
|
||
},
|
||
{
|
||
id: 47,
|
||
totalArea: 3294300.7,
|
||
flatCount: 82121,
|
||
priceAvg: 133977,
|
||
objSquareLivingAmt: 3294300.7,
|
||
objCnt: 266,
|
||
},
|
||
{
|
||
id: 48,
|
||
totalArea: 454826.8,
|
||
flatCount: 7783,
|
||
priceAvg: 69140,
|
||
objSquareLivingAmt: 454826.77,
|
||
objCnt: 73,
|
||
},
|
||
{
|
||
id: 49,
|
||
totalArea: 3186.8,
|
||
flatCount: 58,
|
||
priceAvg: 85363,
|
||
objSquareLivingAmt: 3186.83,
|
||
objCnt: 1,
|
||
},
|
||
{
|
||
id: 50,
|
||
totalArea: 8218500.2,
|
||
flatCount: 178738,
|
||
priceAvg: 148558,
|
||
objSquareLivingAmt: 8218500.37,
|
||
objCnt: 622,
|
||
},
|
||
{
|
||
id: 51,
|
||
totalArea: 5271.4,
|
||
flatCount: 100,
|
||
priceAvg: 70602,
|
||
objSquareLivingAmt: 5271.4,
|
||
objCnt: 1,
|
||
},
|
||
{
|
||
id: 52,
|
||
totalArea: 1147532.2,
|
||
flatCount: 21682,
|
||
priceAvg: 106487,
|
||
objSquareLivingAmt: 1147532.16,
|
||
objCnt: 131,
|
||
},
|
||
{
|
||
id: 53,
|
||
totalArea: 77383.8,
|
||
flatCount: 1450,
|
||
priceAvg: 71014,
|
||
objSquareLivingAmt: 77383.75,
|
||
objCnt: 13,
|
||
},
|
||
{
|
||
id: 54,
|
||
totalArea: 3465916.9,
|
||
flatCount: 68169,
|
||
priceAvg: 106530,
|
||
objSquareLivingAmt: 3468482.46,
|
||
objCnt: 514,
|
||
},
|
||
{
|
||
id: 55,
|
||
totalArea: 552013.5,
|
||
flatCount: 10068,
|
||
priceAvg: 84691,
|
||
objSquareLivingAmt: 552013.51,
|
||
objCnt: 64,
|
||
},
|
||
{
|
||
id: 56,
|
||
totalArea: 438084.8,
|
||
flatCount: 8975,
|
||
priceAvg: 66808,
|
||
objSquareLivingAmt: 438085.17,
|
||
objCnt: 57,
|
||
},
|
||
{
|
||
id: 57,
|
||
totalArea: 311673.4,
|
||
flatCount: 5381,
|
||
priceAvg: 34194,
|
||
objSquareLivingAmt: 311673.43,
|
||
objCnt: 27,
|
||
},
|
||
{
|
||
id: 58,
|
||
totalArea: 1257497.0,
|
||
flatCount: 23172,
|
||
priceAvg: 74291,
|
||
objSquareLivingAmt: 1257497.04,
|
||
objCnt: 98,
|
||
},
|
||
{
|
||
id: 59,
|
||
totalArea: 1656401.4,
|
||
flatCount: 33743,
|
||
priceAvg: 101629,
|
||
objSquareLivingAmt: 1656401.38,
|
||
objCnt: 140,
|
||
},
|
||
{
|
||
id: 60,
|
||
totalArea: 218481.0,
|
||
flatCount: 4233,
|
||
priceAvg: 59133,
|
||
objSquareLivingAmt: 218481.01,
|
||
objCnt: 38,
|
||
},
|
||
{
|
||
id: 61,
|
||
totalArea: 2790815.6,
|
||
flatCount: 57789,
|
||
priceAvg: 94335,
|
||
objSquareLivingAmt: 2790815.55,
|
||
objCnt: 254,
|
||
},
|
||
{
|
||
id: 62,
|
||
totalArea: 1122750.6,
|
||
flatCount: 22772,
|
||
priceAvg: 76168,
|
||
objSquareLivingAmt: 1122750.59,
|
||
objCnt: 77,
|
||
},
|
||
{
|
||
id: 63,
|
||
totalArea: 2082471.7,
|
||
flatCount: 37726,
|
||
priceAvg: 82324,
|
||
objSquareLivingAmt: 2082471.74,
|
||
objCnt: 197,
|
||
},
|
||
{
|
||
id: 64,
|
||
totalArea: 638664.9,
|
||
flatCount: 11982,
|
||
priceAvg: 59320,
|
||
objSquareLivingAmt: 638664.92,
|
||
objCnt: 82,
|
||
},
|
||
{
|
||
id: 65,
|
||
totalArea: 277718.5,
|
||
flatCount: 5418,
|
||
priceAvg: 153297,
|
||
objSquareLivingAmt: 277718.51,
|
||
objCnt: 49,
|
||
},
|
||
{
|
||
id: 66,
|
||
totalArea: 4051855.4,
|
||
flatCount: 85142,
|
||
priceAvg: 110720,
|
||
objSquareLivingAmt: 4051855.37,
|
||
objCnt: 325,
|
||
},
|
||
{
|
||
id: 67,
|
||
totalArea: 325201.7,
|
||
flatCount: 5895,
|
||
priceAvg: 53924,
|
||
objSquareLivingAmt: 325201.67,
|
||
objCnt: 59,
|
||
},
|
||
{
|
||
id: 68,
|
||
totalArea: 305018.1,
|
||
flatCount: 5691,
|
||
priceAvg: 61498,
|
||
objSquareLivingAmt: 305018.06,
|
||
objCnt: 46,
|
||
},
|
||
{
|
||
id: 69,
|
||
totalArea: 467081.2,
|
||
flatCount: 8962,
|
||
priceAvg: 79237,
|
||
objSquareLivingAmt: 467081.17,
|
||
objCnt: 82,
|
||
},
|
||
{
|
||
id: 70,
|
||
totalArea: 281391.0,
|
||
flatCount: 5551,
|
||
priceAvg: 104611,
|
||
objSquareLivingAmt: 281391.03,
|
||
objCnt: 64,
|
||
},
|
||
{
|
||
id: 71,
|
||
totalArea: 992802.1,
|
||
flatCount: 20633,
|
||
priceAvg: 89967,
|
||
objSquareLivingAmt: 992802.07,
|
||
objCnt: 129,
|
||
},
|
||
{
|
||
id: 72,
|
||
totalArea: 3115076.8,
|
||
flatCount: 60096,
|
||
priceAvg: 100219,
|
||
objSquareLivingAmt: 3115076.85,
|
||
objCnt: 275,
|
||
},
|
||
{
|
||
id: 73,
|
||
totalArea: 437822.7,
|
||
flatCount: 9120,
|
||
priceAvg: 75329,
|
||
objSquareLivingAmt: 437822.72,
|
||
objCnt: 61,
|
||
},
|
||
{
|
||
id: 74,
|
||
totalArea: 1044332.8,
|
||
flatCount: 20379,
|
||
priceAvg: 78438,
|
||
objSquareLivingAmt: 1044332.82,
|
||
objCnt: 121,
|
||
},
|
||
{
|
||
id: 75,
|
||
totalArea: 163028.2,
|
||
flatCount: 3388,
|
||
priceAvg: 129153,
|
||
objSquareLivingAmt: 163028.15,
|
||
objCnt: 23,
|
||
},
|
||
{
|
||
id: 76,
|
||
totalArea: 656699.4,
|
||
flatCount: 12248,
|
||
priceAvg: 77390,
|
||
objSquareLivingAmt: 656699.39,
|
||
objCnt: 101,
|
||
},
|
||
{
|
||
id: 77,
|
||
totalArea: 16322256.6,
|
||
flatCount: 309477,
|
||
priceAvg: 295872,
|
||
objSquareLivingAmt: 1.632225665e7,
|
||
objCnt: 703,
|
||
},
|
||
{
|
||
id: 78,
|
||
totalArea: 7370217.2,
|
||
flatCount: 170718,
|
||
priceAvg: 202300,
|
||
objSquareLivingAmt: 7370217.18,
|
||
objCnt: 436,
|
||
},
|
||
{
|
||
id: 79,
|
||
totalArea: 2146.0,
|
||
flatCount: 50,
|
||
priceAvg: 62048,
|
||
objSquareLivingAmt: 2145.95,
|
||
objCnt: 1,
|
||
},
|
||
{
|
||
id: 86,
|
||
totalArea: 439174.3,
|
||
flatCount: 7860,
|
||
priceAvg: 109173,
|
||
objSquareLivingAmt: 439174.26,
|
||
objCnt: 48,
|
||
},
|
||
{
|
||
id: 89,
|
||
totalArea: 152761.8,
|
||
flatCount: 3062,
|
||
priceAvg: 144671,
|
||
objSquareLivingAmt: 152761.83,
|
||
objCnt: 38,
|
||
},
|
||
{
|
||
id: 91,
|
||
totalArea: 882872.1,
|
||
flatCount: 18151,
|
||
priceAvg: 95417,
|
||
objSquareLivingAmt: 882872.05,
|
||
objCnt: 163,
|
||
},
|
||
{
|
||
id: 92,
|
||
totalArea: 112259.8,
|
||
flatCount: 2367,
|
||
priceAvg: 135839,
|
||
objSquareLivingAmt: 112259.82,
|
||
objCnt: 19,
|
||
},
|
||
];
|
||
|
||
try {
|
||
const { totalArea, flatCount, priceAvg, objSquareLivingAmt, objCnt } =
|
||
regionsData.find((item) => item.id == req.params.id);
|
||
|
||
const avgApartmentArea = Math.round(totalArea / flatCount);
|
||
const price = Math.round(priceAvg / 1000);
|
||
const avgAreaInComplex = Math.round(objSquareLivingAmt / objCnt);
|
||
|
||
res.json({ avgApartmentArea, price, avgAreaInComplex });
|
||
} catch (error) {
|
||
res.json({ error: 1 });
|
||
}
|
||
});
|
||
|
||
app.post("/mail", async (req, res) => {
|
||
try {
|
||
const referer = req.headers.referer;
|
||
const { fullname, email, phone, request } = req.body;
|
||
|
||
await Mail.create({ fullname, email, phone, request, referer });
|
||
|
||
// create reusable transporter object using the default SMTP transport
|
||
let transporter = nodemailer.createTransport({
|
||
host: "mail.netangels.ru",
|
||
port: 587,
|
||
secure: false, // true for 465, false for other ports
|
||
auth: {
|
||
user: "test@graff.tech", // generated ethereal user
|
||
pass: "ZmL0pKiDFWUyCDMq", // generated ethereal password
|
||
},
|
||
});
|
||
|
||
// send mail with defined transport object
|
||
let info = await transporter.sendMail({
|
||
from: email, // sender address
|
||
to: "info@graff.tech", // list of receivers
|
||
subject: "Заявка с сайта estate.graff.tech", // Subject line
|
||
text: `
|
||
Имя Фамилия: ${fullname}
|
||
Email: ${email}
|
||
Телефон: ${phone}
|
||
Текст запроса: ${request}
|
||
`, // plain text body
|
||
html: `<div>
|
||
<p>Имя: ${fullname}</p>
|
||
<p>Email: ${email}</p>
|
||
<p>Телефон: ${phone}</p>
|
||
<p>Текст запроса: ${request}</p>
|
||
</div>`, // html body
|
||
});
|
||
|
||
console.log(info);
|
||
|
||
console.log(req.body);
|
||
|
||
res.json({ ok: 1 });
|
||
} catch (error) {
|
||
console.log(error);
|
||
res.json({ error: 1 });
|
||
}
|
||
});
|
||
|
||
app.listen(port, async () => {
|
||
await mongoose.connect(
|
||
"mongodb://root:p62Z!ZatgY25@194.26.138.94:27017/",
|
||
{ dbName: "estate" },
|
||
console.log("DB connection...")
|
||
);
|
||
|
||
console.log(`Server is started on port ${port}...`);
|
||
});
|