package mock
import (
"context"
"fmt"
"tera-clone/services/tera-api/internal/domain"
"tera-clone/services/tera-api/internal/logservice"
)
func ( s * Store ) ClearSystemLogs ( ctx context . Context ) ( domain . SystemLogClearResult , error ) {
s . mu . Lock ( )
defer s . mu . Unlock ( )
deleted := 0
if s . logJournal != nil {
cleaner , ok := s . logJournal . ( logservice . SystemLogCleaner )
if ! ok {
return domain . SystemLogClearResult { } , fmt . Errorf ( "system log clearing is not supported by this journal" )
}
count , err := cleaner . ClearSystem ( )
if err != nil {
return domain . SystemLogClearResult { } , err
}
deleted = count
if err := s . refreshSystemJournalLocked ( ) ; err != nil {
return domain . SystemLogClearResult { } , err
}
if err := s . refreshAuditJournalLocked ( ) ; err != nil {
return domain . SystemLogClearResult { } , err
}
} else {
before , loaded := s . systemLogEvents , s . systemLogLoaded
audits := s . auditEvents
deleted = len ( before ) + len ( audits )
s . systemLogEvents , s . systemLogLoaded = [ ] domain . SystemLogEvent { } , true
if err := s . persistSystemLogStoreLocked ( ) ; err != nil {
s . systemLogEvents , s . systemLogLoaded = before , loaded
return domain . SystemLogClearResult { } , err
}
s . auditEvents = nil
if err := s . persistAuditLogLocked ( ) ; err != nil {
s . auditEvents = audits
return domain . SystemLogClearResult { } , err
}
}
id := s . recordAuditLocked ( ctx , "log.system.clear" , "system" , "succeeded" , fmt . Sprintf ( "cleared %d system and audit records; port and link logs preserved" , deleted ) )
return domain . SystemLogClearResult { Deleted : deleted , AuditID : id } , nil
}