105 lines
3.7 KiB
Go
105 lines
3.7 KiB
Go
package query
|
|
|
|
import (
|
|
"fmt"
|
|
"houston/entity"
|
|
"houston/model"
|
|
"strconv"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func CreateIncident(db *gorm.DB, request *model.CreateIncident) (*entity.IncidentEntity, error) {
|
|
severityId, err := strconv.Atoi(request.IncidentSeverity)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("fetch channel conversationInfo failed. err: %v", err)
|
|
}
|
|
incidentEntity := &entity.IncidentEntity{
|
|
Title: request.IncidentTitle,
|
|
Description: request.IncidentDescription,
|
|
Status: request.Status,
|
|
SeverityId: severityId,
|
|
IncidentName: request.IncidentName,
|
|
SlackChannel: request.SlackChannel,
|
|
DetectionTime: request.DetectionTime,
|
|
CustomerImpactStartTime: request.CustomerImpactStartTime,
|
|
CustomerImpactEndTime: request.CustomerImpactEndTime,
|
|
TeamsId: request.TeamsId,
|
|
JiraId: request.JiraId,
|
|
ConfluenceId: request.ConfluenceId,
|
|
RemindMeAt: request.RemindMeAt,
|
|
EnableReminder: request.EnableReminder,
|
|
CreatedBy: request.CreatedBy,
|
|
UpdatedBy: request.UpdatedBy,
|
|
Version: request.Version,
|
|
}
|
|
|
|
result := db.Create(incidentEntity)
|
|
if result.Error != nil {
|
|
return nil, result.Error
|
|
}
|
|
|
|
return incidentEntity, nil
|
|
}
|
|
|
|
func UpdateIncident(db *gorm.DB, incidentEntity *entity.IncidentEntity) error {
|
|
result := db.Updates(incidentEntity)
|
|
if result.Error != nil {
|
|
return result.Error
|
|
}
|
|
|
|
return nil
|
|
}
|
|
func FindIncidentById(db *gorm.DB, incidentId string) (*entity.IncidentEntity, error) {
|
|
var incidentEntity entity.IncidentEntity
|
|
|
|
result := db.Find(&incidentEntity, "id = ?", incidentId)
|
|
if result.Error != nil {
|
|
return nil, result.Error
|
|
}
|
|
|
|
return &incidentEntity, nil
|
|
}
|
|
|
|
func FindNotResolvedLatestIncidents(db *gorm.DB, limit int) ([]entity.IncidentSeverityTeamJoinEntity, error) {
|
|
var incidentSeverityTeamJoinEntity []entity.IncidentSeverityTeamJoinEntity
|
|
|
|
result := db.Limit(limit).Where("status <> ? AND incidents.deleted_at IS NULL", entity.Resolved).Order("incidents.created_at desc").Joins("JOIN severity ON severity.id = incidents.severity_id").Joins("JOIN teams ON teams.id = incidents.teams_id").Select("incidents.title,incidents.status,incidents.slack_channel,severity.id as severity_id,severity.name as severity_name,teams.id as teams_id,teams.name as teams_name").Find(&entity.IncidentEntity{}).Scan(&incidentSeverityTeamJoinEntity)
|
|
|
|
if result.Error != nil {
|
|
return nil, result.Error
|
|
}
|
|
|
|
return incidentSeverityTeamJoinEntity, nil
|
|
}
|
|
|
|
func FindIncidentByChannelId(db *gorm.DB, channelId string) (*entity.IncidentEntity, error) {
|
|
var incidentEntity entity.IncidentEntity
|
|
|
|
result := db.Find(&incidentEntity, "slack_channel = ?", channelId)
|
|
if result.Error != nil {
|
|
return nil, result.Error
|
|
}
|
|
|
|
if result.RowsAffected == 0 {
|
|
return nil, nil
|
|
}
|
|
|
|
return &incidentEntity, nil
|
|
}
|
|
|
|
func FindIncidentSeverityTeamJoin(db *gorm.DB, slackChannelId string) (*entity.IncidentSeverityTeamJoinEntity, error) {
|
|
var incidentSeverityTeamJoinEntity entity.IncidentSeverityTeamJoinEntity
|
|
|
|
result := db.Where("incidents.slack_channel = ? and incidents.deleted_at IS NULL", slackChannelId).Joins("JOIN severity ON severity.id = incidents.severity_id").Joins("JOIN teams ON teams.id = incidents.teams_id").Select("incidents.id as incident_id,incidents.title,incidents.status,incidents.slack_channel,severity.id as severity_id,severity.name as severity_name,teams.id as teams_id,teams.name as teams_name").Find(&entity.IncidentEntity{}).Scan(&incidentSeverityTeamJoinEntity)
|
|
|
|
if result.Error != nil {
|
|
return nil, result.Error
|
|
}
|
|
if result.RowsAffected == 0 {
|
|
return nil, nil
|
|
}
|
|
|
|
return &incidentSeverityTeamJoinEntity, nil
|
|
}
|