v0.0.1
This commit is contained in:
240
api/services/constructor.service.js
Normal file
240
api/services/constructor.service.js
Normal file
@@ -0,0 +1,240 @@
|
||||
const db = require("../config/db");
|
||||
const saveCards = require("../middleware/genCards");
|
||||
|
||||
class ConstructorService {
|
||||
// createPack(data) {
|
||||
// return new Promise((res, rej) => {
|
||||
// let sql = `
|
||||
// INSERT INTO
|
||||
// house(
|
||||
// group_id,
|
||||
// title,
|
||||
// number,
|
||||
// points,
|
||||
// points_number,
|
||||
// geo,
|
||||
// osm_id,
|
||||
// settlement,
|
||||
// created_at
|
||||
// )
|
||||
// VALUES
|
||||
// (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
// `;
|
||||
|
||||
// db.run(sql, [
|
||||
// Number(data.house.group_id),
|
||||
// data.house.title,
|
||||
// data.house.number,
|
||||
// JSON.stringify(data.house.points),
|
||||
// JSON.stringify(data.house.points_number),
|
||||
// JSON.stringify(data.house.geo),
|
||||
// JSON.stringify(data.house.osm_id),
|
||||
// data.house.settlement,
|
||||
// Math.floor(Date.now())
|
||||
// ], function (err) {
|
||||
// if (err) {
|
||||
// console.error(err.message);
|
||||
// return res(false);
|
||||
// } else if (this.changes === 0) {
|
||||
// return res(false);
|
||||
// } else {
|
||||
// const houseId = this.lastID;
|
||||
|
||||
// const entranceStmt = db.prepare(`
|
||||
// INSERT INTO
|
||||
// entrance(
|
||||
// house_id,
|
||||
// entrance_number,
|
||||
// title,
|
||||
// points,
|
||||
// points_number,
|
||||
// created_at
|
||||
// )
|
||||
// VALUES
|
||||
// (?, ?, ?, ?, ?, ?)`);
|
||||
|
||||
// const apartmentStmt = db.prepare(`
|
||||
// INSERT INTO
|
||||
// apartments(
|
||||
// entrance_id,
|
||||
// apartment_number,
|
||||
// floors_number,
|
||||
// updated_at
|
||||
// )
|
||||
// VALUES
|
||||
// (?, ?, ?, ?)`);
|
||||
|
||||
// data.entrance.forEach((e, index) => {
|
||||
// entranceStmt.run(
|
||||
// houseId,
|
||||
// Number(e.entrance_number),
|
||||
// e.title,
|
||||
// JSON.stringify(e.points),
|
||||
// JSON.stringify(e.points_number),
|
||||
// Math.floor(Date.now()),
|
||||
// function (err) {
|
||||
// if (err) {
|
||||
// console.error(err.message);
|
||||
// return;
|
||||
// }
|
||||
// const entranceId = this.lastID;
|
||||
|
||||
// if (data.apartments[e.editor_id]) {
|
||||
// data.apartments[e.editor_id].forEach(apartment => {
|
||||
// apartmentStmt.run(
|
||||
// entranceId,
|
||||
// apartment.apartment_number,
|
||||
// apartment.floors_number,
|
||||
// Math.floor(Date.now())
|
||||
// );
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
// );
|
||||
// });
|
||||
|
||||
// entranceStmt.finalize();
|
||||
// apartmentStmt.finalize();
|
||||
|
||||
// // res({ "status": "ok", "id": houseId });
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
// }
|
||||
createPack(data) {
|
||||
return new Promise((res, rej) => {
|
||||
|
||||
if (data.type == "house") {
|
||||
const sql = `
|
||||
INSERT INTO house (
|
||||
group_id, title, number, points, points_number, geo, osm_id, settlement, created_at
|
||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`;
|
||||
|
||||
db.run(sql, [
|
||||
Number(data.group_id),
|
||||
data.title,
|
||||
data.number,
|
||||
JSON.stringify(data.points),
|
||||
JSON.stringify(data.points_number),
|
||||
JSON.stringify(data.geo),
|
||||
JSON.stringify(data.osm_id),
|
||||
data.settlement,
|
||||
Math.floor(Date.now())
|
||||
], function (err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
}
|
||||
if (this.changes === 0) {
|
||||
return res(false);
|
||||
}
|
||||
|
||||
const houseId = this.lastID;
|
||||
|
||||
saveCards({ center: data.geo, wayId: data.osm_id, zoom: data.zoom ?? 18, type: "house", number: houseId, address: `${data.title} ${data.number}` });
|
||||
|
||||
|
||||
const entranceStmt = db.prepare(`
|
||||
INSERT INTO entrance (
|
||||
house_id, entrance_number, title, points, points_number, created_at
|
||||
) VALUES (?, ?, ?, ?, ?, ?)`);
|
||||
|
||||
const apartmentStmt = db.prepare(`
|
||||
INSERT INTO apartments (
|
||||
entrance_id, apartment_number, title, floors_number
|
||||
) VALUES (?, ?, ?, ?)`);
|
||||
|
||||
const entranceIdMap = {}; // Для сопоставления editor_id → entrance_id
|
||||
|
||||
let pendingEntrances = data.entrance.length;
|
||||
|
||||
data.entrance.forEach((e) => {
|
||||
entranceStmt.run(
|
||||
houseId,
|
||||
Number(e.entrance_number),
|
||||
e.title,
|
||||
JSON.stringify(e.points),
|
||||
JSON.stringify(e.points_number),
|
||||
Math.floor(Date.now()),
|
||||
function (err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return;
|
||||
}
|
||||
const entranceId = this.lastID;
|
||||
entranceIdMap[e.editor_id] = entranceId;
|
||||
|
||||
if (--pendingEntrances === 0) {
|
||||
insertApartments();
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
function insertApartments() {
|
||||
for (const [editor_id, apartments] of Object.entries(data.apartments)) {
|
||||
const entranceId = entranceIdMap[editor_id];
|
||||
if (!entranceId) continue;
|
||||
|
||||
apartments.forEach(apartment => {
|
||||
apartmentStmt.run(
|
||||
entranceId,
|
||||
Number(apartment.apartment_number),
|
||||
apartment.title,
|
||||
apartment.floors_number
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
entranceStmt.finalize();
|
||||
apartmentStmt.finalize();
|
||||
res({ "status": "ok", "id": houseId });
|
||||
}
|
||||
});
|
||||
} else if (data.type == "homestead") {
|
||||
let sql = `
|
||||
INSERT INTO
|
||||
homestead(
|
||||
group_id,
|
||||
title,
|
||||
number,
|
||||
points,
|
||||
point_icons,
|
||||
geo,
|
||||
osm_id,
|
||||
settlement,
|
||||
created_at
|
||||
)
|
||||
VALUES
|
||||
(?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
`;
|
||||
|
||||
db.run(sql, [
|
||||
Number(data.group_id),
|
||||
data.title,
|
||||
data.number,
|
||||
JSON.stringify(data.points),
|
||||
JSON.stringify(data.point_icons),
|
||||
JSON.stringify(data.geo),
|
||||
JSON.stringify(data.osm_id),
|
||||
data.settlement,
|
||||
Math.floor(new Date(Date.now()).getTime())
|
||||
], function (err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
saveCards({ center: data.geo, wayId: data.osm_id, zoom: data.zoom ?? 17, type: "homestead", number: this.lastID, address: `${data.title} ${data.number}` })
|
||||
res({ "status": "ok", "id": this.lastID });
|
||||
}
|
||||
});
|
||||
} else {
|
||||
return res(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new ConstructorService();
|
||||
Reference in New Issue
Block a user