136 lines
4.7 KiB
Go
136 lines
4.7 KiB
Go
package http
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
userv1 "hyapp/api/proto/user/v1"
|
|
"hyapp/services/gateway-service/internal/auth"
|
|
)
|
|
|
|
// userIdentityData 是 gateway 对外返回的当前短号投影。
|
|
// `display_user_id` 永远表示当前有效展示号,临时靓号过期后由 user-service 恢复为默认短号。
|
|
type userIdentityData struct {
|
|
UserID int64 `json:"user_id"`
|
|
DisplayUserID string `json:"display_user_id"`
|
|
Status string `json:"status"`
|
|
DefaultDisplayUserID string `json:"default_display_user_id"`
|
|
DisplayUserIDKind string `json:"display_user_id_kind"`
|
|
DisplayUserIDExpiresAtMs int64 `json:"display_user_id_expires_at_ms"`
|
|
LeaseID string `json:"lease_id,omitempty"`
|
|
}
|
|
|
|
// getMyIdentity 返回当前登录用户的短号状态。
|
|
func (h *Handler) getMyIdentity(writer http.ResponseWriter, request *http.Request) {
|
|
if h.userIdentityClient == nil {
|
|
writeError(writer, request, http.StatusBadGateway, codeUpstreamError, "upstream service error")
|
|
return
|
|
}
|
|
|
|
resp, err := h.userIdentityClient.GetUserIdentity(request.Context(), &userv1.GetUserIdentityRequest{
|
|
Meta: authRequestMeta(request, ""),
|
|
UserId: auth.UserIDFromContext(request.Context()),
|
|
})
|
|
if err != nil {
|
|
writeRPCError(writer, request, err)
|
|
return
|
|
}
|
|
|
|
writeOK(writer, request, identityData(resp.GetIdentity(), ""))
|
|
}
|
|
|
|
// resolveDisplayUserID 通过当前有效展示号解析用户。
|
|
func (h *Handler) resolveDisplayUserID(writer http.ResponseWriter, request *http.Request) {
|
|
if h.userIdentityClient == nil {
|
|
writeError(writer, request, http.StatusBadGateway, codeUpstreamError, "upstream service error")
|
|
return
|
|
}
|
|
|
|
displayUserID := strings.TrimPrefix(request.URL.Path, apiV1Prefix+"/users/by-display-user-id/")
|
|
resp, err := h.userIdentityClient.ResolveDisplayUserID(request.Context(), &userv1.ResolveDisplayUserIDRequest{
|
|
Meta: authRequestMeta(request, ""),
|
|
DisplayUserId: displayUserID,
|
|
})
|
|
if err != nil {
|
|
writeRPCError(writer, request, err)
|
|
return
|
|
}
|
|
|
|
writeOK(writer, request, identityData(resp.GetIdentity(), ""))
|
|
}
|
|
|
|
// changeMyDisplayUserID 修改当前登录用户的默认短号。
|
|
func (h *Handler) changeMyDisplayUserID(writer http.ResponseWriter, request *http.Request) {
|
|
var body struct {
|
|
NewDisplayUserID string `json:"new_display_user_id"`
|
|
Reason string `json:"reason"`
|
|
}
|
|
if !decode(writer, request, &body) {
|
|
return
|
|
}
|
|
if h.userIdentityClient == nil {
|
|
writeError(writer, request, http.StatusBadGateway, codeUpstreamError, "upstream service error")
|
|
return
|
|
}
|
|
|
|
resp, err := h.userIdentityClient.ChangeDisplayUserID(request.Context(), &userv1.ChangeDisplayUserIDRequest{
|
|
Meta: authRequestMeta(request, ""),
|
|
UserId: auth.UserIDFromContext(request.Context()),
|
|
NewDisplayUserId: body.NewDisplayUserID,
|
|
Reason: body.Reason,
|
|
OperatorUserId: auth.UserIDFromContext(request.Context()),
|
|
})
|
|
if err != nil {
|
|
writeRPCError(writer, request, err)
|
|
return
|
|
}
|
|
|
|
writeOK(writer, request, identityData(resp.GetIdentity(), ""))
|
|
}
|
|
|
|
// applyMyPrettyDisplayUserID 为当前登录用户申请临时靓号。
|
|
func (h *Handler) applyMyPrettyDisplayUserID(writer http.ResponseWriter, request *http.Request) {
|
|
var body struct {
|
|
PrettyDisplayUserID string `json:"pretty_display_user_id"`
|
|
LeaseDurationMs int64 `json:"lease_duration_ms"`
|
|
PaymentReceiptID string `json:"payment_receipt_id"`
|
|
}
|
|
if !decode(writer, request, &body) {
|
|
return
|
|
}
|
|
if h.userIdentityClient == nil {
|
|
writeError(writer, request, http.StatusBadGateway, codeUpstreamError, "upstream service error")
|
|
return
|
|
}
|
|
|
|
resp, err := h.userIdentityClient.ApplyPrettyDisplayUserID(request.Context(), &userv1.ApplyPrettyDisplayUserIDRequest{
|
|
Meta: authRequestMeta(request, ""),
|
|
UserId: auth.UserIDFromContext(request.Context()),
|
|
PrettyDisplayUserId: body.PrettyDisplayUserID,
|
|
LeaseDurationMs: body.LeaseDurationMs,
|
|
PaymentReceiptId: body.PaymentReceiptID,
|
|
})
|
|
if err != nil {
|
|
writeRPCError(writer, request, err)
|
|
return
|
|
}
|
|
|
|
writeOK(writer, request, identityData(resp.GetIdentity(), resp.GetLeaseId()))
|
|
}
|
|
|
|
func identityData(identity *userv1.UserIdentity, leaseID string) userIdentityData {
|
|
if identity == nil {
|
|
return userIdentityData{LeaseID: leaseID}
|
|
}
|
|
|
|
return userIdentityData{
|
|
UserID: identity.GetUserId(),
|
|
DisplayUserID: identity.GetDisplayUserId(),
|
|
Status: identity.GetStatus(),
|
|
DefaultDisplayUserID: identity.GetDefaultDisplayUserId(),
|
|
DisplayUserIDKind: identity.GetDisplayUserIdKind(),
|
|
DisplayUserIDExpiresAtMs: identity.GetDisplayUserIdExpiresAtMs(),
|
|
LeaseID: leaseID,
|
|
}
|
|
}
|