Files
houston-be/service/severity/impl/severity_service.go
Vijay Joshi 55da2b4791 INFRA-3570 : Do not show the current severity and status in update incident in slack UI (#439)
* 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
2024-07-18 13:17:28 +05:30

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
}