template-monorepo/internal/model/member/domain/usecase/profile.go

74 lines
2.8 KiB
Go
Raw Normal View History

2026-05-20 23:51:22 +00:00
package usecase
import (
"context"
"gateway/internal/model/member/domain/enum"
)
// ProfileUseCase reads and updates member profile fields (not lifecycle transitions).
type ProfileUseCase interface {
GetByUID(ctx context.Context, req *GetMemberRequest) (*MemberDTO, error)
GetByZitadelUserID(ctx context.Context, tenantID, zitadelUserID string) (*MemberDTO, error)
2026-05-20 23:51:22 +00:00
Update(ctx context.Context, req *UpdateMemberRequest) (*MemberDTO, error)
List(ctx context.Context, req *ListMembersRequest) (*ListMembersResponse, error)
SetBusinessEmailVerified(ctx context.Context, tenantID, uid, email string) error
SetBusinessPhoneVerified(ctx context.Context, tenantID, uid, phone string) error
}
// GetMemberRequest loads a member by tenant + uid.
type GetMemberRequest struct {
TenantID string
UID string
}
// UpdateMemberRequest patches mutable profile fields.
type UpdateMemberRequest struct {
TenantID string
UID string
DisplayName *string
Avatar *string
Language *string
Currency *string
Phone *string
}
// ListMembersRequest lists members within a tenant.
type ListMembersRequest struct {
TenantID string
Status enum.MemberStatus
Offset int64
Limit int64
}
// ListMembersResponse is a paginated member list.
type ListMembersResponse struct {
Items []*MemberDTO `json:"items"`
Total int64 `json:"total"`
Offset int64 `json:"offset"`
Limit int64 `json:"limit"`
}
// MemberDTO is the outward member profile shape.
type MemberDTO struct {
TenantID string `json:"tenant_id"`
UID string `json:"uid"`
ZitadelEmail string `json:"zitadel_email,omitempty"`
DisplayName string `json:"display_name,omitempty"`
Avatar string `json:"avatar,omitempty"`
Phone string `json:"phone,omitempty"`
Language string `json:"language,omitempty"`
Currency string `json:"currency,omitempty"`
Status enum.MemberStatus `json:"status"`
Origin enum.MemberOrigin `json:"origin"`
BusinessEmail string `json:"business_email,omitempty"`
BusinessEmailVerified bool `json:"business_email_verified"`
BusinessEmailVerifiedAt int64 `json:"business_email_verified_at,omitempty"`
BusinessPhone string `json:"business_phone,omitempty"`
BusinessPhoneVerified bool `json:"business_phone_verified"`
BusinessPhoneVerifiedAt int64 `json:"business_phone_verified_at,omitempty"`
TOTPEnrolled bool `json:"totp_enrolled"`
CreateAt int64 `json:"create_at"`
UpdateAt int64 `json:"update_at"`
}