feat(sla): persist applied sla on conversations
This commit is contained in:
@@ -55,6 +55,7 @@ type chatwootConversationPayload struct {
|
||||
Priority string `json:"priority"`
|
||||
WaitingSince int64 `json:"waiting_since"`
|
||||
SlaPolicyID *uint `json:"sla_policy_id"`
|
||||
AppliedSLA map[string]any `json:"applied_sla,omitempty"`
|
||||
}
|
||||
|
||||
type chatwootConversationMeta struct {
|
||||
@@ -135,7 +136,7 @@ func serializeConversation(ctx context.Context, db *gorm.DB, conversation *model
|
||||
}
|
||||
}
|
||||
|
||||
return chatwootConversationPayload{
|
||||
payload := chatwootConversationPayload{
|
||||
Meta: serializeConversationMeta(ctx, db, conversation),
|
||||
ID: conversationDisplayID(conversation),
|
||||
Messages: messages,
|
||||
@@ -163,6 +164,40 @@ func serializeConversation(ctx context.Context, db *gorm.DB, conversation *model
|
||||
WaitingSince: int64Value(conversation.WaitingSince),
|
||||
SlaPolicyID: conversation.SlaPolicyID,
|
||||
}
|
||||
|
||||
if appliedSLA := serializeAppliedSlaForConversation(ctx, db, conversation.ID); appliedSLA != nil {
|
||||
payload.AppliedSLA = appliedSLA
|
||||
}
|
||||
|
||||
return payload
|
||||
}
|
||||
|
||||
func serializeAppliedSlaForConversation(ctx context.Context, db *gorm.DB, conversationID uint) map[string]any {
|
||||
if db == nil || conversationID == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
var applied model.AppliedSLA
|
||||
if err := db.WithContext(ctx).
|
||||
Preload("SlaPolicy").
|
||||
Where("conversation_id = ?", conversationID).
|
||||
First(&applied).Error; err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return map[string]any{
|
||||
"id": applied.ID,
|
||||
"sla_id": applied.SlaPolicyID,
|
||||
"sla_status": applied.SLAStatus,
|
||||
"created_at": applied.CreatedAt.Unix(),
|
||||
"updated_at": applied.UpdatedAt.Unix(),
|
||||
"sla_description": applied.SlaPolicy.Description,
|
||||
"sla_name": applied.SlaPolicy.Name,
|
||||
"sla_first_response_time_threshold": applied.SlaPolicy.FirstResponseTimeThreshold,
|
||||
"sla_next_response_time_threshold": applied.SlaPolicy.NextResponseTimeThreshold,
|
||||
"sla_only_during_business_hours": applied.SlaPolicy.OnlyDuringBusinessHours,
|
||||
"sla_resolution_time_threshold": applied.SlaPolicy.ResolutionTimeThreshold,
|
||||
}
|
||||
}
|
||||
|
||||
func serializeConversationMeta(ctx context.Context, db *gorm.DB, conversation *model.Conversation) chatwootConversationMeta {
|
||||
|
||||
Reference in New Issue
Block a user