107 lines
2.6 KiB
JavaScript
107 lines
2.6 KiB
JavaScript
const express = require('express');
|
|
const sqlite3 = require('sqlite3');
|
|
const cors = require('cors');
|
|
const app = express();
|
|
|
|
app.use(cors());
|
|
app.use(express.json());
|
|
|
|
function getDb() {
|
|
return new sqlite3.Database('db.sqlite', (err) => {
|
|
if (err) console.log('db error:', err);
|
|
console.log('Connected to database!');
|
|
});
|
|
}
|
|
|
|
const db = getDb();
|
|
db.run(
|
|
`CREATE TABLE IF NOT EXISTS appointments (
|
|
id INTEGER PRIMARY KEY,
|
|
date TEXT,
|
|
time TEXT,
|
|
name TEXT
|
|
)`,
|
|
(err) => {
|
|
console.log('Table creation error:', err);
|
|
}
|
|
);
|
|
db.close();
|
|
|
|
app.post('/api/appointments', (req, res) => {
|
|
const d = req.body;
|
|
console.log('data:', d);
|
|
|
|
const db = getDb();
|
|
db.run(
|
|
'INSERT INTO appointments (date, time, name) VALUES (?, ?, ?)',
|
|
[d.date, d.time, d.name],
|
|
function (err) {
|
|
if (err) {
|
|
console.log('error:', err);
|
|
res.status(500).json({ msg: 'error' });
|
|
} else {
|
|
db.all('SELECT * FROM appointments', [], (err, rows) => {
|
|
if (err) {
|
|
console.log('error:', err);
|
|
res.status(500).json({ msg: 'error' });
|
|
} else {
|
|
console.log('all data:', rows);
|
|
res.json({ msg: 'ok', data: rows });
|
|
}
|
|
db.close();
|
|
});
|
|
}
|
|
}
|
|
);
|
|
});
|
|
|
|
app.get('/api/slots', (req, res) => {
|
|
const db = getDb();
|
|
|
|
db.all('SELECT * FROM appointments', [], (err, rows) => {
|
|
let temp = [];
|
|
for (let i = 28; i <= 29; i++) {
|
|
for (let h = 13; h <= 17; h++) {
|
|
for (let m = 0; m < 60; m += 30) {
|
|
let d = `2024-02-${i}`;
|
|
let t = `${h}:${m === 0 ? '00' : m}`;
|
|
temp.push({ date: d, time: t });
|
|
}
|
|
}
|
|
}
|
|
for (let i = 1; i <= 3; i++) {
|
|
for (let h = 13; h <= 17; h++) {
|
|
for (let m = 0; m < 60; m += 30) {
|
|
let d = `2024-03-0${i}`;
|
|
let t = `${h}:${m === 0 ? '00' : m}`;
|
|
temp.push({ date: d, time: t });
|
|
}
|
|
}
|
|
}
|
|
|
|
let available = temp.filter((slot) => {
|
|
return !rows.some((r) => r.date === slot.date && r.time === slot.time);
|
|
});
|
|
|
|
console.log('available slots:', available);
|
|
res.json(available);
|
|
db.close();
|
|
});
|
|
});
|
|
|
|
app.get('/api/appointments', (req, res) => {
|
|
const db = getDb();
|
|
db.all('SELECT * FROM appointments', [], (err, rows) => {
|
|
if (err) {
|
|
console.log('error:', err);
|
|
res.status(500).json({ msg: 'error' });
|
|
} else {
|
|
console.log('all appointments:', rows);
|
|
res.json(rows);
|
|
}
|
|
db.close();
|
|
});
|
|
});
|
|
|
|
app.listen(3000, () => console.log('Server running at http://localhost:3000'));
|