const express = require('express');
const sqlite3 = require('sqlite3').verbose();
const cors = require('cors');
const bodyParser = require('body-parser');
const app = express();
app.use(cors());
app.use(bodyParser.json());
// Initialize SQLite Database
const db = new sqlite3.Database('./nexus.db', (err) => {
if (err) console.error(err.message);
console.log('Connected to SQLite database.');
});
// Create table if not exists
db.serialize(() => {
db.run(`CREATE TABLE IF NOT EXISTS links (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
url TEXT NOT NULL
)`);
});
// GET: Fetch all links
app.get('/api/links', (req, res) => {
db.all("SELECT * FROM links ORDER BY id ASC", [], (err, rows) => {
if (err) return res.status(500).json({ error: err.message });
res.json(rows);
});
});
// POST: Add new link
app.post('/api/links', (req, res) => {
const { title, url } = req.body;
const sql = "INSERT INTO links (title, url) VALUES (?, ?)";
db.run(sql, [title, url], function(err) {
if (err) return res.status(500).json({ error: err.message });
res.json({ id: this.lastID, title, url });
});
});
// PUT: Update link
app.put('/api/links/:id', (req, res) => {
const { title, url } = req.body;
const sql = "UPDATE links SET title = ?, url = ? WHERE id = ?";
db.run(sql, [title, url, req.params.id], function(err) {
if (err) return res.status(500).json({ error: err.message });
res.json({ id: req.params.id, title, url });
});
});
// DELETE: Remove link
app.delete('/api/links/:id', (req, res) => {
const sql = "DELETE FROM links WHERE id = ?";
db.run(sql, req.params.id, function(err) {
if (err) return res.status(500).json({ error: err.message });
res.sendStatus(200);
});
});
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Nexus API running on http://localhost:${PORT}`);
});
-- SQLite Schema (Automatically handled in server.js, but here for reference)
-- Create Table
CREATE TABLE IF NOT EXISTS links (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
url TEXT NOT NULL
);
-- Insert Demo Data
INSERT INTO links (title, url) VALUES
('GitHub', 'https://github.com'),
('Figma', 'https://figma.com'),
('Vercel', 'https://vercel.com'),
('YouTube', 'https://youtube.com');