File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff line change 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 ()
Original file line number Diff line number Diff line change 1111from app .mqtt .client import start_mqtt
1212from app .api .v1 .devices import router as device_router
1313from app .core .limiter import limiter
14+ from app .api import logs
1415
1516# --- INIT DATABASE ---
1617Base .metadata .create_all (bind = engine )
2425
2526# 2. Register Router
2627app .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" )
Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments