99 lines
2.4 KiB
Go
99 lines
2.4 KiB
Go
package crmmap
|
|
|
|
import (
|
|
"apps/backend/internal/module/crm/domain"
|
|
"apps/backend/internal/types"
|
|
)
|
|
|
|
func Contact(c *domain.Contact) *types.ContactPublic {
|
|
if c == nil {
|
|
return nil
|
|
}
|
|
ids := c.OpportunityIDs
|
|
if ids == nil {
|
|
ids = []string{}
|
|
}
|
|
return &types.ContactPublic{
|
|
Id: c.ID, SourcePlatform: c.SourcePlatform, AuthorHandle: c.AuthorHandle,
|
|
DisplayName: c.DisplayName, Stage: c.Stage, NeedsFollowUp: c.NeedsFollowUp,
|
|
FollowUpDays: c.FollowUpDays, LastTouchAt: c.LastTouchAt,
|
|
OpportunityIds: ids, OpportunityCount: len(ids), MergedFrom: c.MergedFrom,
|
|
TopIntentBand: c.TopIntentBand, TopIntentScore: c.TopIntentScore,
|
|
CreatedAt: c.CreatedAt, UpdatedAt: c.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
func ContactList(list []*domain.Contact) []types.ContactPublic {
|
|
out := make([]types.ContactPublic, 0, len(list))
|
|
for _, c := range list {
|
|
if p := Contact(c); p != nil {
|
|
out = append(out, *p)
|
|
}
|
|
}
|
|
return out
|
|
}
|
|
|
|
func Touch(t *domain.ContactTouch) *types.ContactTouchPublic {
|
|
if t == nil {
|
|
return nil
|
|
}
|
|
return &types.ContactTouchPublic{
|
|
Id: t.ID, ContactId: t.ContactID, Type: t.Type,
|
|
FromStage: t.FromStage, ToStage: t.ToStage, Body: t.Body,
|
|
ActorUid: t.ActorUID, CreatedAt: t.CreatedAt,
|
|
}
|
|
}
|
|
|
|
func TouchList(list []*domain.ContactTouch) []types.ContactTouchPublic {
|
|
out := make([]types.ContactTouchPublic, 0, len(list))
|
|
for _, t := range list {
|
|
if p := Touch(t); p != nil {
|
|
out = append(out, *p)
|
|
}
|
|
}
|
|
return out
|
|
}
|
|
|
|
func FollowUp(f *domain.FollowUp) *types.FollowUpPublic {
|
|
if f == nil {
|
|
return nil
|
|
}
|
|
return &types.FollowUpPublic{
|
|
Id: f.ID, ContactId: f.ContactID, DueAt: f.DueAt, Status: f.Status,
|
|
NotifiedCount: f.NotifiedCount, CreatedAt: f.CreatedAt,
|
|
Contact: types.ContactBrief{},
|
|
}
|
|
}
|
|
|
|
func FollowUpList(list []*domain.FollowUp) []types.FollowUpPublic {
|
|
out := make([]types.FollowUpPublic, 0, len(list))
|
|
for _, f := range list {
|
|
if p := FollowUp(f); p != nil {
|
|
out = append(out, *p)
|
|
}
|
|
}
|
|
return out
|
|
}
|
|
|
|
func StageCounts(m map[string]int) []types.StageCount {
|
|
out := make([]types.StageCount, 0, len(m))
|
|
for k, v := range m {
|
|
out = append(out, types.StageCount{Stage: k, Count: v})
|
|
}
|
|
return out
|
|
}
|
|
|
|
func Pagination(page, pageSize int, total int64) types.Pagination {
|
|
if page < 1 {
|
|
page = 1
|
|
}
|
|
if pageSize < 1 {
|
|
pageSize = 20
|
|
}
|
|
tp := int(total) / pageSize
|
|
if int(total)%pageSize != 0 {
|
|
tp++
|
|
}
|
|
return types.Pagination{Page: page, PageSize: pageSize, Total: total, TotalPages: tp}
|
|
}
|