Skip to content

Commit ed70d1b

Browse files
committed
Add API endpoints for sensor logs
1 parent 42567af commit ed70d1b

4 files changed

Lines changed: 56 additions & 0 deletions

File tree

app/api/v1/logs.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from fastapi import APIRouter, Depends, HTTPException
2+
from sqlalchemy.orm import Session
3+
from typing import List
4+
5+
from app.db.database import get_db # Pastikan path ini sesuai dengan file koneksi DB kamu
6+
from app.crud import log as crud_log
7+
from app.schemas.log import LogResponse
8+
9+
router = APIRouter()
10+
11+
@router.get("/{device_id}", response_model=List[LogResponse])
12+
def read_device_logs(
13+
device_id: str,
14+
limit: int = 20,
15+
db: Session = Depends(get_db)
16+
):
17+
"""
18+
Ambil histori data sensor.
19+
Contoh: GET /api/logs/ALAT_PALSU_01?limit=5
20+
"""
21+
logs = crud_log.get_logs_by_device(db, device_id=device_id, limit=limit)
22+
if not logs:
23+
# Kita tidak return 404, tapi list kosong saja biar frontend gak error
24+
return []
25+
return logs

app/crud/log.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from sqlalchemy.orm import Session
2+
from app.models.device import SensorLog # Pastikan import model kamu benar
3+
4+
def get_logs_by_device(db: Session, device_id: str, limit: int = 100):
5+
"""
6+
Mengambil data log sensor berdasarkan ID Alat.
7+
Diurutkan dari yang paling baru.
8+
"""
9+
return db.query(SensorLog)\
10+
.filter(SensorLog.device_id == device_id)\
11+
.order_by(SensorLog.created_at.desc())\
12+
.limit(limit)\
13+
.all()

app/main.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from app.mqtt.client import start_mqtt
1212
from app.api.v1.devices import router as device_router
1313
from app.core.limiter import limiter
14+
from app.api import logs
1415

1516
# --- INIT DATABASE ---
1617
Base.metadata.create_all(bind=engine)
@@ -24,6 +25,7 @@
2425

2526
# 2. Register Router
2627
app.include_router(device_router, prefix="/api/v1", tags=["Devices"])
28+
app.include_router(logs.router, prefix="/api/logs", tags=["Sensor Logs"])
2729

2830
# --- STARTUP EVENTS ---
2931
@app.on_event("startup")

app/schemas/log.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from pydantic import BaseModel
2+
from datetime import datetime
3+
4+
# Cetakan dasar (isi data)
5+
class LogBase(BaseModel):
6+
topic_type: str
7+
value: str
8+
9+
# Cetakan untuk Response API (ditambah ID & Waktu)
10+
class LogResponse(LogBase):
11+
id: int
12+
device_id: str
13+
created_at: datetime
14+
15+
class Config:
16+
from_attributes = True # Supaya bisa baca data dari SQLAlchemy

0 commit comments

Comments
 (0)