package mock
import (
"context"
"fmt"
"tera-clone/services/tera-api/internal/domain"
"tera-clone/services/tera-api/internal/logservice"
)
func ( s * Store ) ClearPortLogs ( ctx context . Context , channel string ) ( domain . PortLogClearResult , error ) {
if _ , err := parseChannel ( channel ) ; channel != "ALL" && err != nil {
return domain . PortLogClearResult { } , err
}
// Refuse deletion if its audit request cannot be persisted.
if _ , err := s . RecordAudit ( ctx , domain . AuditEvent { Action : "log.port.clear.request" , Target : channel , Result : "succeeded" , Message : "administrator requested clearing this port's communication logs" } ) ; err != nil {
return domain . PortLogClearResult { } , err
}
s . mu . Lock ( )
defer s . mu . Unlock ( )
deleted := 0
if s . logJournal != nil {
cleaner , ok := s . logJournal . ( logservice . PortLogCleaner )
if ! ok {
return domain . PortLogClearResult { } , fmt . Errorf ( "port log clearing is not supported by this journal" )
}
count , err := cleaner . ClearPort ( channel )
if err != nil {
return domain . PortLogClearResult { } , err
}
deleted = count
if err := s . refreshPortJournalLocked ( ) ; err != nil {
return domain . PortLogClearResult { } , err
}
} else {
before := s . portLogEvents
kept := make ( [ ] domain . PortLogEvent , 0 , len ( before ) )
for _ , event := range before {
if channel == "ALL" || event . Channel == channel {
deleted ++
continue
}
kept = append ( kept , event )
}
s . portLogEvents , s . portLogLoaded = kept , true
if err := s . persistPortLogStoreLocked ( ) ; err != nil {
s . portLogEvents = before
return domain . PortLogClearResult { } , err
}
}
id := s . recordAuditLocked ( ctx , "log.port.clear" , channel , "succeeded" , fmt . Sprintf ( "cleared %d port communication log records; system, audit and link logs preserved" , deleted ) )
return domain . PortLogClearResult { Channel : channel , Deleted : deleted , AuditID : id } , nil
}