* INFRA-3570 : Do not show same severity and status in update incident in slack UI * INFRA-3570 : Cyclic dependency fix * INFRA-3570 : Minor changes * INFRA-3570 : Add UT'S * INFRA-3570 : Major refactor * INFRA-3570 : Move all incident status repo functions to new service * INFRA-3570 : Add UT's
89 lines
2.5 KiB
Go
89 lines
2.5 KiB
Go
package impl
|
|
|
|
import (
|
|
"fmt"
|
|
"go.uber.org/zap"
|
|
"houston/common/util/dto"
|
|
"houston/logger"
|
|
"houston/model/severity"
|
|
severityRepo "houston/repository/severity"
|
|
"houston/service/dtoConverter"
|
|
"sort"
|
|
)
|
|
|
|
type SeverityService struct {
|
|
severityRepository severityRepo.ISeverityRepository
|
|
}
|
|
|
|
func NewSeverityService(severityRepository severityRepo.ISeverityRepository) *SeverityService {
|
|
return &SeverityService{
|
|
severityRepository: severityRepository,
|
|
}
|
|
}
|
|
|
|
func (service *SeverityService) GetAllActiveSeverities() ([]severity.SeverityDTO, error) {
|
|
severityEntities, err := service.severityRepository.GetAllActiveSeverity()
|
|
if err != nil {
|
|
logger.Error("failed to get all active severities", zap.Error(err))
|
|
return nil, err
|
|
}
|
|
|
|
return dtoConverter.SeverityEntitiesToDTOs(*severityEntities), err
|
|
}
|
|
|
|
func (service *SeverityService) GetSeverityEscalationMap() (map[uint]*severity.SeverityDTO, error) {
|
|
severities, err := service.GetAllActiveSeverities()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return service.createSeverityEscalationMap(severities), nil
|
|
}
|
|
|
|
func (service *SeverityService) FindSeverityById(severityId uint) (*severity.SeverityDTO, error) {
|
|
severityEntity, err := service.severityRepository.FindSeverityById(severityId)
|
|
if err != nil {
|
|
logger.Error("failed to find severity by id", zap.Error(err))
|
|
return nil, err
|
|
}
|
|
|
|
if severityEntity == nil {
|
|
errMessage := fmt.Sprintf("severity with id %d not found", severityId)
|
|
logger.Error(errMessage)
|
|
return nil, fmt.Errorf(errMessage)
|
|
}
|
|
|
|
severityDTO := severityEntity.ToDTO()
|
|
|
|
return &severityDTO, err
|
|
}
|
|
|
|
func (service *SeverityService) GetSeveritiesNotMatchingIncidentSeverity(channelID string) ([]severity.SeverityDTO, error) {
|
|
severities, err := service.severityRepository.GetSeveritiesNotMatchingIncidentSeverity(channelID)
|
|
if err != nil {
|
|
logger.Error("failed to get severities not matching incident severity", zap.Error(err))
|
|
return nil, err
|
|
}
|
|
|
|
return dto.ToDtoArray[severity.SeverityEntity, severity.SeverityDTO](severities), nil
|
|
}
|
|
|
|
func (service *SeverityService) createSeverityEscalationMap(severities []severity.SeverityDTO) map[uint]*severity.SeverityDTO {
|
|
sort.Slice(severities, func(i, j int) bool {
|
|
return severities[i].Priority > severities[j].Priority
|
|
})
|
|
|
|
escalationMap := make(map[uint]*severity.SeverityDTO)
|
|
|
|
for index, severity := range severities {
|
|
for nextIndex := index + 1; nextIndex < len(severities); nextIndex++ {
|
|
if severities[nextIndex].Priority < severity.Priority {
|
|
escalationMap[severity.ID] = &severities[nextIndex]
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
return escalationMap
|
|
}
|