87 lines
2.2 KiB
TypeScript
87 lines
2.2 KiB
TypeScript
// Example: PostgreSQL Chat Implementation for Railway
|
|
// This uses the DATABASE_URL that Railway provides automatically
|
|
|
|
import { sql } from '@vercel/postgres';
|
|
import { NextRequest, NextResponse } from 'next/server';
|
|
|
|
// GET recent messages
|
|
export async function GET(request: NextRequest) {
|
|
try {
|
|
const result = await sql`
|
|
SELECT id, username, message, timestamp
|
|
FROM messages
|
|
ORDER BY timestamp DESC
|
|
LIMIT 100
|
|
`;
|
|
|
|
return NextResponse.json({
|
|
messages: result.rows.reverse(),
|
|
});
|
|
} catch (error) {
|
|
console.error('Database error:', error);
|
|
return NextResponse.json(
|
|
{ error: 'Failed to fetch messages' },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|
|
|
|
// POST new message
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const body = await request.json();
|
|
const { username, message } = body;
|
|
|
|
// Validate
|
|
if (!username || !message) {
|
|
return NextResponse.json(
|
|
{ error: 'Username and message required' },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
if (message.length > 500) {
|
|
return NextResponse.json(
|
|
{ error: 'Message too long' },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
// Insert into database
|
|
const result = await sql`
|
|
INSERT INTO messages (username, message, timestamp)
|
|
VALUES (${username}, ${message}, NOW())
|
|
RETURNING id, username, message, timestamp
|
|
`;
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
message: result.rows[0],
|
|
});
|
|
} catch (error) {
|
|
console.error('Database error:', error);
|
|
return NextResponse.json(
|
|
{ error: 'Failed to post message' },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|
|
|
|
// You'll need to initialize the database with this schema once:
|
|
/*
|
|
CREATE TABLE IF NOT EXISTS messages (
|
|
id SERIAL PRIMARY KEY,
|
|
username VARCHAR(255) NOT NULL,
|
|
message TEXT NOT NULL,
|
|
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX idx_messages_timestamp ON messages(timestamp DESC);
|
|
*/
|
|
|
|
// Setup instructions:
|
|
// 1. In Railway dashboard, add PostgreSQL database to your project
|
|
// 2. Railway auto-sets DATABASE_URL environment variable
|
|
// 3. Run the schema creation query once
|
|
// 4. Update your chat component to use this API
|