thread-master/apps/backend/internal/logic/crmmap/map.go

99 lines
2.4 KiB
Go
Raw Normal View History

2026-08-03 05:52:02 +00:00
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}
}