Files
Sheep-Service/ws/services/stand.service.js

92 lines
4.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const db = require("../config/db");
const Notification = require("../utils/notification.js");
function lockingStand(user, data) {
return new Promise((resolve, reject) => {
const sheepId = Number(data.sheep_id) || null;
if (!user.possibilities.can_view_stand) {
return reject(new Error("Forbidden: no rights to view stand"));
}
if ((sheepId !== user.id && sheepId !== null) && !user.possibilities.can_manager_stand) {
return reject(new Error("Forbidden: no rights to view stand"));
}
resolve({ update: "ok", id: data.id });
});
}
function unlockingStand(user, data) {
return new Promise((resolve, reject) => {
const sheepId = Number(data.sheep_id) || null;
if (!user.possibilities.can_view_stand) {
return reject(new Error("Forbidden: no rights to view stand"));
}
if ((sheepId !== user.id && sheepId !== null) && !user.possibilities.can_manager_stand) {
return reject(new Error("Forbidden: no rights to view stand"));
}
resolve({ update: "ok", id: data.id });
});
}
function updateStand(user, data) {
return new Promise((resolve, reject) => {
const sheepId = Number(data.sheep_id) || null;
if (!user.possibilities.can_view_stand) {
return reject(new Error("Forbidden: no rights to view stand"));
}
if ((sheepId !== user.id && sheepId !== null) && !user.possibilities.can_manager_stand) {
return reject(new Error("Forbidden: no rights to view stand"));
}
const sql = `
UPDATE stand_schedule
SET sheep_id = ?, updated_at = ?
WHERE id = ?`;
db.run(sql, [sheepId, Date.now(), data.id], function (err) {
if (err) return reject(err);
if (this.changes === 0) return reject(new Error("Stand not found"));
const insertSql = `
INSERT INTO stand_schedule_history
(stand_schedule_id, sheep_id, editor, created_at)
VALUES (?, ?, ?, ?)`;
db.run(insertSql, [Number(data.id), sheepId, user.id, Date.now()], function (err) {
if (err) return reject(err);
if (sheepId === null) {
let text = [
'Звільнилося місце на одному зі стендів. Хто перший — той встигне 😉',
'Є одне вільне місце на стенді. Запис відкрито — не проґавте 😉',
'У одного зі стендів з’явилося вільне місце. Встигніть записатися!',
'Раптова можливість! На стенді є вільне місце. Забронюйте його зараз 📋',
'Одне місце стало вільним. Можливо, це саме ваше? 😉',
'Стенд чекає нового учасника. Вільне місце вже доступне 📋',
'Є шанс приєднатися — одне місце звільнилося 😊',
'Вільне місце на стенді довго не чекатиме. Записуйтеся!',
'Оголошуємо міні-набір: доступне одне місце на стенді.',
'Щойно звільнилося місце. Хто швидший — той з нами 🚀',
'З’явилася можливість долучитися до стенду. Кількість місць обмежена!',
'Останнє вільне місце на стенді шукає свого власника.'
];
let randomMessage = text[Math.floor(Math.random() * text.length)];
Notification.sendStand({
title: "Звільнилось місце",
body: randomMessage,
page: `/stand/card/${data.stand_id}`
});
}
resolve({ update: "ok", id: data.id, historyId: this.lastID });
});
});
});
}
module.exports = { lockingStand, unlockingStand, updateStand };