feat: rename keep-notes to memento-note, migrate to PostgreSQL, fix MCP bugs
- Rename directory keep-notes -> memento-note with all code references - Prisma: SQLite -> PostgreSQL (both app and MCP server schemas) - Sync MCP schema with main app (add missing fields, relations, indexes) - Delete 17 SQLite migrations (clean slate for PostgreSQL) - Remove SQLite dependencies (@libsql/client, better-sqlite3, etc.) - Fix MCP server: hardcoded Windows DB paths -> DATABASE_URL env var - Fix MCP server: .dockerignore excluded index-sse.js (SSE mode broken) - MCP Dockerfile: node:20 -> node:22 - Docker Compose: add postgres service, remove SQLite volume - Generate favicon.ico, icon-192.png, icon-512.png, apple-icon.png - Update layout.tsx icons and manifest.json for PNG icons - Update all .env files for PostgreSQL - Rewrite README.md with updated sections - Remove mcp-server/node_modules and prisma/client-generated from git tracking Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
69
memento-note/lib/utils/date.ts
Normal file
69
memento-note/lib/utils/date.ts
Normal file
@@ -0,0 +1,69 @@
|
||||
/**
|
||||
* Date formatting utilities for recent notes display
|
||||
*/
|
||||
|
||||
/**
|
||||
* Format a date as relative time in English (e.g., "2 hours ago", "yesterday")
|
||||
*/
|
||||
export function formatRelativeTime(date: Date | string): string {
|
||||
const now = new Date()
|
||||
const then = new Date(date)
|
||||
const seconds = Math.floor((now.getTime() - then.getTime()) / 1000)
|
||||
|
||||
if (seconds < 60) return 'just now'
|
||||
|
||||
const minutes = Math.floor(seconds / 60)
|
||||
if (minutes < 60) {
|
||||
return `${minutes} minute${minutes > 1 ? 's' : ''} ago`
|
||||
}
|
||||
|
||||
const hours = Math.floor(minutes / 60)
|
||||
if (hours < 24) {
|
||||
return `${hours} hour${hours > 1 ? 's' : ''} ago`
|
||||
}
|
||||
|
||||
const days = Math.floor(hours / 24)
|
||||
if (days < 7) {
|
||||
return `${days} day${days > 1 ? 's' : ''} ago`
|
||||
}
|
||||
|
||||
// For dates older than 7 days, show absolute date
|
||||
return then.toLocaleDateString('en-US', {
|
||||
month: 'short',
|
||||
day: 'numeric',
|
||||
year: then.getFullYear() !== now.getFullYear() ? 'numeric' : undefined
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a date as relative time in French (e.g., "il y a 2 heures", "hier")
|
||||
*/
|
||||
export function formatRelativeTimeFR(date: Date | string): string {
|
||||
const now = new Date()
|
||||
const then = new Date(date)
|
||||
const seconds = Math.floor((now.getTime() - then.getTime()) / 1000)
|
||||
|
||||
if (seconds < 60) return "à l'instant"
|
||||
|
||||
const minutes = Math.floor(seconds / 60)
|
||||
if (minutes < 60) {
|
||||
return `il y a ${minutes} minute${minutes > 1 ? 's' : ''}`
|
||||
}
|
||||
|
||||
const hours = Math.floor(minutes / 60)
|
||||
if (hours < 24) {
|
||||
return `il y a ${hours} heure${hours > 1 ? 's' : ''}`
|
||||
}
|
||||
|
||||
const days = Math.floor(hours / 24)
|
||||
if (days < 7) {
|
||||
return `il y a ${days} jour${days > 1 ? 's' : ''}`
|
||||
}
|
||||
|
||||
// For dates older than 7 days, show absolute date
|
||||
return then.toLocaleDateString('fr-FR', {
|
||||
day: 'numeric',
|
||||
month: 'short',
|
||||
year: then.getFullYear() !== now.getFullYear() ? 'numeric' : undefined
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user