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

167 lines
4.4 KiB
Go

package growthmap
import (
"apps/backend/internal/module/growth/domain"
"apps/backend/internal/types"
)
func Outcome(e *domain.OutcomeEvent) *types.OutcomeEventPublic {
if e == nil {
return nil
}
return &types.OutcomeEventPublic{
Id: e.ID,
SourceType: e.SourceType,
SourceId: e.SourceID,
ThreadsAccountId: e.ThreadsAccountID,
Kind: e.Kind,
Confidence: e.Confidence,
Status: e.Status,
ReplyCountDelta: e.ReplyCountDelta,
LikeCountDelta: e.LikeCountDelta,
FollowersDelta: e.FollowersDelta,
ConversionAmount: e.ConversionAmount,
ConversionNote: e.ConversionNote,
ConversionCurrency: e.ConversionCurrency,
WindowEndsAt: e.WindowEndsAt,
SentAt: e.SentAt,
CreatedAt: e.CreatedAt,
UpdatedAt: e.UpdatedAt,
}
}
func OutcomeList(list []*domain.OutcomeEvent) []types.OutcomeEventPublic {
out := make([]types.OutcomeEventPublic, 0, len(list))
for _, e := range list {
if p := Outcome(e); p != nil {
out = append(out, *p)
}
}
return out
}
func Summary(s *domain.OutcomeSummary) *types.OutcomeSummaryData {
if s == nil {
return nil
}
return &types.OutcomeSummaryData{
From: s.From,
To: s.To,
Reach: s.Reach,
Conversations: s.Conversations,
FollowsPossible: s.FollowsPossible,
FollowsConfirmed: s.FollowsConfirmed,
Conversions: s.Conversions,
ConversionAmount: s.ConversionAmount,
}
}
func Checkup(c *domain.WeeklyCheckup) *types.WeeklyCheckupPublic {
if c == nil {
return nil
}
findings := make([]types.CheckupFindingPublic, 0, len(c.Findings))
for _, f := range c.Findings {
findings = append(findings, types.CheckupFindingPublic{Claim: f.Claim, Evidence: f.Evidence})
}
actions := make([]types.CheckupActionPublic, 0, len(c.Actions))
for _, a := range c.Actions {
actions = append(actions, types.CheckupActionPublic{Title: a.Title, Reason: a.Reason, Deeplink: a.Deeplink})
}
return &types.WeeklyCheckupPublic{
Id: c.ID, WeekKey: c.WeekKey, Status: c.Status, Summary: c.Summary,
Findings: findings, Actions: actions, Error: c.Error,
CreatedAt: c.CreatedAt, UpdatedAt: c.UpdatedAt,
}
}
func CheckupList(list []*domain.WeeklyCheckup) []types.WeeklyCheckupPublic {
out := make([]types.WeeklyCheckupPublic, 0, len(list))
for _, c := range list {
if p := Checkup(c); p != nil {
out = append(out, *p)
}
}
return out
}
func Health(h *domain.AccountHealth) *types.AccountHealthPublic {
if h == nil {
return nil
}
return &types.AccountHealthPublic{
ThreadsAccountId: h.ThreadsAccountID,
Score: h.Score,
Level: h.Level,
Factors: h.Factors,
Advice: h.Advice,
ComputedAt: h.ComputedAt,
}
}
func HealthList(list []*domain.AccountHealth) []types.AccountHealthPublic {
out := make([]types.AccountHealthPublic, 0, len(list))
for _, h := range list {
if p := Health(h); p != nil {
out = append(out, *p)
}
}
return out
}
func Workspace(w *domain.Workspace) *types.WorkspacePublic {
if w == nil {
return nil
}
return &types.WorkspacePublic{
Id: w.ID, Name: w.Name, ReviewRequired: w.ReviewRequired,
IsDefault: w.IsDefault, Archived: w.Archived,
FooterText: w.FooterText, HidePoweredBy: w.HidePoweredBy, BrandName: w.BrandName,
CreatedAt: w.CreatedAt, UpdatedAt: w.UpdatedAt,
}
}
func WorkspaceList(list []*domain.Workspace) []types.WorkspacePublic {
out := make([]types.WorkspacePublic, 0, len(list))
for _, w := range list {
if p := Workspace(w); p != nil {
out = append(out, *p)
}
}
return out
}
func Review(r *domain.DraftReview) *types.DraftReviewPublic {
if r == nil {
return nil
}
return &types.DraftReviewPublic{
Id: r.ID, RefType: r.RefType, RefId: r.RefID, WorkspaceId: r.WorkspaceID,
Status: r.Status, Reason: r.Reason, CreatedAt: r.CreatedAt, UpdatedAt: r.UpdatedAt,
}
}
func ReviewList(list []*domain.DraftReview) []types.DraftReviewPublic {
out := make([]types.DraftReviewPublic, 0, len(list))
for _, r := range list {
if p := Review(r); p != nil {
out = append(out, *p)
}
}
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}
}