systemprompt_logging/services/
database_log.rs1use systemprompt_database::DbPool;
7use systemprompt_identifiers::LogId;
8use systemprompt_traits::LogService;
9
10use crate::models::{LogEntry, LogFilter, LoggingError};
11use crate::repository::LoggingRepository;
12
13#[derive(Clone, Debug)]
14pub struct DatabaseLogService {
15 repository: LoggingRepository,
16}
17
18impl DatabaseLogService {
19 pub fn new(db_pool: &DbPool) -> Self {
20 Self {
21 repository: LoggingRepository::new(db_pool),
22 }
23 }
24
25 #[must_use]
26 pub const fn from_repository(repository: LoggingRepository) -> Self {
27 Self { repository }
28 }
29
30 #[must_use]
31 pub const fn repository(&self) -> &LoggingRepository {
32 &self.repository
33 }
34}
35
36impl LogService for DatabaseLogService {
37 type Entry = LogEntry;
38 type Filter = LogFilter;
39 type Error = LoggingError;
40
41 async fn log(&self, entry: Self::Entry) -> Result<(), Self::Error> {
42 self.repository.log(entry).await
43 }
44
45 async fn query(&self, filter: &Self::Filter) -> Result<(Vec<Self::Entry>, i64), Self::Error> {
46 self.repository.get_logs_paginated(filter).await
47 }
48
49 async fn list_recent(&self, limit: i64) -> Result<Vec<Self::Entry>, Self::Error> {
50 self.repository.get_recent_logs(limit).await
51 }
52
53 async fn find_by_id(&self, id: &LogId) -> Result<Option<Self::Entry>, Self::Error> {
54 self.repository.get_by_id(id).await
55 }
56
57 async fn delete(&self, id: &LogId) -> Result<bool, Self::Error> {
58 self.repository.delete_log_entry(id).await
59 }
60}