Add block availability tool
This commit is contained in:
parent
d6bcaea4df
commit
b931669524
21
index.js
21
index.js
|
@ -585,6 +585,27 @@ app.get("/analytics", (req, res) => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.get("/api/v1/checkAvailability/:number", (req, res) => {
|
||||||
|
// Check if the number is 7 digits
|
||||||
|
const number = Number(req.params.number);
|
||||||
|
if (number < 2000000 || number > 9999999) {
|
||||||
|
res.status(400).json({ error: `Number is outside valid range` });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
db.get('SELECT * FROM routes WHERE block_start <= ? AND block_start + block_length >= ?', [number, number], (err, row) => {
|
||||||
|
if (err) {
|
||||||
|
console.error('Error getting route:', err);
|
||||||
|
res.status(500).json({ error: 'Internal server error' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (row) {
|
||||||
|
res.json({ available: false, block: row.block_start });
|
||||||
|
} else {
|
||||||
|
res.json({ available: true });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// Query to get a route
|
// Query to get a route
|
||||||
app.get('/api/v1/route/:apiKey/:ani/:number', (req, res) => {
|
app.get('/api/v1/route/:apiKey/:ani/:number', (req, res) => {
|
||||||
const apiKey = req.params.apiKey;
|
const apiKey = req.params.apiKey;
|
||||||
|
|
62
public/validator/index.html
Normal file
62
public/validator/index.html
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link rel="stylesheet" href="/assets/css/bootstrap.min.css">
|
||||||
|
<title>AstroCom Directory</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="bg-dark text-white">
|
||||||
|
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<a class="navbar-brand" href="/">AstroCom</a>
|
||||||
|
</div>
|
||||||
|
<div class="ms-auto d-flex text-nowrap">
|
||||||
|
<a href="/user" class="btn btn-outline-light me-2">User Login</a>
|
||||||
|
<a href="/admin" class="btn btn-outline-light">Admin Login</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div class="d-flex align-items-center gap-3 mb-3">
|
||||||
|
<h2 class="m-0 text-center w-100">Block Availability Checker</h2>
|
||||||
|
</div>
|
||||||
|
<div class="container mt-4" style="max-width: 400px;">
|
||||||
|
<div id="resultDialog" class="alert alert-secondary d-none">
|
||||||
|
<p id="resultMessage" class="mb-0"></p>
|
||||||
|
</div>
|
||||||
|
<form>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="numberInput">Enter 3-digit NXX:</label>
|
||||||
|
<input type="text" class="form-control" id="numberInput" pattern="[0-9]{3}" maxlength="3" required>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary mt-3">Submit</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
document.querySelector('form').addEventListener('submit', async (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
const number = document.querySelector('#numberInput').value + '0000';
|
||||||
|
const response = await fetch(`/api/v1/checkAvailability/${number}`);
|
||||||
|
// Reponse body is json, if data.error exists, an error occurred, set resultMessage text to error message and resultDialog class to alert-danger
|
||||||
|
const data = await response.json();
|
||||||
|
if (data.error) {
|
||||||
|
document.querySelector('#resultMessage').innerText = `Error: ${data.error}`;
|
||||||
|
document.querySelector('#resultDialog').classList.remove('d-none');
|
||||||
|
document.querySelector('#resultDialog').classList.add('alert-danger');
|
||||||
|
} else {
|
||||||
|
// No error, check if available is true or false, set resultMessage to "Block is available" or "Block is not available" and resultDialog class to alert-success or alert-danger
|
||||||
|
document.querySelector('#resultMessage').innerText = `Block is ${data.available ? 'available' : 'not available'}`;
|
||||||
|
document.querySelector('#resultDialog').classList.remove('d-none');
|
||||||
|
document.querySelector('#resultDialog').classList.remove('alert-danger');
|
||||||
|
document.querySelector('#resultDialog').classList.remove('alert-success');
|
||||||
|
document.querySelector('#resultDialog').classList.add(data.available ? 'alert-success' : 'alert-danger');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script src="/assets/js/bootstrap.min.js"></script>
|
||||||
|
<script src="/assets/js/bootstrap.bundle.min.js"></script>
|
||||||
|
<script src="/assets/js/jquery.min.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
Loading…
Reference in a new issue