Remove unused heartbeat endpoint and storage method

- Removed PUT /offers/:offerId/heartbeat endpoint
- Removed updateOfferLastSeen() from storage interface and implementations
- last_seen column is still in DB but not used for cleanup
- Cleanup only uses expires_at, so heartbeat was non-functional

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-16 18:32:37 +01:00
parent b9bf0a5593
commit 1a3976ccbc
4 changed files with 0 additions and 58 deletions

View File

@@ -314,39 +314,6 @@ export function createApp(storage: Storage, config: Config) {
} }
}); });
/**
* PUT /offers/:offerId/heartbeat
* Update last_seen timestamp for an offer
* Requires authentication and ownership
*/
app.put('/offers/:offerId/heartbeat', authMiddleware, async (c) => {
try {
const offerId = c.req.param('offerId');
const peerId = getAuthenticatedPeerId(c);
// Verify ownership
const offer = await storage.getOfferById(offerId);
if (!offer) {
return c.json({ error: 'Offer not found or expired' }, 404);
}
if (offer.peerId !== peerId) {
return c.json({ error: 'Not authorized to update this offer' }, 403);
}
const now = Date.now();
await storage.updateOfferLastSeen(offerId, now);
return c.json({
id: offerId,
lastSeen: now
}, 200);
} catch (err) {
console.error('Error updating offer heartbeat:', err);
return c.json({ error: 'Internal server error' }, 500);
}
});
/** /**
* DELETE /offers/:offerId * DELETE /offers/:offerId
* Delete a specific offer * Delete a specific offer

View File

@@ -155,14 +155,6 @@ export class D1Storage implements Storage {
return this.rowToOffer(result as any); return this.rowToOffer(result as any);
} }
async updateOfferLastSeen(offerId: string, lastSeen: number): Promise<void> {
await this.db.prepare(`
UPDATE offers
SET last_seen = ?
WHERE id = ? AND expires_at > ?
`).bind(lastSeen, offerId, Date.now()).run();
}
async deleteOffer(offerId: string, ownerPeerId: string): Promise<boolean> { async deleteOffer(offerId: string, ownerPeerId: string): Promise<boolean> {
const result = await this.db.prepare(` const result = await this.db.prepare(`
DELETE FROM offers DELETE FROM offers

View File

@@ -176,16 +176,6 @@ export class SQLiteStorage implements Storage {
return this.rowToOffer(row); return this.rowToOffer(row);
} }
async updateOfferLastSeen(offerId: string, lastSeen: number): Promise<void> {
const stmt = this.db.prepare(`
UPDATE offers
SET last_seen = ?
WHERE id = ? AND expires_at > ?
`);
stmt.run(lastSeen, offerId, Date.now());
}
async deleteOffer(offerId: string, ownerPeerId: string): Promise<boolean> { async deleteOffer(offerId: string, ownerPeerId: string): Promise<boolean> {
const stmt = this.db.prepare(` const stmt = this.db.prepare(`
DELETE FROM offers DELETE FROM offers

View File

@@ -80,13 +80,6 @@ export interface Storage {
*/ */
getOfferById(offerId: string): Promise<Offer | null>; getOfferById(offerId: string): Promise<Offer | null>;
/**
* Updates the last_seen timestamp for an offer (heartbeat)
* @param offerId Offer identifier
* @param lastSeen New last_seen timestamp
*/
updateOfferLastSeen(offerId: string, lastSeen: number): Promise<void>;
/** /**
* Deletes an offer (with ownership verification) * Deletes an offer (with ownership verification)
* @param offerId Offer identifier * @param offerId Offer identifier