repository

package
v0.8.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 4, 2026 License: Apache-2.0 Imports: 21 Imported by: 0

Documentation

Overview

Package repository provides data access repositories for domain entities.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func SetTicketNumberGenerator

func SetTicketNumberGenerator(gen ticketnumber.Generator, store ticketnumber.CounterStore)

SetTicketNumberGenerator injects the global ticket number generator and store used by new repositories.

func TicketNumberGeneratorInfo

func TicketNumberGeneratorInfo() (string, bool)

TicketNumberGeneratorInfo returns current generator name and date-based flag.

Types

type ACLRepository

type ACLRepository struct {
	// contains filtered or unexported fields
}

ACLRepository handles database operations for ACLs.

func NewACLRepository

func NewACLRepository(db *sql.DB) *ACLRepository

NewACLRepository creates a new ACL repository.

func (*ACLRepository) GetACL

func (r *ACLRepository) GetACL(ctx context.Context, id int) (*models.ACL, error)

GetACL returns a single ACL by ID.

func (*ACLRepository) GetACLByName

func (r *ACLRepository) GetACLByName(ctx context.Context, name string) (*models.ACL, error)

GetACLByName returns a single ACL by name.

func (*ACLRepository) GetAllACLs

func (r *ACLRepository) GetAllACLs(ctx context.Context) ([]*models.ACL, error)

GetAllACLs returns all ACLs regardless of validity.

func (*ACLRepository) GetValidACLs

func (r *ACLRepository) GetValidACLs(ctx context.Context) ([]*models.ACL, error)

GetValidACLs returns all valid (enabled) ACLs ordered by name.

type APITokenRepository

type APITokenRepository struct {
	// contains filtered or unexported fields
}

APITokenRepository handles database operations for API tokens

func NewAPITokenRepository

func NewAPITokenRepository(db *sql.DB) *APITokenRepository

NewAPITokenRepository creates a new API token repository

func (*APITokenRepository) Create

func (r *APITokenRepository) Create(ctx context.Context, token *models.APIToken) (int64, error)

Create inserts a new API token

func (*APITokenRepository) GetByID

func (r *APITokenRepository) GetByID(ctx context.Context, id int64) (*models.APIToken, error)

GetByID retrieves a token by ID

func (*APITokenRepository) GetByPrefix

func (r *APITokenRepository) GetByPrefix(ctx context.Context, prefix string) ([]*models.APIToken, error)

GetByPrefix retrieves tokens matching a prefix (for verification)

func (*APITokenRepository) ListAll

func (r *APITokenRepository) ListAll(ctx context.Context, includeRevoked bool) ([]*models.APIToken, error)

ListAll retrieves all tokens (admin only)

func (*APITokenRepository) ListByUser

func (r *APITokenRepository) ListByUser(ctx context.Context, userID int, userType models.APITokenUserType) ([]*models.APIToken, error)

ListByUser retrieves all tokens for a user

func (*APITokenRepository) Revoke

func (r *APITokenRepository) Revoke(ctx context.Context, id int64, revokedBy int) error

Revoke soft-deletes a token

func (*APITokenRepository) UpdateLastUsed

func (r *APITokenRepository) UpdateLastUsed(ctx context.Context, id int64, ip string) error

UpdateLastUsed updates the last used timestamp and IP

type ArticleRepository

type ArticleRepository struct {
	// contains filtered or unexported fields
}

ArticleRepository handles database operations for articles.

func NewArticleRepository

func NewArticleRepository(db *sql.DB) *ArticleRepository

NewArticleRepository creates a new article repository.

func (*ArticleRepository) CountArticlesForTicket

func (r *ArticleRepository) CountArticlesForTicket(ticketID uint, includeInternal bool) (int, error)

CountArticlesForTicket counts the number of articles for a ticket.

func (*ArticleRepository) Create

func (r *ArticleRepository) Create(article *models.Article) error

Create creates a new article in the database (OTRS schema compatible).

func (*ArticleRepository) CreateAttachment

func (r *ArticleRepository) CreateAttachment(attachment *models.Attachment) error

CreateAttachment creates a new attachment for an article.

func (*ArticleRepository) Delete

func (r *ArticleRepository) Delete(id uint, userID uint) error

Delete soft deletes an article by setting valid_id to 0.

func (*ArticleRepository) DeleteAttachment

func (r *ArticleRepository) DeleteAttachment(id uint) error

DeleteAttachment removes an attachment.

func (*ArticleRepository) FindTicketByMessageID

func (r *ArticleRepository) FindTicketByMessageID(ctx context.Context, messageID string) (*models.Ticket, error)

FindTicketByMessageID resolves the ticket owning the provided Message-ID header.

func (*ArticleRepository) GetArticleWithAttachments

func (r *ArticleRepository) GetArticleWithAttachments(id uint) (*models.Article, error)

GetArticleWithAttachments retrieves an article with all its attachments.

func (*ArticleRepository) GetAttachmentByID

func (r *ArticleRepository) GetAttachmentByID(id uint) (*models.Attachment, error)

GetAttachmentByID retrieves a specific attachment.

func (*ArticleRepository) GetAttachmentsByArticleID

func (r *ArticleRepository) GetAttachmentsByArticleID(articleID uint) ([]models.Attachment, error)

GetAttachmentsByArticleID retrieves all attachments for an article.

func (*ArticleRepository) GetByID

func (r *ArticleRepository) GetByID(id uint) (*models.Article, error)

GetByID retrieves an article by its ID (joins MIME content).

func (*ArticleRepository) GetByTicketID

func (r *ArticleRepository) GetByTicketID(ticketID uint, includeInternal bool) ([]models.Article, error)

GetByTicketID retrieves all articles for a specific ticket.

func (*ArticleRepository) GetHTMLBodyAttachmentID

func (r *ArticleRepository) GetHTMLBodyAttachmentID(articleID uint) (*uint, error)

GetHTMLBodyAttachmentID finds the HTML body attachment for an article (OTRS-style).

func (*ArticleRepository) GetHTMLBodyContent

func (r *ArticleRepository) GetHTMLBodyContent(articleID uint) (string, error)

GetHTMLBodyContent retrieves the HTML body content for an article.

func (*ArticleRepository) GetLatestArticleForTicket

func (r *ArticleRepository) GetLatestArticleForTicket(ticketID uint) (*models.Article, error)

GetLatestArticleForTicket retrieves the most recent article for a ticket.

func (*ArticleRepository) GetLatestCustomerArticleForTicket

func (r *ArticleRepository) GetLatestCustomerArticleForTicket(ticketID uint) (*models.Article, error)

GetLatestCustomerArticleForTicket gets the most recent customer article for a ticket.

func (*ArticleRepository) GetSenderTypeColors

func (r *ArticleRepository) GetSenderTypeColors() (map[int]string, error)

GetSenderTypeColors returns a map of sender_type_id to hex color. Colors are looked up by matching article_sender_type.name to article_color.name.

func (*ArticleRepository) GetVisibleArticlesForCustomer

func (r *ArticleRepository) GetVisibleArticlesForCustomer(ticketID uint) ([]models.Article, error)

GetVisibleArticlesForCustomer retrieves all customer-visible articles for a ticket.

func (*ArticleRepository) Update

func (r *ArticleRepository) Update(article *models.Article) error

Update updates an article in the database.

type AutoCloseResult

type AutoCloseResult struct {
	Transitions map[string]int64
	Total       int64
}

AutoCloseResult captures how many tickets each transition touched.

type CannedResponseRepository

type CannedResponseRepository interface {
	// Response CRUD operations
	CreateResponse(ctx context.Context, response *models.CannedResponse) error
	GetResponseByID(ctx context.Context, id uint) (*models.CannedResponse, error)
	GetResponseByShortcut(ctx context.Context, shortcut string) (*models.CannedResponse, error)
	GetActiveResponses(ctx context.Context) ([]models.CannedResponse, error)
	GetResponsesByCategory(ctx context.Context, category string) ([]models.CannedResponse, error)
	GetResponsesForUser(ctx context.Context, userID uint) ([]models.CannedResponse, error)
	UpdateResponse(ctx context.Context, response *models.CannedResponse) error
	DeleteResponse(ctx context.Context, id uint) error

	// Usage tracking
	IncrementUsageCount(ctx context.Context, responseID uint) error
	RecordUsage(ctx context.Context, usage *models.CannedResponseUsage) error
	GetUsageHistory(ctx context.Context, responseID uint, limit int) ([]models.CannedResponseUsage, error)

	// Search and filtering
	SearchResponses(ctx context.Context, filter *models.CannedResponseFilter) ([]models.CannedResponse, error)
	GetMostUsedResponses(ctx context.Context, limit int) ([]models.CannedResponse, error)

	// Categories
	GetCategories(ctx context.Context) ([]models.CannedResponseCategory, error)
}

CannedResponseRepository defines the interface for canned response persistence.

type DBRoleRepository

type DBRoleRepository struct {
	// contains filtered or unexported fields
}

DBRoleRepository handles database operations for roles.

func NewDBRoleRepository

func NewDBRoleRepository(db *sql.DB) *DBRoleRepository

NewDBRoleRepository creates a new database role repository.

func (*DBRoleRepository) AddUserToRole

func (r *DBRoleRepository) AddUserToRole(userID, roleID, createdBy int) error

AddUserToRole adds a user to a role.

func (*DBRoleRepository) Create

func (r *DBRoleRepository) Create(role *models.DBRole) error

Create creates a new role.

func (*DBRoleRepository) Delete

func (r *DBRoleRepository) Delete(id int) error

Delete deletes a role by ID.

func (*DBRoleRepository) GetByID

func (r *DBRoleRepository) GetByID(id int) (*models.DBRole, error)

GetByID returns a role by ID.

func (*DBRoleRepository) GetByName

func (r *DBRoleRepository) GetByName(name string) (*models.DBRole, error)

GetByName returns a role by name.

func (*DBRoleRepository) GetGroupCount

func (r *DBRoleRepository) GetGroupCount(roleID int) (int, error)

GetGroupCount returns the number of groups assigned to a role.

func (*DBRoleRepository) GetUserCount

func (r *DBRoleRepository) GetUserCount(roleID int) (int, error)

GetUserCount returns the number of users assigned to a role.

func (*DBRoleRepository) List

func (r *DBRoleRepository) List() ([]*models.DBRole, error)

List returns all roles.

func (*DBRoleRepository) ListRoleUsers

func (r *DBRoleRepository) ListRoleUsers(roleID int) ([]int, error)

ListRoleUsers returns all users assigned to a role.

func (*DBRoleRepository) ListUserRoles

func (r *DBRoleRepository) ListUserRoles(userID int) ([]*models.DBRole, error)

ListUserRoles returns all roles assigned to a user.

func (*DBRoleRepository) RemoveUserFromRole

func (r *DBRoleRepository) RemoveUserFromRole(userID, roleID int) error

RemoveUserFromRole removes a user from a role.

func (*DBRoleRepository) SetRoleUsers

func (r *DBRoleRepository) SetRoleUsers(roleID int, userIDs []int, changedBy int) error

SetRoleUsers sets the users for a role (replaces all existing).

func (*DBRoleRepository) SetUserRoles

func (r *DBRoleRepository) SetUserRoles(userID int, roleIDs []int, changedBy int) error

SetUserRoles sets the roles for a user (replaces all existing).

func (*DBRoleRepository) Update

func (r *DBRoleRepository) Update(role *models.DBRole) error

Update updates an existing role.

type EmailAccountRepository

type EmailAccountRepository struct {
	// contains filtered or unexported fields
}

func NewEmailAccountRepository

func NewEmailAccountRepository(db *sql.DB) *EmailAccountRepository

func (*EmailAccountRepository) Create

func (r *EmailAccountRepository) Create(account *models.EmailAccount) (int, error)

func (*EmailAccountRepository) Delete

func (r *EmailAccountRepository) Delete(id int) error

func (*EmailAccountRepository) GetActiveAccounts

func (r *EmailAccountRepository) GetActiveAccounts() ([]*models.EmailAccount, error)

func (*EmailAccountRepository) GetByEmail

func (r *EmailAccountRepository) GetByEmail(email string) (*models.EmailAccount, error)

GetByEmail exists for backward compatibility; it delegates to GetByLogin.

func (*EmailAccountRepository) GetByID

func (r *EmailAccountRepository) GetByID(id int) (*models.EmailAccount, error)

func (*EmailAccountRepository) GetByLogin

func (r *EmailAccountRepository) GetByLogin(login string) (*models.EmailAccount, error)

GetByLogin returns an account by login (mailbox username).

func (*EmailAccountRepository) Update

func (r *EmailAccountRepository) Update(account *models.EmailAccount) error

type EmailTemplateRepository

type EmailTemplateRepository struct {
	// contains filtered or unexported fields
}

func NewEmailTemplateRepository

func NewEmailTemplateRepository(db *sql.DB) *EmailTemplateRepository

func (*EmailTemplateRepository) Create

func (r *EmailTemplateRepository) Create(template *models.EmailTemplate) (int, error)

func (*EmailTemplateRepository) Delete

func (r *EmailTemplateRepository) Delete(id int) error

func (*EmailTemplateRepository) GetAll

func (*EmailTemplateRepository) GetByID

func (*EmailTemplateRepository) GetByName

func (r *EmailTemplateRepository) GetByName(name string) (*models.EmailTemplate, error)

func (*EmailTemplateRepository) GetByType

func (r *EmailTemplateRepository) GetByType(templateType string) ([]*models.EmailTemplate, error)

func (*EmailTemplateRepository) Update

func (r *EmailTemplateRepository) Update(template *models.EmailTemplate) error

type ExecContext

type ExecContext interface {
	ExecContext(context.Context, string, ...interface{}) (sql.Result, error)
}

ExecContext represents the subset of database operations needed to insert history entries.

type FilterMatch

type FilterMatch struct {
	Key   string // Header name (From, To, Subject, X-Custom-Header)
	Value string // Regex pattern
	Not   bool   // Negate match
}

FilterMatch represents a match condition in a postmaster filter.

type FilterSet

type FilterSet struct {
	Key   string // X-GoatFlow-Queue, X-GoatFlow-Priority, etc.
	Value string // Value to set
}

FilterSet represents a set action in a postmaster filter.

type GenericAgentRepository

type GenericAgentRepository struct {
	// contains filtered or unexported fields
}

GenericAgentRepository handles database operations for generic agent jobs.

func NewGenericAgentRepository

func NewGenericAgentRepository(db *sql.DB) *GenericAgentRepository

NewGenericAgentRepository creates a new generic agent repository.

func (*GenericAgentRepository) GetAllJobs

GetAllJobs returns all generic agent jobs regardless of validity.

func (*GenericAgentRepository) GetJob

GetJob returns a single job by name.

func (*GenericAgentRepository) GetValidJobs

GetValidJobs returns all valid (enabled) generic agent jobs.

func (*GenericAgentRepository) JobExists

func (r *GenericAgentRepository) JobExists(ctx context.Context, name string) (bool, error)

JobExists checks if a job with the given name exists.

func (*GenericAgentRepository) SetConfigValue

func (r *GenericAgentRepository) SetConfigValue(ctx context.Context, name, key, value string) error

SetConfigValue sets a single config key-value for a job.

func (*GenericAgentRepository) UpdateLastRun

func (r *GenericAgentRepository) UpdateLastRun(ctx context.Context, name string, runTime time.Time) error

UpdateLastRun updates the last run time for a job.

type GroupRepository

type GroupRepository interface {
	CreateGroup(ctx context.Context, group *models.Group) error
	GetGroup(ctx context.Context, id string) (*models.Group, error)
	GetGroupByName(ctx context.Context, name string) (*models.Group, error)
	GetByName(ctx context.Context, name string) (*models.Group, error)
	UpdateGroup(ctx context.Context, group *models.Group) error
	DeleteGroup(ctx context.Context, id string) error
	ListGroups(ctx context.Context) ([]models.Group, error)
	AddUserToGroup(ctx context.Context, groupID, userID string) error
	RemoveUserFromGroup(ctx context.Context, groupID, userID string) error
	GetUserGroups(ctx context.Context, userID string) ([]models.Group, error)
}

GroupRepository defines the interface for group operations.

type GroupSQLRepository

type GroupSQLRepository struct {
	// contains filtered or unexported fields
}

GroupSQLRepository handles database operations for groups.

func NewGroupRepository

func NewGroupRepository(db *sql.DB) *GroupSQLRepository

NewGroupRepository creates a new group repository.

func (*GroupSQLRepository) AddUserToGroup

func (r *GroupSQLRepository) AddUserToGroup(userID uint, groupID uint) error

AddUserToGroup adds a user to a group.

func (*GroupSQLRepository) Create

func (r *GroupSQLRepository) Create(group *models.Group) error

Create creates a new group.

func (*GroupSQLRepository) Delete

func (r *GroupSQLRepository) Delete(id uint) error

Delete permanently deletes a group and removes all member associations.

func (*GroupSQLRepository) GetByID

func (r *GroupSQLRepository) GetByID(id uint) (*models.Group, error)

GetByID retrieves a group by ID.

func (*GroupSQLRepository) GetByName

func (r *GroupSQLRepository) GetByName(name string) (*models.Group, error)

GetByName retrieves a group by name.

func (*GroupSQLRepository) GetGroupMembers

func (r *GroupSQLRepository) GetGroupMembers(groupID uint) ([]*models.User, error)

GetGroupMembers retrieves all users in a group.

func (*GroupSQLRepository) GetUserGroups

func (r *GroupSQLRepository) GetUserGroups(userID uint) ([]string, error)

GetUserGroups retrieves group names for a user.

func (*GroupSQLRepository) List

func (r *GroupSQLRepository) List() ([]*models.Group, error)

List retrieves all groups (both active and inactive).

func (*GroupSQLRepository) RemoveUserFromGroup

func (r *GroupSQLRepository) RemoveUserFromGroup(userID uint, groupID uint) error

RemoveUserFromGroup removes a user from a group.

func (*GroupSQLRepository) Update

func (r *GroupSQLRepository) Update(group *models.Group) error

Update updates an existing group.

type ITicketRepository

type ITicketRepository interface {
	Create(ticket *models.Ticket) error
	GetByID(id uint) (*models.Ticket, error)
	Update(ticket *models.Ticket) error
	Delete(id uint) error
	List(req *models.TicketListRequest) (*models.TicketListResponse, error)
	GetByTicketNumber(ticketNumber string) (*models.Ticket, error)
	Count() (int, error)
	CountByStatus(status string) (int, error)
	// Dashboard statistics methods
	CountByStateID(stateID int) (int, error)
	CountClosedToday() (int, error)
}

ITicketRepository defines the interface for ticket data operations.

type InternalNoteRepository

type InternalNoteRepository interface {
	// Note CRUD operations
	CreateNote(ctx context.Context, note *models.InternalNote) error
	GetNoteByID(ctx context.Context, id uint) (*models.InternalNote, error)
	GetNotesByTicket(ctx context.Context, ticketID uint) ([]models.InternalNote, error)
	GetPinnedNotes(ctx context.Context, ticketID uint) ([]models.InternalNote, error)
	GetImportantNotes(ctx context.Context, ticketID uint) ([]models.InternalNote, error)
	UpdateNote(ctx context.Context, note *models.InternalNote) error
	DeleteNote(ctx context.Context, id uint) error

	// Search and filtering
	SearchNotes(ctx context.Context, filter *models.NoteFilter) ([]models.InternalNote, error)
	GetNotesByAuthor(ctx context.Context, authorID uint) ([]models.InternalNote, error)
	GetNotesByCategory(ctx context.Context, category string) ([]models.InternalNote, error)
	GetNotesByTags(ctx context.Context, tags []string) ([]models.InternalNote, error)

	// Edit history
	AddEditHistory(ctx context.Context, edit *models.NoteEdit) error
	GetEditHistory(ctx context.Context, noteID uint) ([]models.NoteEdit, error)

	// Statistics
	GetNoteStatistics(ctx context.Context, ticketID uint) (*models.NoteStatistics, error)

	// Categories
	GetCategories(ctx context.Context) ([]models.NoteCategory, error)
	CreateCategory(ctx context.Context, category *models.NoteCategory) error
	UpdateCategory(ctx context.Context, category *models.NoteCategory) error
	DeleteCategory(ctx context.Context, id uint) error

	// Templates
	CreateTemplate(ctx context.Context, template *models.NoteTemplate) error
	GetTemplates(ctx context.Context) ([]models.NoteTemplate, error)
	GetTemplateByID(ctx context.Context, id uint) (*models.NoteTemplate, error)
	UpdateTemplate(ctx context.Context, template *models.NoteTemplate) error
	DeleteTemplate(ctx context.Context, id uint) error
	IncrementTemplateUsage(ctx context.Context, id uint) error

	// Mentions
	CreateMention(ctx context.Context, mention *models.NoteMention) error
	GetMentionsByUser(ctx context.Context, userID uint) ([]models.NoteMention, error)
	MarkMentionAsRead(ctx context.Context, mentionID uint) error

	// Activity tracking
	LogActivity(ctx context.Context, activity *models.NoteActivity) error
	GetActivityLog(ctx context.Context, ticketID uint, limit int) ([]models.NoteActivity, error)
}

InternalNoteRepository defines the interface for internal note persistence.

type LDAPRepository

type LDAPRepository interface {
	// Configuration management
	CreateConfig(config *models.LDAPConfiguration) error
	UpdateConfig(config *models.LDAPConfiguration) error
	GetConfigByID(id int) (*models.LDAPConfiguration, error)
	GetActiveConfig() (*models.LDAPConfiguration, error)
	ListConfigs() ([]*models.LDAPConfiguration, error)
	DeleteConfig(id int) error

	// Sync history
	CreateSyncHistory(history *models.LDAPSyncHistory) error
	UpdateSyncHistory(history *models.LDAPSyncHistory) error
	GetSyncHistoryByID(id int) (*models.LDAPSyncHistory, error)
	ListSyncHistory(configID int, limit, offset int) ([]*models.LDAPSyncHistory, error)
	GetLatestSyncHistory(configID int) (*models.LDAPSyncHistory, error)
	DeleteOldSyncHistory(configID int, keepDays int) error

	// User mappings
	CreateUserMapping(mapping *models.LDAPUserMapping) error
	UpdateUserMapping(mapping *models.LDAPUserMapping) error
	GetUserMappingByUserID(userID int) (*models.LDAPUserMapping, error)
	GetUserMappingByLDAPDN(configID int, dn string) (*models.LDAPUserMapping, error)
	GetUserMappingByLDAPGUID(configID int, guid string) (*models.LDAPUserMapping, error)
	ListUserMappings(configID int) ([]*models.LDAPUserMapping, error)
	DeleteUserMapping(id int) error

	// Group mappings
	CreateGroupMapping(mapping *models.LDAPGroupMapping) error
	UpdateGroupMapping(mapping *models.LDAPGroupMapping) error
	GetGroupMappingByGroupID(groupID int) (*models.LDAPGroupMapping, error)
	GetGroupMappingByLDAPDN(configID int, dn string) (*models.LDAPGroupMapping, error)
	GetGroupMappingByLDAPGUID(configID int, guid string) (*models.LDAPGroupMapping, error)
	ListGroupMappings(configID int) ([]*models.LDAPGroupMapping, error)
	DeleteGroupMapping(id int) error

	// Authentication logs
	CreateAuthLog(log *models.LDAPAuthenticationLog) error
	GetAuthLogsByUsername(username string, limit int) ([]*models.LDAPAuthenticationLog, error)
	GetAuthLogsByTimeRange(configID int, startTime, endTime time.Time) ([]*models.LDAPAuthenticationLog, error)
	DeleteOldAuthLogs(configID int, keepDays int) error

	// Statistics
	GetSyncStatistics(configID int) (*models.LDAPSyncStatistics, error)
	GetAuthStatistics(configID int, days int) (map[string]interface{}, error)

	// Testing
	RecordConnectionTest(test *models.LDAPConnectionTest) error
}

LDAPRepository defines the interface for LDAP configuration and sync data.

type LookupAuditLog

type LookupAuditLog struct {
	ID         int       `json:"id"`
	EntityType string    `json:"entity_type"` // queue, priority, type, status
	EntityID   int       `json:"entity_id"`
	Action     string    `json:"action"` // create, update, delete
	OldValue   string    `json:"old_value"`
	NewValue   string    `json:"new_value"`
	UserID     int       `json:"user_id"`
	UserEmail  string    `json:"user_email"`
	Timestamp  time.Time `json:"timestamp"`
	IPAddress  string    `json:"ip_address"`
}

LookupAuditLog represents an audit log entry for lookup changes.

type LookupConfiguration

type LookupConfiguration struct {
	Version    string              `json:"version"`
	ExportedAt time.Time           `json:"exported_at"`
	ExportedBy string              `json:"exported_by"`
	Queues     []models.QueueInfo  `json:"queues"`
	Priorities []models.LookupItem `json:"priorities"`
	Types      []models.LookupItem `json:"types"`
	Statuses   []models.LookupItem `json:"statuses"`
}

LookupConfiguration represents exportable/importable configuration.

type LookupRepository

type LookupRepository interface {
	// Queue operations
	GetQueues(ctx context.Context) ([]models.QueueInfo, error)
	GetQueueByID(ctx context.Context, id int) (*models.QueueInfo, error)
	CreateQueue(ctx context.Context, queue *models.QueueInfo) error
	UpdateQueue(ctx context.Context, queue *models.QueueInfo) error
	DeleteQueue(ctx context.Context, id int) error

	// Priority operations
	GetPriorities(ctx context.Context) ([]models.LookupItem, error)
	GetPriorityByID(ctx context.Context, id int) (*models.LookupItem, error)
	UpdatePriority(ctx context.Context, priority *models.LookupItem) error

	// Type operations
	GetTypes(ctx context.Context) ([]models.LookupItem, error)
	GetTypeByID(ctx context.Context, id int) (*models.LookupItem, error)
	CreateType(ctx context.Context, typ *models.LookupItem) error
	UpdateType(ctx context.Context, typ *models.LookupItem) error
	DeleteType(ctx context.Context, id int) error

	// Status operations
	GetStatuses(ctx context.Context) ([]models.LookupItem, error)
	GetStatusByID(ctx context.Context, id int) (*models.LookupItem, error)
	UpdateStatus(ctx context.Context, status *models.LookupItem) error

	// Audit operations
	LogChange(ctx context.Context, change *LookupAuditLog) error
	GetAuditLogs(ctx context.Context, entityType string, entityID int, limit int) ([]LookupAuditLog, error)

	// Export/Import operations
	ExportConfiguration(ctx context.Context) (*LookupConfiguration, error)
	ImportConfiguration(ctx context.Context, config *LookupConfiguration) error
}

LookupRepository defines the interface for lookup data persistence.

type MemoryCannedResponseRepository

type MemoryCannedResponseRepository struct {
	// contains filtered or unexported fields
}

MemoryCannedResponseRepository is an in-memory implementation of CannedResponseRepository.

func NewMemoryCannedResponseRepository

func NewMemoryCannedResponseRepository() *MemoryCannedResponseRepository

NewMemoryCannedResponseRepository creates a new in-memory canned response repository.

func (*MemoryCannedResponseRepository) CreateResponse

func (r *MemoryCannedResponseRepository) CreateResponse(ctx context.Context, response *models.CannedResponse) error

CreateResponse creates a new canned response.

func (*MemoryCannedResponseRepository) DeleteResponse

func (r *MemoryCannedResponseRepository) DeleteResponse(ctx context.Context, id uint) error

DeleteResponse deletes a response.

func (*MemoryCannedResponseRepository) GetActiveResponses

func (r *MemoryCannedResponseRepository) GetActiveResponses(ctx context.Context) ([]models.CannedResponse, error)

GetActiveResponses retrieves all active responses.

func (*MemoryCannedResponseRepository) GetCategories

GetCategories retrieves all unique categories.

func (*MemoryCannedResponseRepository) GetMostUsedResponses

func (r *MemoryCannedResponseRepository) GetMostUsedResponses(ctx context.Context, limit int) ([]models.CannedResponse, error)

GetMostUsedResponses returns the most frequently used responses.

func (*MemoryCannedResponseRepository) GetResponseByID

GetResponseByID retrieves a response by ID.

func (*MemoryCannedResponseRepository) GetResponseByShortcut

func (r *MemoryCannedResponseRepository) GetResponseByShortcut(ctx context.Context, shortcut string) (*models.CannedResponse, error)

GetResponseByShortcut retrieves a response by its shortcut.

func (*MemoryCannedResponseRepository) GetResponsesByCategory

func (r *MemoryCannedResponseRepository) GetResponsesByCategory(ctx context.Context, category string) ([]models.CannedResponse, error)

GetResponsesByCategory retrieves responses by category.

func (*MemoryCannedResponseRepository) GetResponsesForUser

func (r *MemoryCannedResponseRepository) GetResponsesForUser(ctx context.Context, userID uint) ([]models.CannedResponse, error)

GetResponsesForUser retrieves responses accessible to a specific user.

func (*MemoryCannedResponseRepository) GetUsageHistory

func (r *MemoryCannedResponseRepository) GetUsageHistory(ctx context.Context, responseID uint, limit int) ([]models.CannedResponseUsage, error)

GetUsageHistory retrieves usage history for a response.

func (*MemoryCannedResponseRepository) IncrementUsageCount

func (r *MemoryCannedResponseRepository) IncrementUsageCount(ctx context.Context, responseID uint) error

IncrementUsageCount increments the usage count of a response.

func (*MemoryCannedResponseRepository) RecordUsage

RecordUsage records when a response was used.

func (*MemoryCannedResponseRepository) SearchResponses

SearchResponses searches responses based on filter criteria.

func (*MemoryCannedResponseRepository) UpdateResponse

func (r *MemoryCannedResponseRepository) UpdateResponse(ctx context.Context, response *models.CannedResponse) error

UpdateResponse updates an existing response.

type MemoryInternalNoteRepository

type MemoryInternalNoteRepository struct {
	// contains filtered or unexported fields
}

MemoryInternalNoteRepository is an in-memory implementation of InternalNoteRepository.

func NewMemoryInternalNoteRepository

func NewMemoryInternalNoteRepository() *MemoryInternalNoteRepository

NewMemoryInternalNoteRepository creates a new in-memory internal note repository.

func (*MemoryInternalNoteRepository) AddEditHistory

func (r *MemoryInternalNoteRepository) AddEditHistory(ctx context.Context, edit *models.NoteEdit) error

AddEditHistory adds an edit history entry.

func (*MemoryInternalNoteRepository) CreateCategory

func (r *MemoryInternalNoteRepository) CreateCategory(ctx context.Context, category *models.NoteCategory) error

CreateCategory creates a new category.

func (*MemoryInternalNoteRepository) CreateMention

func (r *MemoryInternalNoteRepository) CreateMention(ctx context.Context, mention *models.NoteMention) error

CreateMention creates a new mention.

func (*MemoryInternalNoteRepository) CreateNote

CreateNote creates a new internal note.

func (*MemoryInternalNoteRepository) CreateTemplate

func (r *MemoryInternalNoteRepository) CreateTemplate(ctx context.Context, template *models.NoteTemplate) error

CreateTemplate creates a new template.

func (*MemoryInternalNoteRepository) DeleteCategory

func (r *MemoryInternalNoteRepository) DeleteCategory(ctx context.Context, id uint) error

DeleteCategory deletes a category.

func (*MemoryInternalNoteRepository) DeleteNote

func (r *MemoryInternalNoteRepository) DeleteNote(ctx context.Context, id uint) error

DeleteNote deletes a note.

func (*MemoryInternalNoteRepository) DeleteTemplate

func (r *MemoryInternalNoteRepository) DeleteTemplate(ctx context.Context, id uint) error

DeleteTemplate deletes a template.

func (*MemoryInternalNoteRepository) GetActivityLog

func (r *MemoryInternalNoteRepository) GetActivityLog(ctx context.Context, ticketID uint, limit int) ([]models.NoteActivity, error)

GetActivityLog retrieves activity log for a ticket.

func (*MemoryInternalNoteRepository) GetCategories

GetCategories retrieves all unique categories.

func (*MemoryInternalNoteRepository) GetEditHistory

func (r *MemoryInternalNoteRepository) GetEditHistory(ctx context.Context, noteID uint) ([]models.NoteEdit, error)

GetEditHistory retrieves edit history for a note.

func (*MemoryInternalNoteRepository) GetImportantNotes

func (r *MemoryInternalNoteRepository) GetImportantNotes(ctx context.Context, ticketID uint) ([]models.InternalNote, error)

GetImportantNotes retrieves important notes for a ticket.

func (*MemoryInternalNoteRepository) GetMentionsByUser

func (r *MemoryInternalNoteRepository) GetMentionsByUser(ctx context.Context, userID uint) ([]models.NoteMention, error)

GetMentionsByUser retrieves mentions for a user.

func (*MemoryInternalNoteRepository) GetNoteByID

GetNoteByID retrieves a note by ID.

func (*MemoryInternalNoteRepository) GetNoteStatistics

func (r *MemoryInternalNoteRepository) GetNoteStatistics(ctx context.Context, ticketID uint) (*models.NoteStatistics, error)

GetNoteStatistics retrieves statistics for notes.

func (*MemoryInternalNoteRepository) GetNotesByAuthor

func (r *MemoryInternalNoteRepository) GetNotesByAuthor(ctx context.Context, authorID uint) ([]models.InternalNote, error)

GetNotesByAuthor retrieves notes by author.

func (*MemoryInternalNoteRepository) GetNotesByCategory

func (r *MemoryInternalNoteRepository) GetNotesByCategory(ctx context.Context, category string) ([]models.InternalNote, error)

GetNotesByCategory retrieves notes by category.

func (*MemoryInternalNoteRepository) GetNotesByTags

func (r *MemoryInternalNoteRepository) GetNotesByTags(ctx context.Context, tags []string) ([]models.InternalNote, error)

GetNotesByTags retrieves notes by tags.

func (*MemoryInternalNoteRepository) GetNotesByTicket

func (r *MemoryInternalNoteRepository) GetNotesByTicket(ctx context.Context, ticketID uint) ([]models.InternalNote, error)

GetNotesByTicket retrieves all notes for a ticket.

func (*MemoryInternalNoteRepository) GetPinnedNotes

func (r *MemoryInternalNoteRepository) GetPinnedNotes(ctx context.Context, ticketID uint) ([]models.InternalNote, error)

GetPinnedNotes retrieves pinned notes for a ticket.

func (*MemoryInternalNoteRepository) GetTemplateByID

func (r *MemoryInternalNoteRepository) GetTemplateByID(ctx context.Context, id uint) (*models.NoteTemplate, error)

GetTemplateByID retrieves a template by ID.

func (*MemoryInternalNoteRepository) GetTemplates

GetTemplates retrieves all templates.

func (*MemoryInternalNoteRepository) IncrementTemplateUsage

func (r *MemoryInternalNoteRepository) IncrementTemplateUsage(ctx context.Context, id uint) error

IncrementTemplateUsage increments the usage count of a template.

func (*MemoryInternalNoteRepository) LogActivity

func (r *MemoryInternalNoteRepository) LogActivity(ctx context.Context, activity *models.NoteActivity) error

LogActivity logs an activity.

func (*MemoryInternalNoteRepository) MarkMentionAsRead

func (r *MemoryInternalNoteRepository) MarkMentionAsRead(ctx context.Context, mentionID uint) error

MarkMentionAsRead marks a mention as read.

func (*MemoryInternalNoteRepository) SearchNotes

SearchNotes searches notes based on filter criteria.

func (*MemoryInternalNoteRepository) UpdateCategory

func (r *MemoryInternalNoteRepository) UpdateCategory(ctx context.Context, category *models.NoteCategory) error

UpdateCategory updates a category.

func (*MemoryInternalNoteRepository) UpdateNote

UpdateNote updates an existing note.

func (*MemoryInternalNoteRepository) UpdateTemplate

func (r *MemoryInternalNoteRepository) UpdateTemplate(ctx context.Context, template *models.NoteTemplate) error

UpdateTemplate updates a template.

type MemoryLookupRepository

type MemoryLookupRepository struct {
	// contains filtered or unexported fields
}

MemoryLookupRepository is an in-memory implementation of LookupRepository.

func NewMemoryLookupRepository

func NewMemoryLookupRepository() *MemoryLookupRepository

NewMemoryLookupRepository creates a new in-memory lookup repository with default data.

func (*MemoryLookupRepository) CreateQueue

func (r *MemoryLookupRepository) CreateQueue(ctx context.Context, queue *models.QueueInfo) error

func (*MemoryLookupRepository) CreateType

func (r *MemoryLookupRepository) CreateType(ctx context.Context, typ *models.LookupItem) error

func (*MemoryLookupRepository) DeleteQueue

func (r *MemoryLookupRepository) DeleteQueue(ctx context.Context, id int) error

func (*MemoryLookupRepository) DeleteType

func (r *MemoryLookupRepository) DeleteType(ctx context.Context, id int) error

func (*MemoryLookupRepository) ExportConfiguration

func (r *MemoryLookupRepository) ExportConfiguration(ctx context.Context) (*LookupConfiguration, error)

Export/Import operations.

func (*MemoryLookupRepository) GetAuditLogs

func (r *MemoryLookupRepository) GetAuditLogs(ctx context.Context, entityType string, entityID int, limit int) ([]LookupAuditLog, error)

func (*MemoryLookupRepository) GetPriorities

func (r *MemoryLookupRepository) GetPriorities(ctx context.Context) ([]models.LookupItem, error)

Priority operations.

func (*MemoryLookupRepository) GetPriorityByID

func (r *MemoryLookupRepository) GetPriorityByID(ctx context.Context, id int) (*models.LookupItem, error)

func (*MemoryLookupRepository) GetQueueByID

func (r *MemoryLookupRepository) GetQueueByID(ctx context.Context, id int) (*models.QueueInfo, error)

func (*MemoryLookupRepository) GetQueues

Queue operations.

func (*MemoryLookupRepository) GetStatusByID

func (r *MemoryLookupRepository) GetStatusByID(ctx context.Context, id int) (*models.LookupItem, error)

func (*MemoryLookupRepository) GetStatuses

func (r *MemoryLookupRepository) GetStatuses(ctx context.Context) ([]models.LookupItem, error)

Status operations.

func (*MemoryLookupRepository) GetTypeByID

func (r *MemoryLookupRepository) GetTypeByID(ctx context.Context, id int) (*models.LookupItem, error)

func (*MemoryLookupRepository) GetTypes

Type operations.

func (*MemoryLookupRepository) ImportConfiguration

func (r *MemoryLookupRepository) ImportConfiguration(ctx context.Context, config *LookupConfiguration) error

func (*MemoryLookupRepository) LogChange

func (r *MemoryLookupRepository) LogChange(ctx context.Context, change *LookupAuditLog) error

Audit operations.

func (*MemoryLookupRepository) UpdatePriority

func (r *MemoryLookupRepository) UpdatePriority(ctx context.Context, priority *models.LookupItem) error

func (*MemoryLookupRepository) UpdateQueue

func (r *MemoryLookupRepository) UpdateQueue(ctx context.Context, queue *models.QueueInfo) error

func (*MemoryLookupRepository) UpdateStatus

func (r *MemoryLookupRepository) UpdateStatus(ctx context.Context, status *models.LookupItem) error

func (*MemoryLookupRepository) UpdateType

func (r *MemoryLookupRepository) UpdateType(ctx context.Context, typ *models.LookupItem) error

type MemorySLARepository

type MemorySLARepository struct {
	// contains filtered or unexported fields
}

MemorySLARepository is an in-memory implementation of SLARepository.

func NewMemorySLARepository

func NewMemorySLARepository() *MemorySLARepository

NewMemorySLARepository creates a new in-memory SLA repository.

func (*MemorySLARepository) AddHoliday

func (r *MemorySLARepository) AddHoliday(ctx context.Context, holiday *models.SLAHoliday) error

AddHoliday adds a holiday to a calendar.

func (*MemorySLARepository) CreateBusinessCalendar

func (r *MemorySLARepository) CreateBusinessCalendar(ctx context.Context, calendar *models.BusinessCalendar) error

CreateBusinessCalendar creates a new business calendar.

func (*MemorySLARepository) CreateSLA

func (r *MemorySLARepository) CreateSLA(ctx context.Context, sla *models.SLA) error

CreateSLA creates a new SLA.

func (*MemorySLARepository) CreateTicketSLA

func (r *MemorySLARepository) CreateTicketSLA(ctx context.Context, ticketSLA *models.TicketSLA) error

CreateTicketSLA creates a new ticket SLA tracking record.

func (*MemorySLARepository) DeleteSLA

func (r *MemorySLARepository) DeleteSLA(ctx context.Context, id uint) error

DeleteSLA deletes an SLA.

func (*MemorySLARepository) FindApplicableSLA

func (r *MemorySLARepository) FindApplicableSLA(ctx context.Context, queueID uint, priority int, ticketType string, tags []string) (*models.SLA, error)

FindApplicableSLA finds the best matching SLA for given conditions.

func (*MemorySLARepository) GetAllSLAs

func (r *MemorySLARepository) GetAllSLAs(ctx context.Context, activeOnly bool) ([]models.SLA, error)

GetAllSLAs retrieves all SLAs.

func (*MemorySLARepository) GetBusinessCalendar

func (r *MemorySLARepository) GetBusinessCalendar(ctx context.Context, id uint) (*models.BusinessCalendar, error)

GetBusinessCalendar retrieves a business calendar.

func (*MemorySLARepository) GetEscalationHistory

func (r *MemorySLARepository) GetEscalationHistory(ctx context.Context, ticketSLAID uint) ([]models.SLAEscalationHistory, error)

GetEscalationHistory gets escalation history for a ticket SLA.

func (*MemorySLARepository) GetHolidays

func (r *MemorySLARepository) GetHolidays(ctx context.Context, calendarID uint) ([]models.SLAHoliday, error)

GetHolidays gets holidays for a calendar.

func (*MemorySLARepository) GetSLA

func (r *MemorySLARepository) GetSLA(ctx context.Context, id uint) (*models.SLA, error)

GetSLA retrieves an SLA by ID.

func (*MemorySLARepository) GetSLAMetrics

func (r *MemorySLARepository) GetSLAMetrics(ctx context.Context, slaID uint, from, to time.Time) (*models.SLAMetrics, error)

GetSLAMetrics calculates SLA metrics for a specific SLA.

func (*MemorySLARepository) GetSLAReport

func (r *MemorySLARepository) GetSLAReport(ctx context.Context, from, to time.Time) (*models.SLAReport, error)

GetSLAReport generates an SLA report.

func (*MemorySLARepository) GetTicketSLA

func (r *MemorySLARepository) GetTicketSLA(ctx context.Context, ticketID uint) (*models.TicketSLA, error)

GetTicketSLA retrieves ticket SLA by ticket ID.

func (*MemorySLARepository) PauseSLA

func (r *MemorySLARepository) PauseSLA(ctx context.Context, pauseReason *models.SLAPauseReason) error

PauseSLA pauses SLA tracking.

func (*MemorySLARepository) RecordEscalation

func (r *MemorySLARepository) RecordEscalation(ctx context.Context, escalation *models.SLAEscalationHistory) error

RecordEscalation records an escalation event.

func (*MemorySLARepository) ResumeSLA

func (r *MemorySLARepository) ResumeSLA(ctx context.Context, ticketSLAID uint) error

ResumeSLA resumes SLA tracking.

func (*MemorySLARepository) UpdateBusinessCalendar

func (r *MemorySLARepository) UpdateBusinessCalendar(ctx context.Context, calendar *models.BusinessCalendar) error

UpdateBusinessCalendar updates a business calendar.

func (*MemorySLARepository) UpdateSLA

func (r *MemorySLARepository) UpdateSLA(ctx context.Context, sla *models.SLA) error

UpdateSLA updates an existing SLA.

func (*MemorySLARepository) UpdateTicketSLA

func (r *MemorySLARepository) UpdateTicketSLA(ctx context.Context, ticketSLA *models.TicketSLA) error

UpdateTicketSLA updates a ticket SLA record.

type MemorySessionRepository

type MemorySessionRepository struct {
	// contains filtered or unexported fields
}

MemorySessionRepository is an in-memory implementation of session storage for testing.

func NewMemorySessionRepository

func NewMemorySessionRepository() *MemorySessionRepository

NewMemorySessionRepository creates a new in-memory session repository.

func (*MemorySessionRepository) Create

func (r *MemorySessionRepository) Create(session *models.Session) error

Create stores a new session.

func (*MemorySessionRepository) Delete

func (r *MemorySessionRepository) Delete(sessionID string) error

Delete removes a session by its ID.

func (*MemorySessionRepository) DeleteByMaxAge

func (r *MemorySessionRepository) DeleteByMaxAge(maxAge time.Duration) (int, error)

DeleteByMaxAge removes all sessions created more than maxAge ago. This enforces the maximum session lifetime regardless of activity.

func (*MemorySessionRepository) DeleteByUserID

func (r *MemorySessionRepository) DeleteByUserID(userID int) (int, error)

DeleteByUserID removes all sessions for a specific user.

func (*MemorySessionRepository) DeleteExpired

func (r *MemorySessionRepository) DeleteExpired(maxAge time.Duration) (int, error)

DeleteExpired removes all sessions older than the specified duration.

func (*MemorySessionRepository) GetByID

func (r *MemorySessionRepository) GetByID(sessionID string) (*models.Session, error)

GetByID retrieves a session by its ID.

func (*MemorySessionRepository) GetByUserID

func (r *MemorySessionRepository) GetByUserID(userID int) ([]*models.Session, error)

GetByUserID retrieves all sessions for a specific user.

func (*MemorySessionRepository) List

func (r *MemorySessionRepository) List() ([]*models.Session, error)

List retrieves all sessions.

func (*MemorySessionRepository) UpdateLastRequest

func (r *MemorySessionRepository) UpdateLastRequest(sessionID string) error

UpdateLastRequest updates the last request time for a session.

type MemoryTicketMergeRepository

type MemoryTicketMergeRepository struct {
	// contains filtered or unexported fields
}

MemoryTicketMergeRepository is an in-memory implementation of TicketMergeRepository.

func NewMemoryTicketMergeRepository

func NewMemoryTicketMergeRepository() *MemoryTicketMergeRepository

NewMemoryTicketMergeRepository creates a new in-memory ticket merge repository.

func (*MemoryTicketMergeRepository) CreateMerge

func (r *MemoryTicketMergeRepository) CreateMerge(ctx context.Context, merge *models.TicketMerge) error

CreateMerge creates a new merge record.

func (*MemoryTicketMergeRepository) CreateTicketRelation

func (r *MemoryTicketMergeRepository) CreateTicketRelation(ctx context.Context, relation *models.TicketRelation) error

CreateTicketRelation creates a new ticket relation.

func (*MemoryTicketMergeRepository) DeleteTicketRelation

func (r *MemoryTicketMergeRepository) DeleteTicketRelation(ctx context.Context, relationID uint) error

DeleteTicketRelation deletes a ticket relation.

func (*MemoryTicketMergeRepository) GetAllChildren

func (r *MemoryTicketMergeRepository) GetAllChildren(ctx context.Context, parentID uint) ([]uint, error)

GetAllChildren retrieves all child ticket IDs for a parent.

func (*MemoryTicketMergeRepository) GetMerge

GetMerge retrieves a merge by ID.

func (*MemoryTicketMergeRepository) GetMergeByChild

func (r *MemoryTicketMergeRepository) GetMergeByChild(ctx context.Context, childID uint) (*models.TicketMerge, error)

GetMergeByChild retrieves the merge record for a child ticket.

func (*MemoryTicketMergeRepository) GetMergeHistory

func (r *MemoryTicketMergeRepository) GetMergeHistory(ctx context.Context, ticketID uint) ([]models.TicketMerge, error)

GetMergeHistory retrieves all merge history for a ticket.

func (*MemoryTicketMergeRepository) GetMergeStatistics

func (r *MemoryTicketMergeRepository) GetMergeStatistics(ctx context.Context, from, to time.Time) (*models.MergeStatistics, error)

GetMergeStatistics generates merge statistics.

func (*MemoryTicketMergeRepository) GetMergesByParent

func (r *MemoryTicketMergeRepository) GetMergesByParent(ctx context.Context, parentID uint) ([]models.TicketMerge, error)

GetMergesByParent retrieves all active merges for a parent ticket.

func (*MemoryTicketMergeRepository) GetTicketRelations

func (r *MemoryTicketMergeRepository) GetTicketRelations(ctx context.Context, ticketID uint) ([]models.TicketRelation, error)

GetTicketRelations retrieves all relations for a ticket.

func (*MemoryTicketMergeRepository) IsMerged

func (r *MemoryTicketMergeRepository) IsMerged(ctx context.Context, ticketID uint) (bool, error)

IsMerged checks if a ticket is currently merged.

func (*MemoryTicketMergeRepository) UnmergeTicket

func (r *MemoryTicketMergeRepository) UnmergeTicket(ctx context.Context, mergeID uint, unmergedBy uint) error

UnmergeTicket marks a merge as inactive.

type MemoryTicketRepository

type MemoryTicketRepository struct {
	// contains filtered or unexported fields
}

MemoryTicketRepository implements TicketRepository with in-memory storage This is for development/testing. Production should use PostgreSQL implementation.

func NewMemoryTicketRepository

func NewMemoryTicketRepository() *MemoryTicketRepository

NewMemoryTicketRepository creates a new in-memory ticket repository.

func (*MemoryTicketRepository) Count

func (r *MemoryTicketRepository) Count() (int, error)

Count returns the total number of tickets.

func (*MemoryTicketRepository) CountByStatus

func (r *MemoryTicketRepository) CountByStatus(status string) (int, error)

CountByStatus returns the count of tickets by status.

func (*MemoryTicketRepository) Create

func (r *MemoryTicketRepository) Create(ticket *models.Ticket) error

Create saves a new ticket to memory.

func (*MemoryTicketRepository) Delete

func (r *MemoryTicketRepository) Delete(id uint) error

Delete removes a ticket from memory.

func (*MemoryTicketRepository) GetByID

func (r *MemoryTicketRepository) GetByID(id uint) (*models.Ticket, error)

GetByID retrieves a ticket by its ID.

func (*MemoryTicketRepository) GetByTicketNumber

func (r *MemoryTicketRepository) GetByTicketNumber(ticketNumber string) (*models.Ticket, error)

GetByTicketNumber retrieves a ticket by its ticket number.

func (*MemoryTicketRepository) List

List returns a paginated list of tickets.

func (*MemoryTicketRepository) Update

func (r *MemoryTicketRepository) Update(ticket *models.Ticket) error

Update modifies an existing ticket.

type MemoryTicketTemplateRepository

type MemoryTicketTemplateRepository struct {
	// contains filtered or unexported fields
}

MemoryTicketTemplateRepository is an in-memory implementation of TicketTemplateRepository.

func NewMemoryTicketTemplateRepository

func NewMemoryTicketTemplateRepository() *MemoryTicketTemplateRepository

NewMemoryTicketTemplateRepository creates a new in-memory ticket template repository.

func (*MemoryTicketTemplateRepository) CreateTemplate

func (r *MemoryTicketTemplateRepository) CreateTemplate(ctx context.Context, template *models.TicketTemplate) error

CreateTemplate creates a new template.

func (*MemoryTicketTemplateRepository) DeleteTemplate

func (r *MemoryTicketTemplateRepository) DeleteTemplate(ctx context.Context, id uint) error

DeleteTemplate deletes a template.

func (*MemoryTicketTemplateRepository) GetActiveTemplates

func (r *MemoryTicketTemplateRepository) GetActiveTemplates(ctx context.Context) ([]models.TicketTemplate, error)

GetActiveTemplates retrieves all active templates.

func (*MemoryTicketTemplateRepository) GetCategories

GetCategories retrieves all unique categories.

func (*MemoryTicketTemplateRepository) GetTemplateByID

GetTemplateByID retrieves a template by ID.

func (*MemoryTicketTemplateRepository) GetTemplatesByCategory

func (r *MemoryTicketTemplateRepository) GetTemplatesByCategory(ctx context.Context, category string) ([]models.TicketTemplate, error)

GetTemplatesByCategory retrieves templates by category.

func (*MemoryTicketTemplateRepository) IncrementUsageCount

func (r *MemoryTicketTemplateRepository) IncrementUsageCount(ctx context.Context, templateID uint) error

IncrementUsageCount increments the usage count of a template.

func (*MemoryTicketTemplateRepository) SearchTemplates

func (r *MemoryTicketTemplateRepository) SearchTemplates(ctx context.Context, query string) ([]models.TicketTemplate, error)

SearchTemplates searches templates by query string.

func (*MemoryTicketTemplateRepository) UpdateTemplate

func (r *MemoryTicketTemplateRepository) UpdateTemplate(ctx context.Context, template *models.TicketTemplate) error

UpdateTemplate updates an existing template.

type PermissionKey

type PermissionKey string

PermissionKey represents the OTRS permission types.

const (
	PermissionRO       PermissionKey = "ro"        // Read Only
	PermissionMoveInto PermissionKey = "move_into" // Move tickets into queue
	PermissionCreate   PermissionKey = "create"    // Create tickets in queue
	PermissionNote     PermissionKey = "note"      // Add notes to tickets
	PermissionOwner    PermissionKey = "owner"     // Become ticket owner
	PermissionPriority PermissionKey = "priority"  // Change ticket priority
	PermissionRW       PermissionKey = "rw"        // Read/Write (full access)
)

type PermissionRepository

type PermissionRepository struct {
	// contains filtered or unexported fields
}

PermissionRepository handles database operations for permissions.

func NewPermissionRepository

func NewPermissionRepository(db *sql.DB) *PermissionRepository

NewPermissionRepository creates a new permission repository.

func (*PermissionRepository) GetAllUserGroupPermissions

func (r *PermissionRepository) GetAllUserGroupPermissions() ([]UserGroupPermission, error)

GetAllUserGroupPermissions gets complete permission matrix for all users and groups.

func (*PermissionRepository) GetGroupPermissions

func (r *PermissionRepository) GetGroupPermissions(groupID uint) (map[uint][]string, error)

GetGroupPermissions retrieves all users and their permissions for a group.

func (*PermissionRepository) GetUserGroupMatrix

func (r *PermissionRepository) GetUserGroupMatrix(userID, groupID uint) (map[string]bool, error)

GetUserGroupMatrix gets all permissions for a specific user-group combination.

func (*PermissionRepository) GetUserPermissions

func (r *PermissionRepository) GetUserPermissions(userID uint) (map[uint][]string, error)

GetUserPermissions retrieves all permissions for a user.

func (*PermissionRepository) RemoveUserGroupPermission

func (r *PermissionRepository) RemoveUserGroupPermission(userID, groupID uint, permKey string) error

RemoveUserGroupPermission removes a specific permission.

func (*PermissionRepository) SetUserGroupMatrix

func (r *PermissionRepository) SetUserGroupMatrix(userID, groupID uint, permissions map[string]bool) error

SetUserGroupMatrix sets all permissions for a user-group combination.

func (*PermissionRepository) SetUserGroupPermission

func (r *PermissionRepository) SetUserGroupPermission(userID, groupID uint, permKey string, value int) error

SetUserGroupPermission sets or updates a permission.

type PostmasterFilter

type PostmasterFilter struct {
	Name    string
	Stop    bool
	Matches []FilterMatch // f_type='Match' rows
	Sets    []FilterSet   // f_type='Set' rows
}

PostmasterFilter represents a grouped postmaster filter with its match and set rules.

type PostmasterFilterRepository

type PostmasterFilterRepository struct {
	// contains filtered or unexported fields
}

PostmasterFilterRepository handles database operations for postmaster filters.

func NewPostmasterFilterRepository

func NewPostmasterFilterRepository(db *sql.DB) *PostmasterFilterRepository

NewPostmasterFilterRepository creates a new repository instance.

func (*PostmasterFilterRepository) Create

Create creates a new postmaster filter with its match and set rules.

func (*PostmasterFilterRepository) Delete

func (r *PostmasterFilterRepository) Delete(ctx context.Context, name string) error

Delete removes a postmaster filter and all its rules.

func (*PostmasterFilterRepository) Get

Get returns a single postmaster filter by name.

func (*PostmasterFilterRepository) List

List returns all postmaster filters grouped by name.

func (*PostmasterFilterRepository) Update

Update updates an existing postmaster filter by replacing all its rules.

type PriorityRepository

type PriorityRepository struct {
	// contains filtered or unexported fields
}

PriorityRepository handles database operations for ticket priorities.

func NewPriorityRepository

func NewPriorityRepository(db *sql.DB) *PriorityRepository

NewPriorityRepository creates a new priority repository.

func (*PriorityRepository) GetByID

func (r *PriorityRepository) GetByID(id uint) (*models.TicketPriority, error)

GetByID retrieves a priority by ID.

func (*PriorityRepository) GetByName

func (r *PriorityRepository) GetByName(name string) (*models.TicketPriority, error)

GetByName retrieves a priority by name.

func (*PriorityRepository) List

List retrieves all active priorities.

type QueueRepository

type QueueRepository struct {
	// contains filtered or unexported fields
}

QueueRepository handles database operations for queues.

func NewQueueRepository

func NewQueueRepository(db *sql.DB) *QueueRepository

NewQueueRepository creates a new queue repository.

func (*QueueRepository) Create

func (r *QueueRepository) Create(queue *models.Queue) error

Create creates a new queue.

func (*QueueRepository) GetByID

func (r *QueueRepository) GetByID(id uint) (*models.Queue, error)

GetByID retrieves a queue by ID.

func (*QueueRepository) GetByName

func (r *QueueRepository) GetByName(name string) (*models.Queue, error)

GetByName retrieves a queue by name.

func (*QueueRepository) List

func (r *QueueRepository) List() ([]*models.Queue, error)

List retrieves all active queues.

func (*QueueRepository) Update

func (r *QueueRepository) Update(queue *models.Queue) error

Update updates a queue.

type RoleRepository

type RoleRepository interface {
	CreateRole(ctx context.Context, role *models.Role) error
	GetRole(ctx context.Context, id string) (*models.Role, error)
	GetRoleByName(ctx context.Context, name string) (*models.Role, error)
	GetByName(ctx context.Context, name string) (*models.Role, error)
	UpdateRole(ctx context.Context, role *models.Role) error
	DeleteRole(ctx context.Context, id string) error
	ListRoles(ctx context.Context) ([]models.Role, error)
}

RoleRepository defines the interface for role operations.

type SLARepository

type SLARepository interface {
	// SLA management
	CreateSLA(ctx context.Context, sla *models.SLA) error
	GetSLA(ctx context.Context, id uint) (*models.SLA, error)
	GetAllSLAs(ctx context.Context, activeOnly bool) ([]models.SLA, error)
	UpdateSLA(ctx context.Context, sla *models.SLA) error
	DeleteSLA(ctx context.Context, id uint) error
	FindApplicableSLA(ctx context.Context, queueID uint, priority int, ticketType string, tags []string) (*models.SLA, error)

	// Ticket SLA tracking
	CreateTicketSLA(ctx context.Context, ticketSLA *models.TicketSLA) error
	GetTicketSLA(ctx context.Context, ticketID uint) (*models.TicketSLA, error)
	UpdateTicketSLA(ctx context.Context, ticketSLA *models.TicketSLA) error
	GetSLAMetrics(ctx context.Context, slaID uint, from, to time.Time) (*models.SLAMetrics, error)

	// Business calendar
	CreateBusinessCalendar(ctx context.Context, calendar *models.BusinessCalendar) error
	GetBusinessCalendar(ctx context.Context, id uint) (*models.BusinessCalendar, error)
	UpdateBusinessCalendar(ctx context.Context, calendar *models.BusinessCalendar) error
	AddHoliday(ctx context.Context, holiday *models.SLAHoliday) error
	GetHolidays(ctx context.Context, calendarID uint) ([]models.SLAHoliday, error)

	// Escalation tracking
	RecordEscalation(ctx context.Context, escalation *models.SLAEscalationHistory) error
	GetEscalationHistory(ctx context.Context, ticketSLAID uint) ([]models.SLAEscalationHistory, error)

	// SLA pause/resume
	PauseSLA(ctx context.Context, pauseReason *models.SLAPauseReason) error
	ResumeSLA(ctx context.Context, ticketSLAID uint) error

	// Reporting
	GetSLAReport(ctx context.Context, from, to time.Time) (*models.SLAReport, error)
}

SLARepository defines the interface for SLA operations.

type SessionRepository

type SessionRepository interface {
	Create(session *models.Session) error
	GetByID(sessionID string) (*models.Session, error)
	GetByUserID(userID int) ([]*models.Session, error)
	List() ([]*models.Session, error)
	UpdateLastRequest(sessionID string) error
	Delete(sessionID string) error
	DeleteByUserID(userID int) (int, error)
	DeleteExpired(maxAge time.Duration) (int, error)
	DeleteByMaxAge(maxAge time.Duration) (int, error)
}

SessionRepository defines the interface for session operations.

type SessionSQLRepository

type SessionSQLRepository struct {
	// contains filtered or unexported fields
}

SessionSQLRepository handles database operations for the OTRS sessions table. The sessions table uses a key-value store format with columns: session_id, data_key, data_value, serialized

func NewSessionRepository

func NewSessionRepository(db *sql.DB) *SessionSQLRepository

NewSessionRepository creates a new session repository.

func (*SessionSQLRepository) Create

func (r *SessionSQLRepository) Create(session *models.Session) error

Create stores a new session in the key-value sessions table.

func (*SessionSQLRepository) Delete

func (r *SessionSQLRepository) Delete(sessionID string) error

Delete removes a session by its ID.

func (*SessionSQLRepository) DeleteByMaxAge

func (r *SessionSQLRepository) DeleteByMaxAge(maxAge time.Duration) (int, error)

DeleteByMaxAge removes all sessions created more than maxAge ago. This enforces the maximum session lifetime regardless of activity.

func (*SessionSQLRepository) DeleteByUserID

func (r *SessionSQLRepository) DeleteByUserID(userID int) (int, error)

DeleteByUserID removes all sessions for a specific user.

func (*SessionSQLRepository) DeleteExpired

func (r *SessionSQLRepository) DeleteExpired(maxAge time.Duration) (int, error)

DeleteExpired removes all sessions older than the specified duration.

func (*SessionSQLRepository) GetByID

func (r *SessionSQLRepository) GetByID(sessionID string) (*models.Session, error)

GetByID retrieves a session by its ID.

func (*SessionSQLRepository) GetByUserID

func (r *SessionSQLRepository) GetByUserID(userID int) ([]*models.Session, error)

GetByUserID retrieves all sessions for a specific user.

func (*SessionSQLRepository) List

func (r *SessionSQLRepository) List() ([]*models.Session, error)

List retrieves all sessions.

func (*SessionSQLRepository) UpdateLastRequest

func (r *SessionSQLRepository) UpdateLastRequest(sessionID string) error

UpdateLastRequest updates the last request time for a session.

type SystemMaintenanceRepository

type SystemMaintenanceRepository struct {
	// contains filtered or unexported fields
}

SystemMaintenanceRepository handles database operations for system maintenance records.

func NewSystemMaintenanceRepository

func NewSystemMaintenanceRepository(db *sql.DB) *SystemMaintenanceRepository

NewSystemMaintenanceRepository creates a new system maintenance repository.

func (*SystemMaintenanceRepository) Create

Create inserts a new system maintenance record.

func (*SystemMaintenanceRepository) Delete

func (r *SystemMaintenanceRepository) Delete(id int) error

Delete removes a system maintenance record by ID.

func (*SystemMaintenanceRepository) GetByID

GetByID retrieves a system maintenance record by ID.

func (*SystemMaintenanceRepository) IsActive

IsActive returns the currently active maintenance record, or nil if none. A maintenance is active if current time is between start_date and stop_date and valid_id = 1.

func (*SystemMaintenanceRepository) IsComing

func (r *SystemMaintenanceRepository) IsComing(withinMinutes int) (*models.SystemMaintenance, error)

IsComing returns an upcoming maintenance record within the specified minutes, or nil if none. An upcoming maintenance is one that starts within the next X minutes and is valid.

func (*SystemMaintenanceRepository) List

List retrieves all system maintenance records.

func (*SystemMaintenanceRepository) ListValid

ListValid retrieves all valid (active) system maintenance records.

func (*SystemMaintenanceRepository) Update

Update updates an existing system maintenance record.

type TicketMergeRepository

type TicketMergeRepository interface {
	CreateMerge(ctx context.Context, merge *models.TicketMerge) error
	GetMerge(ctx context.Context, id uint) (*models.TicketMerge, error)
	GetMergesByParent(ctx context.Context, parentID uint) ([]models.TicketMerge, error)
	GetMergeByChild(ctx context.Context, childID uint) (*models.TicketMerge, error)
	UnmergeTicket(ctx context.Context, mergeID uint, unmergedBy uint) error
	GetMergeHistory(ctx context.Context, ticketID uint) ([]models.TicketMerge, error)
	IsMerged(ctx context.Context, ticketID uint) (bool, error)
	GetAllChildren(ctx context.Context, parentID uint) ([]uint, error)
	GetMergeStatistics(ctx context.Context, from, to time.Time) (*models.MergeStatistics, error)

	// Ticket relations
	CreateTicketRelation(ctx context.Context, relation *models.TicketRelation) error
	GetTicketRelations(ctx context.Context, ticketID uint) ([]models.TicketRelation, error)
	DeleteTicketRelation(ctx context.Context, relationID uint) error
}

TicketMergeRepository defines the interface for ticket merge operations.

type TicketPriorityRepository

type TicketPriorityRepository struct {
	// contains filtered or unexported fields
}

TicketPriorityRepository handles database operations for ticket priorities.

func NewTicketPriorityRepository

func NewTicketPriorityRepository(db *sql.DB) *TicketPriorityRepository

NewTicketPriorityRepository creates a new ticket priority repository.

func (*TicketPriorityRepository) Create

func (r *TicketPriorityRepository) Create(priority *models.TicketPriority) error

Create creates a new ticket priority.

func (*TicketPriorityRepository) GetByID

GetByID retrieves a ticket priority by ID.

func (*TicketPriorityRepository) GetByName

GetByName retrieves a ticket priority by name.

func (*TicketPriorityRepository) GetDefault

GetDefault returns the default priority (usually "normal" with ID 3).

func (*TicketPriorityRepository) GetHighPriorities

func (r *TicketPriorityRepository) GetHighPriorities() ([]*models.TicketPriority, error)

GetHighPriorities returns all priorities considered "high" (4=high, 5=very high).

func (*TicketPriorityRepository) List

List retrieves all active ticket priorities.

func (*TicketPriorityRepository) Update

func (r *TicketPriorityRepository) Update(priority *models.TicketPriority) error

Update updates a ticket priority.

type TicketRepository

type TicketRepository struct {
	// contains filtered or unexported fields
}

TicketRepository handles database operations for tickets.

func NewTicketRepository

func NewTicketRepository(db *sql.DB) *TicketRepository

NewTicketRepository creates a new ticket repository.

func (*TicketRepository) AddTicketHistoryEntry

func (r *TicketRepository) AddTicketHistoryEntry(ctx context.Context, exec interface{}, entry models.TicketHistoryInsert) error

AddTicketHistoryEntry persists a ticket_history row for the provided ticket snapshot. The exec parameter accepts interface{} to satisfy the history.HistoryInserter interface, but must be either nil or implement ExecContext.

func (*TicketRepository) ArchiveTicket

func (r *TicketRepository) ArchiveTicket(ticketID uint, userID uint) error

ArchiveTicket archives a ticket.

func (*TicketRepository) AutoClosePendingTickets

func (r *TicketRepository) AutoClosePendingTickets(
	ctx context.Context,
	now time.Time,
	transitions map[string]string,
	systemUserID int,
) (*AutoCloseResult, error)

AutoClosePendingTickets moves tickets out of pending auto-close states when deadlines expire. This includes tickets with no pending date set (legacy/migrated data) - these are treated as due immediately to ensure they get processed.

func (*TicketRepository) Count

func (r *TicketRepository) Count() (int, error)

Count returns the total number of tickets.

func (*TicketRepository) CountByStateID

func (r *TicketRepository) CountByStateID(stateID int) (int, error)

CountByStateID returns the number of tickets with a specific state ID.

func (*TicketRepository) CountByStatus

func (r *TicketRepository) CountByStatus(status string) (int, error)

CountByStatus returns the number of tickets with a specific status.

func (*TicketRepository) CountClosedToday

func (r *TicketRepository) CountClosedToday() (int, error)

CountClosedToday returns the number of tickets closed today.

func (*TicketRepository) Create

func (r *TicketRepository) Create(ticket *models.Ticket) error

Create creates a new ticket in the database.

func (*TicketRepository) Delete

func (r *TicketRepository) Delete(id uint) error

Delete deletes a ticket from the database.

func (*TicketRepository) FindDuePendingReminders

func (r *TicketRepository) FindDuePendingReminders(ctx context.Context, now time.Time, limit int) ([]*models.PendingReminder, error)

FindDuePendingReminders returns tickets in pending reminder states whose deadline has passed. This includes tickets with no pending date set (legacy/migrated data) - these are treated as due immediately to ensure they get processed.

func (*TicketRepository) GetByID

func (r *TicketRepository) GetByID(id uint) (*models.Ticket, error)

GetByID retrieves a ticket by its ID.

func (*TicketRepository) GetByTN

func (r *TicketRepository) GetByTN(tn string) (*models.Ticket, error)

GetByTN retrieves a ticket by its ticket number.

func (*TicketRepository) GetByTicketNumber

func (r *TicketRepository) GetByTicketNumber(ticketNumber string) (*models.Ticket, error)

GetByTicketNumber retrieves a ticket by its ticket number.

func (*TicketRepository) GetDB

func (r *TicketRepository) GetDB() *sql.DB

GetDB returns the database connection.

func (*TicketRepository) GetQueues

func (r *TicketRepository) GetQueues() ([]models.Queue, error)

GetQueues retrieves all active queues.

func (*TicketRepository) GetTicketHistoryEntries

func (r *TicketRepository) GetTicketHistoryEntries(ticketID uint, limit int) ([]models.TicketHistoryEntry, error)

GetTicketHistoryEntries returns recent history entries for a ticket.

func (r *TicketRepository) GetTicketLinks(ticketID uint, limit int) ([]models.TicketLink, error)

GetTicketLinks returns linked tickets for a ticket.

func (*TicketRepository) GetTicketPriorities

func (r *TicketRepository) GetTicketPriorities() ([]models.TicketPriority, error)

GetTicketPriorities retrieves all active ticket priorities.

func (*TicketRepository) GetTicketStateByID

func (r *TicketRepository) GetTicketStateByID(stateID int) (*models.TicketState, error)

GetTicketStateByID returns the ticket state row for a given ID if it exists.

func (*TicketRepository) GetTicketStates

func (r *TicketRepository) GetTicketStates() ([]models.TicketState, error)

GetTicketStates retrieves all active ticket states.

func (*TicketRepository) GetTicketWithRelations

func (r *TicketRepository) GetTicketWithRelations(id uint) (*models.Ticket, error)

GetTicketWithRelations retrieves a ticket with all related data.

func (*TicketRepository) GetTicketsByCustomer

func (r *TicketRepository) GetTicketsByCustomer(customerID uint, includeArchived bool) ([]models.Ticket, error)

GetTicketsByCustomer retrieves all tickets for a specific customer.

func (*TicketRepository) GetTicketsByOwner

func (r *TicketRepository) GetTicketsByOwner(ownerID uint, includeArchived bool) ([]models.Ticket, error)

GetTicketsByOwner retrieves all tickets assigned to a specific user.

func (*TicketRepository) List

List retrieves a paginated list of tickets with filters.

func (*TicketRepository) LockTicket

func (r *TicketRepository) LockTicket(ticketID uint, userID uint, lockType int) error

LockTicket locks a ticket for a specific user.

func (*TicketRepository) QueueExists

func (r *TicketRepository) QueueExists(queueID int) (bool, error)

QueueExists checks whether a queue with the given ID exists.

func (*TicketRepository) RestoreTicket

func (r *TicketRepository) RestoreTicket(ticketID uint, userID uint) error

RestoreTicket restores an archived ticket.

func (*TicketRepository) UnlockTicket

func (r *TicketRepository) UnlockTicket(ticketID uint, userID uint) error

UnlockTicket unlocks a ticket.

func (*TicketRepository) Update

func (r *TicketRepository) Update(ticket *models.Ticket) error

Update updates a ticket in the database.

func (*TicketRepository) UpdatePriority

func (r *TicketRepository) UpdatePriority(ticketID uint, priorityID uint, userID uint) error

UpdatePriority updates the priority of a ticket.

func (*TicketRepository) UpdateQueue

func (r *TicketRepository) UpdateQueue(ticketID uint, queueID uint, userID uint) error

UpdateQueue transfers a ticket to a different queue.

func (*TicketRepository) UpdateStatus

func (r *TicketRepository) UpdateStatus(ticketID uint, stateID uint, userID uint) error

UpdateStatus updates the status of a ticket.

type TicketStateRepository

type TicketStateRepository struct {
	// contains filtered or unexported fields
}

TicketStateRepository handles database operations for ticket states.

func NewTicketStateRepository

func NewTicketStateRepository(db *sql.DB) *TicketStateRepository

NewTicketStateRepository creates a new ticket state repository.

func (*TicketStateRepository) Create

func (r *TicketStateRepository) Create(state *models.TicketState) error

Create creates a new ticket state.

func (*TicketStateRepository) GetByID

func (r *TicketStateRepository) GetByID(id uint) (*models.TicketState, error)

GetByID retrieves a ticket state by ID.

func (*TicketStateRepository) GetByName

func (r *TicketStateRepository) GetByName(name string) (*models.TicketState, error)

GetByName retrieves a ticket state by name.

func (*TicketStateRepository) GetByTypeID

func (r *TicketStateRepository) GetByTypeID(typeID uint) ([]*models.TicketState, error)

GetByTypeID retrieves all ticket states for a specific type.

func (*TicketStateRepository) GetClosedStates

func (r *TicketStateRepository) GetClosedStates() ([]*models.TicketState, error)

GetClosedStates returns all ticket states that are considered "closed".

func (*TicketStateRepository) GetOpenStates

func (r *TicketStateRepository) GetOpenStates() ([]*models.TicketState, error)

GetOpenStates returns all ticket states that are considered "open".

func (*TicketStateRepository) List

List retrieves all active ticket states.

func (*TicketStateRepository) Update

func (r *TicketStateRepository) Update(state *models.TicketState) error

Update updates a ticket state.

type TicketTemplateRepository

type TicketTemplateRepository interface {
	// Template CRUD operations
	CreateTemplate(ctx context.Context, template *models.TicketTemplate) error
	GetTemplateByID(ctx context.Context, id uint) (*models.TicketTemplate, error)
	GetActiveTemplates(ctx context.Context) ([]models.TicketTemplate, error)
	GetTemplatesByCategory(ctx context.Context, category string) ([]models.TicketTemplate, error)
	UpdateTemplate(ctx context.Context, template *models.TicketTemplate) error
	DeleteTemplate(ctx context.Context, id uint) error

	// Usage tracking
	IncrementUsageCount(ctx context.Context, templateID uint) error

	// Search and filtering
	SearchTemplates(ctx context.Context, query string) ([]models.TicketTemplate, error)

	// Categories
	GetCategories(ctx context.Context) ([]models.TemplateCategory, error)
}

TicketTemplateRepository defines the interface for ticket template persistence.

type TimeAccountingRepository

type TimeAccountingRepository struct {
	// contains filtered or unexported fields
}

func NewTimeAccountingRepository

func NewTimeAccountingRepository(db *sql.DB) *TimeAccountingRepository

func (*TimeAccountingRepository) Create

Create inserts a time accounting row and returns its id.

func (*TimeAccountingRepository) ListByTicket

func (r *TimeAccountingRepository) ListByTicket(ticketID int) ([]models.TimeAccounting, error)

ListByTicket fetches time accounting entries for a ticket ordered by create_time.

type UserGroupPermission

type UserGroupPermission struct {
	UserID          uint
	GroupID         uint
	PermissionKey   string
	PermissionValue int
}

UserGroupPermission represents a permission entry.

type UserRepository

type UserRepository struct {
	// contains filtered or unexported fields
}

UserRepository handles database operations for users.

func NewUserRepository

func NewUserRepository(db *sql.DB) *UserRepository

NewUserRepository creates a new user repository.

func (*UserRepository) Create

func (r *UserRepository) Create(user *models.User) error

Create creates a new user.

func (*UserRepository) Delete

func (r *UserRepository) Delete(id uint) error

Delete deletes a user by ID.

func (*UserRepository) GetByEmail

func (r *UserRepository) GetByEmail(email string) (*models.User, error)

GetByEmail retrieves a user by email.

func (*UserRepository) GetByID

func (r *UserRepository) GetByID(id uint) (*models.User, error)

GetByID retrieves a user by ID.

func (*UserRepository) GetByLogin

func (r *UserRepository) GetByLogin(login string) (*models.User, error)

GetByLogin retrieves a user by login username.

func (*UserRepository) GetUserGroups

func (r *UserRepository) GetUserGroups(userID uint) ([]string, error)

GetUserGroups retrieves the group names for a specific user.

func (*UserRepository) List

func (r *UserRepository) List() ([]*models.User, error)

List retrieves all users (both active and inactive).

func (*UserRepository) ListWithGroups

func (r *UserRepository) ListWithGroups() ([]*models.User, error)

ListWithGroups retrieves all users with their associated groups.

func (*UserRepository) SetValidID

func (r *UserRepository) SetValidID(id uint, validID int, changeBy uint, changeTime time.Time) error

SetValidID updates only the validity status metadata for a user.

func (*UserRepository) Update

func (r *UserRepository) Update(user *models.User) error

Update updates a user.

func (*UserRepository) UpdateProfile

func (r *UserRepository) UpdateProfile(id uint, firstName, lastName, title string, changeBy uint, changeTime time.Time) error

UpdateProfile updates only the profile display fields for a user (first_name, last_name, title). This is safe for self-service profile editing.

type WebserviceRepository

type WebserviceRepository struct {
	// contains filtered or unexported fields
}

WebserviceRepository handles database operations for GenericInterface webservices.

func NewWebserviceRepository

func NewWebserviceRepository(db *sql.DB) *WebserviceRepository

NewWebserviceRepository creates a new webservice repository.

func (*WebserviceRepository) Create

func (r *WebserviceRepository) Create(ctx context.Context, ws *models.WebserviceConfig, userID int) (int, error)

Create creates a new webservice configuration.

func (*WebserviceRepository) Delete

func (r *WebserviceRepository) Delete(ctx context.Context, id int) error

Delete deletes a webservice configuration.

func (*WebserviceRepository) Exists

func (r *WebserviceRepository) Exists(ctx context.Context, name string) (bool, error)

Exists checks if a webservice with the given name exists.

func (*WebserviceRepository) ExistsExcluding

func (r *WebserviceRepository) ExistsExcluding(ctx context.Context, name string, excludeID int) (bool, error)

ExistsExcluding checks if a webservice with the given name exists, excluding a specific ID.

func (*WebserviceRepository) GetByID

GetByID retrieves a webservice configuration by ID.

func (*WebserviceRepository) GetByName

GetByName retrieves a webservice configuration by name.

func (*WebserviceRepository) GetHistory

func (r *WebserviceRepository) GetHistory(ctx context.Context, configID int) ([]*models.WebserviceConfigHistory, error)

GetHistory retrieves the configuration history for a webservice.

func (*WebserviceRepository) GetHistoryEntry

func (r *WebserviceRepository) GetHistoryEntry(ctx context.Context, historyID int64) (*models.WebserviceConfigHistory, error)

GetHistoryEntry retrieves a specific history entry.

func (*WebserviceRepository) GetValidWebservicesForField

func (r *WebserviceRepository) GetValidWebservicesForField(ctx context.Context) ([]*models.WebserviceConfig, error)

GetValidWebservicesForField returns valid webservices suitable for dynamic field configuration. This is used by the WebserviceDropdown/WebserviceMultiselect field types.

func (*WebserviceRepository) List

List retrieves all webservice configurations.

func (*WebserviceRepository) ListValid

ListValid retrieves only valid (active) webservice configurations.

func (*WebserviceRepository) RestoreFromHistory

func (r *WebserviceRepository) RestoreFromHistory(ctx context.Context, historyID int64, userID int) error

RestoreFromHistory restores a webservice configuration from a history entry.

func (*WebserviceRepository) Update

func (r *WebserviceRepository) Update(ctx context.Context, ws *models.WebserviceConfig, userID int) error

Update updates an existing webservice configuration.

type WorkflowRepository

type WorkflowRepository interface {
	// Workflow CRUD operations
	Create(workflow *models.Workflow) error
	GetByID(id int) (*models.Workflow, error)
	Update(workflow *models.Workflow) error
	Delete(id int) error

	// Query operations
	GetAll() ([]*models.Workflow, error)
	GetActiveWorkflows() ([]*models.Workflow, error)
	GetByStatus(status models.WorkflowStatus) ([]*models.Workflow, error)
	GetByTriggerType(triggerType models.TriggerType) ([]*models.Workflow, error)
	Search(query string) ([]*models.Workflow, error)

	// Trigger operations
	CreateTrigger(trigger *models.Trigger) error
	UpdateTrigger(trigger *models.Trigger) error
	DeleteTrigger(id int) error
	GetTriggersByWorkflow(workflowID int) ([]*models.Trigger, error)

	// Condition operations
	CreateCondition(condition *models.Condition) error
	UpdateCondition(condition *models.Condition) error
	DeleteCondition(id int) error
	GetConditionsByWorkflow(workflowID int) ([]*models.Condition, error)

	// Action operations
	CreateAction(action *models.Action) error
	UpdateAction(action *models.Action) error
	DeleteAction(id int) error
	GetActionsByWorkflow(workflowID int) ([]*models.Action, error)

	// Execution tracking
	CreateExecution(execution *models.WorkflowExecution) error
	UpdateExecution(execution *models.WorkflowExecution) error
	GetExecutionByID(id int) (*models.WorkflowExecution, error)
	GetExecutionsByWorkflow(workflowID int, limit int) ([]*models.WorkflowExecution, error)
	GetExecutionsByTicket(ticketID int) ([]*models.WorkflowExecution, error)
	GetExecutionsByDateRange(start, end time.Time) ([]*models.WorkflowExecution, error)
	GetFailedExecutions(limit int) ([]*models.WorkflowExecution, error)

	// Schedule operations
	CreateSchedule(schedule *models.WorkflowSchedule) error
	UpdateSchedule(schedule *models.WorkflowSchedule) error
	DeleteSchedule(id int) error
	GetScheduleByWorkflow(workflowID int) (*models.WorkflowSchedule, error)
	GetActiveSchedules() ([]*models.WorkflowSchedule, error)
	GetSchedulesDueForExecution(before time.Time) ([]*models.WorkflowSchedule, error)

	// Template operations
	CreateTemplate(template *models.WorkflowTemplate) error
	GetTemplateByID(id int) (*models.WorkflowTemplate, error)
	GetTemplatesByCategory(category string) ([]*models.WorkflowTemplate, error)
	GetAllTemplates() ([]*models.WorkflowTemplate, error)
	IncrementTemplateUsage(id int) error

	// Statistics
	GetWorkflowStats(workflowID int) (map[string]interface{}, error)
	GetGlobalWorkflowStats() (map[string]interface{}, error)
}

WorkflowRepository defines the interface for workflow data operations.

Directories

Path Synopsis
Package memory provides in-memory repository implementations for testing.
Package memory provides in-memory repository implementations for testing.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL