Add files via upload
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const { getDb } = require('../database');
|
||||
const { verifyApiKey } = require('../middleware/auth');
|
||||
const { sendPrivateMessage } = require('../utils/nostr');
|
||||
const logger = require('../utils/logger');
|
||||
|
||||
// Apply API key verification middleware to all routes
|
||||
router.use(verifyApiKey);
|
||||
|
||||
// Send a private message
|
||||
router.post('/send', async(req, res) => {
|
||||
try {
|
||||
const { recipient, content, relays } = req.body;
|
||||
|
||||
// Validate required fields
|
||||
if (!recipient || !content) {
|
||||
return res.status(400).json({
|
||||
error: 'Bad Request',
|
||||
message: 'Recipient and content are required'
|
||||
});
|
||||
}
|
||||
|
||||
// Send private message
|
||||
const eventId = await sendPrivateMessage(
|
||||
recipient,
|
||||
content,
|
||||
Array.isArray(relays) ? relays : []
|
||||
);
|
||||
|
||||
// Format relays as comma-separated string
|
||||
const relaysString = Array.isArray(relays) ? relays.join(',') : '';
|
||||
|
||||
// Save to database
|
||||
const db = getDb();
|
||||
db.run(
|
||||
`INSERT INTO sent_messages (recipient_pubkey, message, timestamp, relays, event_id)
|
||||
VALUES (?, ?, ?, ?, ?)`, [recipient, content, Math.floor(Date.now() / 1000), relaysString, eventId],
|
||||
function(err) {
|
||||
if (err) {
|
||||
logger.error('Database error when saving sent message:', err);
|
||||
return res.status(500).json({
|
||||
error: 'Internal Server Error',
|
||||
message: 'Message sent but failed to save to database'
|
||||
});
|
||||
}
|
||||
|
||||
// Return success response
|
||||
res.status(201).json({
|
||||
message: 'Private message sent successfully',
|
||||
event_id: eventId,
|
||||
message_id: this.lastID
|
||||
});
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
logger.error('Error sending private message:', error);
|
||||
res.status(500).json({
|
||||
error: 'Internal Server Error',
|
||||
message: 'Failed to send private message'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// List sent messages
|
||||
router.get('/sent', (req, res) => {
|
||||
try {
|
||||
// Query parameters
|
||||
const limit = parseInt(req.query.limit) || 50;
|
||||
const offset = parseInt(req.query.offset) || 0;
|
||||
const recipient = req.query.recipient;
|
||||
|
||||
// Build query
|
||||
let query = `SELECT * FROM sent_messages`;
|
||||
const params = [];
|
||||
|
||||
if (recipient) {
|
||||
query += ` WHERE recipient_pubkey = ?`;
|
||||
params.push(recipient);
|
||||
}
|
||||
|
||||
query += ` ORDER BY timestamp DESC LIMIT ? OFFSET ?`;
|
||||
params.push(limit, offset);
|
||||
|
||||
// Query database
|
||||
const db = getDb();
|
||||
db.all(query, params, (err, messages) => {
|
||||
if (err) {
|
||||
logger.error('Database error when listing sent messages:', err);
|
||||
return res.status(500).json({
|
||||
error: 'Internal Server Error',
|
||||
message: 'Failed to list sent messages'
|
||||
});
|
||||
}
|
||||
|
||||
// Format messages
|
||||
const formattedMessages = messages.map(msg => ({
|
||||
id: msg.id,
|
||||
recipient_pubkey: msg.recipient_pubkey,
|
||||
message: msg.message,
|
||||
timestamp: msg.timestamp,
|
||||
relays: msg.relays ? msg.relays.split(',') : [],
|
||||
event_id: msg.event_id,
|
||||
created_at: msg.created_at
|
||||
}));
|
||||
|
||||
// Return messages
|
||||
res.status(200).json({
|
||||
count: formattedMessages.length,
|
||||
messages: formattedMessages
|
||||
});
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error('Error listing sent messages:', error);
|
||||
res.status(500).json({
|
||||
error: 'Internal Server Error',
|
||||
message: 'Failed to list sent messages'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user