From ed9d828e3b2a5525046f6561c87524ff3cbb0a65 Mon Sep 17 00:00:00 2001 From: lumijiez <59575049+lumijiez@users.noreply.github.com> Date: Wed, 21 May 2025 21:24:40 +0300 Subject: [PATCH] test --- src/app/api/solar-data/route.js | 69 ++++++++++++--------------- src/app/page.js | 47 +++++++------------ src/components/BatteryStatus.js | 82 ++++++++++++++++++++++++++++++++- src/components/Navbar.js | 20 ++++++++ src/components/SolarChart.js | 82 +++++++++++++++++++-------------- src/components/SystemStatus.js | 57 ++++++++++++++++++++++- src/lib/mongodb.js | 31 +++++++++++++ 7 files changed, 281 insertions(+), 107 deletions(-) create mode 100644 src/components/Navbar.js create mode 100644 src/lib/mongodb.js diff --git a/src/app/api/solar-data/route.js b/src/app/api/solar-data/route.js index a66d32a..e99898d 100644 --- a/src/app/api/solar-data/route.js +++ b/src/app/api/solar-data/route.js @@ -1,63 +1,54 @@ -import { MongoClient } from 'mongodb' - -const uri = process.env.MONGODB_URI -const client = new MongoClient(uri) +import { NextResponse } from 'next/server' +import { connectToDatabase } from '@/lib/mongodb' export async function GET(request) { const { searchParams } = new URL(request.url) - const timeRange = searchParams.get('timeRange') || '1d' - const dataType = searchParams.get('dataType') || 'all' + const timeRange = searchParams.get('timeRange') || 'today' try { - await client.connect() - const db = client.db('solar') + const { db } = await connectToDatabase() const collection = db.collection('solar_data') - + const now = new Date() let startDate = new Date() + let endDate = new Date() switch (timeRange) { - case '1d': + case 'today': + startDate.setHours(0, 0, 0, 0) + endDate = now + break + case 'yesterday': startDate.setDate(now.getDate() - 1) + startDate.setHours(0, 0, 0, 0) + endDate = new Date(startDate) + endDate.setHours(23, 59, 59, 999) break - case '3d': - startDate.setDate(now.getDate() - 3) - break - case '1w': + case 'week': startDate.setDate(now.getDate() - 7) + startDate.setHours(0, 0, 0, 0) + endDate = now break - case '1m': + case 'month': startDate.setMonth(now.getMonth() - 1) + startDate.setHours(0, 0, 0, 0) + endDate = now break default: - startDate.setDate(now.getDate() - 1) + startDate.setHours(0, 0, 0, 0) + endDate = now } - let query = { - timestamp: { $gte: startDate } - } - - if (dataType === 'day') { - query['$expr'] = { - $and: [ - { $gte: [{ $hour: '$timestamp' }, 6] }, - { $lt: [{ $hour: '$timestamp' }, 18] } - ] + const data = await collection.find({ + timestamp: { + $gte: startDate, + $lte: endDate } - } else if (dataType === 'night') { - query['$expr'] = { - $or: [ - { $lt: [{ $hour: '$timestamp' }, 6] }, - { $gte: [{ $hour: '$timestamp' }, 18] } - ] - } - } + }).sort({ timestamp: 1 }).toArray() - const data = await collection.find(query).sort({ timestamp: 1 }).toArray() - return Response.json(data) + return NextResponse.json(data) } catch (error) { - return Response.json({ error: error.message }, { status: 500 }) - } finally { - await client.close() + console.error('Error fetching data:', error) + return NextResponse.json({ error: 'Failed to fetch data' }, { status: 500 }) } } \ No newline at end of file diff --git a/src/app/page.js b/src/app/page.js index 99fe38b..cb3c995 100644 --- a/src/app/page.js +++ b/src/app/page.js @@ -9,10 +9,11 @@ import { SolarChart } from '@/components/SolarChart' import { LastRefresh } from '@/components/LastRefresh' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { motion, AnimatePresence } from 'framer-motion' +import { Navbar } from '@/components/Navbar' export default function Dashboard() { const [data, setData] = useState([]) - const [timeRange, setTimeRange] = useState('1d') + const [timeRange, setTimeRange] = useState('today') const [loading, setLoading] = useState(true) const fetchData = async () => { @@ -77,22 +78,8 @@ export default function Dashboard() { return (
Real-time monitoring of your solar system
-