2026-04-25 13:21:39 +08:00

78 lines
2.7 KiB
Go

package grpc
import (
userv1 "hyapp/api/proto/user/v1"
authdomain "hyapp/services/user-service/internal/domain/auth"
userdomain "hyapp/services/user-service/internal/domain/user"
authservice "hyapp/services/user-service/internal/service/auth"
)
// toProtoToken 把领域令牌转换为 protobuf 响应。
func toProtoToken(token authdomain.Token) *userv1.AuthToken {
return &userv1.AuthToken{
UserId: token.UserID,
DisplayUserId: token.DisplayUserID,
DefaultDisplayUserId: token.DefaultDisplayUserID,
DisplayUserIdKind: token.DisplayUserIDKind,
DisplayUserIdExpiresAtMs: token.DisplayUserIDExpiresAtMs,
SessionId: token.SessionID,
AccessToken: token.AccessToken,
RefreshToken: token.RefreshToken,
ExpiresInSec: token.ExpiresInSec,
TokenType: token.TokenType,
}
}
// toProtoUser 把领域用户转换为 protobuf 用户投影。
func toProtoUser(user userdomain.User) *userv1.User {
return &userv1.User{
UserId: user.UserID,
Status: toProtoStatus(user.Status),
CreatedAtMs: user.CreatedAtMs,
UpdatedAtMs: user.UpdatedAtMs,
DisplayUserId: user.CurrentDisplayUserID,
DefaultDisplayUserId: user.DefaultDisplayUserID,
DisplayUserIdKind: string(user.CurrentDisplayUserIDKind),
DisplayUserIdExpiresAtMs: user.CurrentDisplayUserIDExpiresAtMs,
}
}
// toProtoIdentity 把短号领域投影转换为 protobuf 响应。
func toProtoIdentity(identity userdomain.Identity) *userv1.UserIdentity {
return &userv1.UserIdentity{
UserId: identity.UserID,
DisplayUserId: identity.DisplayUserID,
Status: string(identity.Status),
DefaultDisplayUserId: identity.DefaultDisplayUserID,
DisplayUserIdKind: string(identity.DisplayUserIDKind),
DisplayUserIdExpiresAtMs: identity.DisplayUserIDExpiresAtMs,
}
}
// toProtoStatus 固定未知状态的安全默认值。
func toProtoStatus(status userdomain.Status) userv1.UserStatus {
switch status {
case userdomain.StatusActive:
return userv1.UserStatus_USER_STATUS_ACTIVE
case userdomain.StatusDisabled:
return userv1.UserStatus_USER_STATUS_DISABLED
case userdomain.StatusBanned:
return userv1.UserStatus_USER_STATUS_BANNED
default:
return userv1.UserStatus_USER_STATUS_UNSPECIFIED
}
}
// authMeta 提取认证链路审计所需的 gateway 透传字段。
func authMeta(meta *userv1.RequestMeta) authservice.Meta {
if meta == nil {
return authservice.Meta{}
}
return authservice.Meta{
RequestID: meta.GetRequestId(),
ClientIP: meta.GetClientIp(),
UserAgent: meta.GetUserAgent(),
}
}