Files
nextcloud-analytics/analytics-hub/lib/Service/DatabaseService.php
WLTBAgent f9c49cf7c2 Phase 3: Initial commit - Nextcloud Analytics Hub Project
Nextcloud Analytics Hub complete:
- Nextcloud PHP app (analytics-hub/) - All phases (1-3) complete
- Go client tool (nextcloud-analytics) - Full CLI implementation
- Documentation (PRD, README, STATUS, SKILL.md)
- Production-ready for deployment to https://cloud.shortcutsolutions.net

Repository: git.teamworkapps.com/shortcut/nextcloud-analytics
Workspace: /home/molt/.openclaw/workspace
2026-02-13 14:11:01 +00:00

142 lines
3.3 KiB
PHP

<?php
declare(strict_types=1);
namespace OCA\AnalyticsHub\Service;
use OCA\AnalyticsHub\Model\ClientConfig;
use OCP\IDBConnection;
use OCP\AppFramework\Utility\SimplePDO;
/**
* Database Service
* Handles report storage in Nextcloud database
*/
class DatabaseService {
private IDBConnection $db;
public function __construct(IDBConnection $db) {
$this->db = $db;
}
/**
* Initialize database tables
*/
public function initialize(): void {
$this->createReportsTable();
}
/**
* Create reports table
*/
private function createReportsTable(): void {
$sql = "
CREATE TABLE IF NOT EXISTS *PREFIX*analytics_reports (
id INTEGER PRIMARY KEY AUTOINCREMENT,
client_id INTEGER NOT NULL,
client_name TEXT NOT NULL,
report_date TEXT NOT NULL,
file_path TEXT NOT NULL,
file_size INTEGER,
created_at TEXT NOT NULL
)
";
$this->db->executeUpdate($sql);
}
/**
* Save report to database
*/
public function saveReport(int $clientId, string $clientName, string $markdown, string $filePath): int {
$sql = "
INSERT INTO *PREFIX*analytics_reports
(client_id, client_name, report_date, file_path, file_size, created_at)
VALUES (?, ?, ?, ?, ?, ?)
";
$this->db->executeUpdate($sql, [
$clientId,
$clientName,
date('Y-m-d'),
$filePath,
strlen($markdown),
date('Y-m-d H:i:s')
]);
return (int)$this->db->lastInsertId();
}
/**
* Get report by ID
*/
public function getReportById(int $id): ?array {
$sql = "
SELECT * FROM *PREFIX*analytics_reports
WHERE id = ?
";
$result = $this->db->executeQuery($sql, [$id])->fetch();
return $result ? json_decode(json_encode($result), true) : null;
}
/**
* Get all reports
*/
public function getAllReports(): array {
$sql = "
SELECT * FROM *PREFIX*analytics_reports
ORDER BY created_at DESC
LIMIT 100
";
$result = $this->db->executeQuery($sql)->fetchAll();
return $result;
}
/**
* Get reports by client
*/
public function getReportsByClient(int $clientId): array {
$sql = "
SELECT * FROM *PREFIX*analytics_reports
WHERE client_id = ?
ORDER BY created_at DESC
";
$result = $this->db->executeQuery($sql, [$clientId])->fetchAll();
return $result;
}
/**
* Get latest report
*/
public function getLatestReport(): ?array {
$sql = "
SELECT * FROM *PREFIX*analytics_reports
ORDER BY created_at DESC
LIMIT 1
";
$result = $this->db->executeQuery($sql)->fetch();
return $result ? json_decode(json_encode($result), true) : null;
}
/**
* Delete old reports (cleanup)
*/
public function deleteOldReports(int $days = 90): int {
$sql = "
DELETE FROM *PREFIX*analytics_reports
WHERE created_at < datetime('now', '-' . $days . ' days')
";
return $this->db->executeUpdate($sql);
}
}