Compare commits

..

14 Commits

5 changed files with 65 additions and 8 deletions

View File

@@ -8,7 +8,7 @@ type DBAmendment struct {
AmendmentColumn string AmendmentColumn string
AmendmentValue string AmendmentValue string
Requestor string Requestor string
RequestedAt time.Time RequestedAt time.Time `gorm:"index"`
Sequence string Sequence string
} }

View File

@@ -95,8 +95,8 @@ func (CallStat) TableName() string {
type Breakdown struct { type Breakdown struct {
ClientConversationId string `gorm:"primaryKey;index"` ClientConversationId string `gorm:"primaryKey;index"`
InterpreterConversationId string `gorm:"index"` InterpreterConversationId string `gorm:"index"`
Timestamp time.Time `gorm:"index"` Timestamp time.Time `gorm:"primaryKey;index"`
Task string Task string `gorm:"primaryKey"`
Duration int Duration int
Message string Message string
Metadata *string `gorm:"type:json"` Metadata *string `gorm:"type:json"`
@@ -105,3 +105,26 @@ type Breakdown struct {
func (Breakdown) TableName() string { func (Breakdown) TableName() string {
return "gc_call_breakdown" return "gc_call_breakdown"
} }
type CallMetrics struct {
ClientConversationId string `gorm:"primaryKey;index"`
//
TotalDuration int
TotalClientResponseDuration int
TotalSystemDuration int
TotalTalkDuration int
//
AgentAlertDuration int
AgentHoldDuration int
AgentTalkDuration int
//
SearchingDuration int
ConfigurationDuration int
QueueDuration int
//
Metadata *string `gorm:"type:json"`
}
func (CallMetrics) TableName() string {
return "gc_call_metrics"
}

View File

@@ -72,6 +72,7 @@ type AnalyticsConversationWithoutAttributes struct {
DivisionIds []string `json:"divisionIds"` DivisionIds []string `json:"divisionIds"`
Participants []struct { Participants []struct {
ParticipantId string `json:"participantId"` ParticipantId string `json:"participantId"`
UserId string `json:"userId"`
ParticipantName string `json:"participantName"` ParticipantName string `json:"participantName"`
Purpose string `json:"purpose"` Purpose string `json:"purpose"`
ExternalContactId string `json:"externalContactId"` ExternalContactId string `json:"externalContactId"`
@@ -183,3 +184,22 @@ type NotificationConversationWithAttributes struct {
SecurePause bool `json:"securePause"` SecurePause bool `json:"securePause"`
UtilizationLabelId string `json:"utilizationLabelId"` UtilizationLabelId string `json:"utilizationLabelId"`
} }
type UsersQuery struct {
Entities []GCUser `json:"entities"`
PageSize int `json:"pageSize"`
Total int `json:"total"`
}
type GCUser struct {
Id string `json:"id" gorm:"primaryKey"`
Name string `json:"name"`
Email string `json:"email"`
State string `json:"state"`
Username string `json:"username"`
AcdAutoAnswer bool `json:"acdAutoAnswer"`
}
func (GCUser) TableName() string {
return "gc_users"
}

View File

@@ -2,6 +2,8 @@ package models
import ( import (
"time" "time"
"gorm.io/gorm"
) )
type DBParticipant struct { type DBParticipant struct {
@@ -17,13 +19,24 @@ type DBParticipant struct {
Name *string `gorm:"index"` Name *string `gorm:"index"`
Purpose *string `gorm:"index"` Purpose *string `gorm:"index"`
QueueId *string QueueId *string
UserId *string
Wrapup *string `gorm:"type:json"` Wrapup *string `gorm:"type:json"`
WrapupExpected *bool WrapupExpected *bool
WrapupRequired *bool WrapupRequired *bool
Sessions []DBSession `gorm:"foreignKey:ParticipantId;references:Id"` Sessions []DBSession `gorm:"foreignKey:ParticipantId;references:Id"`
Calls []DBCall `gorm:"foreignKey:ParticipantId;references:Id"`
User *GCUser `gorm:"foreignKey:UserId;references:Id"`
} }
func (DBParticipant) TableName() string { func (DBParticipant) TableName() string {
return "gc_participants" return "gc_participants"
} }
func (p *DBParticipant) BeforeSave(tx *gorm.DB) error {
// Convert empty string to nil
if p.UserId != nil && *p.UserId == "" {
p.UserId = nil
}
return nil
}

View File

@@ -49,13 +49,14 @@ func ExtractWithoutAttributes(base models.AnalyticsConversationWithoutAttributes
for _, p := range base.Participants { for _, p := range base.Participants {
participant := models.DBParticipant{ participant := models.DBParticipant{
ConnectedTime: nil, // ConnectedTime: nil,
ConversationId: base.ConversationId, ConversationId: base.ConversationId,
EndTime: nil, // EndTime: nil,
ExternalContactId: &p.ExternalContactId, ExternalContactId: &p.ExternalContactId,
Id: p.ParticipantId, Id: p.ParticipantId,
Name: &p.ParticipantName, Name: &p.ParticipantName,
Purpose: &p.Purpose, Purpose: &p.Purpose,
UserId: &p.UserId,
} }
participants = append(participants, participant) participants = append(participants, participant)
@@ -94,7 +95,7 @@ func ExtractWithoutAttributes(base models.AnalyticsConversationWithoutAttributes
} }
sessions = append(sessions, session) sessions = append(sessions, session)
for _, seg := range sess.Segments { for idx, seg := range sess.Segments {
segmentStart, err := time.Parse(time.RFC3339, seg.SegmentStart) segmentStart, err := time.Parse(time.RFC3339, seg.SegmentStart)
if err != nil { if err != nil {
@@ -112,7 +113,7 @@ func ExtractWithoutAttributes(base models.AnalyticsConversationWithoutAttributes
} }
segment := models.DBSegment{ segment := models.DBSegment{
Id: fmt.Sprintf("%s_%s", session.Id, seg.SegmentType), Id: fmt.Sprintf("%s_%s_%d", session.Id, seg.SegmentType, idx),
Conference: seg.Conference, Conference: seg.Conference,
DisconnectType: seg.DisconnectType, DisconnectType: seg.DisconnectType,
Q850ResponseCodes: string(q850ResponseCodesBytes), Q850ResponseCodes: string(q850ResponseCodesBytes),