feat: database backups & analytics site management

- Added manual database backup functionality with pg_dump
- Added cron-based automated backups to Google Drive and Dropbox
- Added ability to manually add, edit, and delete sites in Analytics
- Added 1-day timeframe filter in Analytics page
- Updated Dockerfile to include postgresql-client
This commit is contained in:
mstfyldz
2026-06-02 17:44:46 +03:00
parent e28fa966e3
commit e5dc347a0b
12 changed files with 686 additions and 10 deletions
+34 -1
View File
@@ -1,6 +1,6 @@
import { NextRequest, NextResponse } from 'next/server'
import { requireAuth } from '@/lib/auth'
import { getAnalyticsStats, getAllDomains } from '@/lib/appDb'
import { getAnalyticsStats, getAllDomains, addAnalyticsSite, renameAnalyticsSite, deleteAnalyticsSite } from '@/lib/appDb'
export async function GET(req: NextRequest) {
const err = await requireAuth(req)
@@ -18,3 +18,36 @@ export async function GET(req: NextRequest) {
const stats = await getAnalyticsStats(domain, days)
return NextResponse.json(stats)
}
export async function POST(req: NextRequest) {
const err = await requireAuth(req)
if (err) return err
const { domain } = await req.json()
if (!domain) return NextResponse.json({ error: 'Domain required' }, { status: 400 })
await addAnalyticsSite(domain)
return NextResponse.json({ ok: true })
}
export async function PUT(req: NextRequest) {
const err = await requireAuth(req)
if (err) return err
const { oldDomain, newDomain } = await req.json()
if (!oldDomain || !newDomain) return NextResponse.json({ error: 'Missing params' }, { status: 400 })
await renameAnalyticsSite(oldDomain, newDomain)
return NextResponse.json({ ok: true })
}
export async function DELETE(req: NextRequest) {
const err = await requireAuth(req)
if (err) return err
const domain = req.nextUrl.searchParams.get('domain')
if (!domain) return NextResponse.json({ error: 'Domain required' }, { status: 400 })
await deleteAnalyticsSite(domain)
return NextResponse.json({ ok: true })
}