Files
core/pkg/domain/store.go
2026-04-02 10:57:36 -04:00

96 lines
3.8 KiB
Go

package domain
import (
"context"
"net/http"
"time"
)
// Store embeds all sub interfaces for Core
type Store interface {
TicketStore
IdentityStore
IngestStore
ConfigStore
AnalyticsStore
DraftStore
}
// TicketStore: Core CRUD and Workflow
type TicketStore interface {
GetTickets(ctx context.Context) ([]Ticket, error)
GetDashboardTickets(ctx context.Context, tabStatus, filter, assetFilter, userEmail, userRole string, limit, offset int) ([]Ticket, int, map[string]int, error)
CreateTicket(ctx context.Context, t *Ticket) error
GetTicketByID(ctx context.Context, id int) (Ticket, error)
UpdateTicketInline(ctx context.Context, ticketID int, severity, description, remediation, comment, actor, status, assignee string) error
}
// IdentityStore: Users, Sessions, and Dispatching
type IdentityStore interface {
CreateUser(ctx context.Context, email, fullName, passwordHash, globalRole string) (*User, error)
GetUserByEmail(ctx context.Context, email string) (*User, error)
GetUserByID(ctx context.Context, id int) (*User, error)
GetAllUsers(ctx context.Context) ([]*User, error)
GetUserCount(ctx context.Context) (int, error)
UpdateUserPassword(ctx context.Context, id int, newPasswordHash string) error
UpdateUserRole(ctx context.Context, id int, newRole string) error
DeactivateUserAndReassign(ctx context.Context, userID int) error
CreateSession(ctx context.Context, token string, userID int, expiresAt time.Time) error
GetSession(ctx context.Context, token string) (*Session, error)
DeleteSession(ctx context.Context, token string) error
GetWranglers(ctx context.Context) ([]User, error)
}
// IngestStore: Scanners, Adapters, and Sync History
type IngestStore interface {
IngestTickets(ctx context.Context, tickets []Ticket) error
ProcessIngestionBatch(ctx context.Context, source string, assetIdentifier string, incoming []Ticket) error
GetAdapters(ctx context.Context) ([]Adapter, error)
GetAdapterByID(ctx context.Context, id int) (Adapter, error)
GetAdapterByName(ctx context.Context, name string) (Adapter, error)
SaveAdapter(ctx context.Context, adapter Adapter) error
DeleteAdapter(ctx context.Context, id int) error
LogSync(ctx context.Context, source, status string, records int, errMsg string) error
GetRecentSyncLogs(ctx context.Context, limit int) ([]SyncLog, error)
}
// ConfigStore: Global System Settings
type ConfigStore interface {
GetAppConfig(ctx context.Context) (AppConfig, error)
UpdateAppConfig(ctx context.Context, config AppConfig) error
GetSLAPolicies(ctx context.Context) ([]SLAPolicy, error)
UpdateSLAPolicies(ctx context.Context, slas []SLAPolicy) error
UpdateBackupPolicy(ctx context.Context, policy BackupPolicy) error
ExportSystemState(ctx context.Context) (ExportState, error)
}
// AnalyticsStore: Audit Logs and KPI Metrics
type AnalyticsStore interface {
GetSheriffAnalytics(ctx context.Context) (SheriffAnalytics, error)
GetAnalyticsSummary(ctx context.Context) (map[string]int, error)
GetGlobalActivityFeed(ctx context.Context, limit int) ([]FeedItem, error)
GetPaginatedActivityFeed(ctx context.Context, filter string, limit int, offset int) ([]FeedItem, int, error)
}
// DraftStore: The Pentest Desk OSS, word docx
type DraftStore interface {
SaveDraft(ctx context.Context, draft DraftTicket) error
GetDraftsByReport(ctx context.Context, reportID string) ([]DraftTicket, error)
DeleteDraft(ctx context.Context, draftID string) error
UpdateDraft(ctx context.Context, draftID int, payload Ticket) error
PromotePentestDrafts(ctx context.Context, reportID string, analystEmail string, tickets []Ticket) error
}
type Authenticator interface {
Middleware(next http.Handler) http.Handler
}
type SLACalculator interface {
CalculateDueDate(severity string) *time.Time
CalculateTrueSLAHours(ctx context.Context, ticketID int, store Store) (float64, error)
}