50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
|
|
package auth
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
|
||
|
|
memberDomain "apps/backend/internal/module/member/domain"
|
||
|
|
radarDomain "apps/backend/internal/module/radar/domain"
|
||
|
|
"apps/backend/internal/svc"
|
||
|
|
)
|
||
|
|
|
||
|
|
// ensureOnboarding fills completed for legacy members with an empty status who
|
||
|
|
// already have a brand, product, or demand watch. An explicit pending stays
|
||
|
|
// pending so a reset (for retest) is not immediately overwritten.
|
||
|
|
func ensureOnboarding(ctx context.Context, svcCtx *svc.ServiceContext, m *memberDomain.Member) *memberDomain.Member {
|
||
|
|
if m == nil || m.OnboardingStatus != "" {
|
||
|
|
return m
|
||
|
|
}
|
||
|
|
if !hasExistingSetup(ctx, svcCtx, m.UID) {
|
||
|
|
return m
|
||
|
|
}
|
||
|
|
status := memberDomain.OnboardingCompleted
|
||
|
|
updated, err := svcCtx.Auth.UpdateUserInfo(ctx, m.UID, &memberDomain.UpdateUserInfoPatch{
|
||
|
|
OnboardingStatus: &status,
|
||
|
|
})
|
||
|
|
if err != nil || updated == nil {
|
||
|
|
return m
|
||
|
|
}
|
||
|
|
return updated
|
||
|
|
}
|
||
|
|
|
||
|
|
func hasExistingSetup(ctx context.Context, svcCtx *svc.ServiceContext, uid int64) bool {
|
||
|
|
if svcCtx == nil || uid <= 0 {
|
||
|
|
return false
|
||
|
|
}
|
||
|
|
if svcCtx.Scout != nil {
|
||
|
|
if brands, err := svcCtx.Scout.ListBrands(ctx, uid); err == nil && len(brands) > 0 {
|
||
|
|
return true
|
||
|
|
}
|
||
|
|
if products, err := svcCtx.Scout.ListAllProducts(ctx, uid); err == nil && len(products) > 0 {
|
||
|
|
return true
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if svcCtx.Radar != nil {
|
||
|
|
if _, total, err := svcCtx.Radar.ListWatches(ctx, uid, radarDomain.WatchListFilter{Page: 1, PageSize: 1}); err == nil && total > 0 {
|
||
|
|
return true
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return false
|
||
|
|
}
|