topfans/backend/gateway/dto/gallery_converter.go
2026-04-07 22:29:48 +08:00

153 lines
3.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package dto
import (
pbGallery "github.com/topfans/backend/pkg/proto/gallery"
)
// ========== Proto 转 DTO ==========
// ConvertGalleryData 转换展馆数据
func ConvertGalleryData(pbData *pbGallery.GalleryData) *GetMyGalleryResponseDTO {
if pbData == nil {
return nil
}
dto := &GetMyGalleryResponseDTO{
GalleryOwnerID: pbData.GalleryOwnerId,
SlotTotal: pbData.SlotTotal,
Slots: make([]SlotInfoDTO, 0, len(pbData.Slots)),
Nickname: pbData.Nickname,
}
// 转换展位列表
for _, slot := range pbData.Slots {
dto.Slots = append(dto.Slots, ConvertSlotInfo(slot))
}
return dto
}
// ConvertGalleryDataToUser 转换展馆数据(用于他人展馆)
func ConvertGalleryDataToUser(pbData *pbGallery.GalleryData) *GetUserGalleryResponseDTO {
if pbData == nil {
return nil
}
dto := &GetUserGalleryResponseDTO{
GalleryOwnerID: pbData.GalleryOwnerId,
SlotTotal: pbData.SlotTotal,
Slots: make([]SlotInfoDTO, 0, len(pbData.Slots)),
Nickname: pbData.Nickname,
}
// 转换展位列表
for _, slot := range pbData.Slots {
dto.Slots = append(dto.Slots, ConvertSlotInfo(slot))
}
return dto
}
// ConvertSlotInfo 转换展位信息
func ConvertSlotInfo(pbSlot *pbGallery.SlotInfo) SlotInfoDTO {
dto := SlotInfoDTO{
SlotID: pbSlot.SlotId,
SlotIndex: pbSlot.SlotIndex,
Status: pbSlot.Status,
IsEnabled: pbSlot.IsEnabled,
Visibility: pbSlot.Visibility,
CanOperate: pbSlot.CanOperate,
Operation: pbSlot.Operation,
}
// 转换资产信息仅当status为OCCUPIED时存在
if pbSlot.Asset != nil {
dto.Asset = ConvertAssetInfo(pbSlot.Asset)
}
// 转换占位者信息仅当status为OCCUPIED时存在
if pbSlot.OccupierUid > 0 {
dto.OccupierUID = pbSlot.OccupierUid
}
if pbSlot.OccupiedAt > 0 {
dto.OccupiedAt = pbSlot.OccupiedAt
}
if pbSlot.ExpireAt > 0 {
dto.ExpireAt = pbSlot.ExpireAt
}
// 转换解锁条件仅当status为LOCKED时存在
if pbSlot.UnlockCondition != nil {
dto.UnlockCondition = ConvertUnlockCondition(pbSlot.UnlockCondition)
}
return dto
}
// ConvertAssetInfo 转换资产信息
func ConvertAssetInfo(pbAsset *pbGallery.AssetInfo) *AssetInfoDTO {
if pbAsset == nil {
return nil
}
return &AssetInfoDTO{
AssetID: pbAsset.AssetId,
Name: pbAsset.Name,
CoverURL: pbAsset.CoverUrl,
LikeCount: pbAsset.LikeCount,
RemainTime: pbAsset.RemainTime,
}
}
// ConvertUnlockCondition 转换解锁条件
func ConvertUnlockCondition(pbCondition *pbGallery.UnlockCondition) *UnlockConditionDTO {
if pbCondition == nil {
return nil
}
return &UnlockConditionDTO{
Type: pbCondition.Type,
Value: pbCondition.Value,
}
}
// ConvertPlaceAssetData 转换放置资产数据
func ConvertPlaceAssetData(pbData *pbGallery.PlaceAssetData) *PlaceAssetResponseDTO {
if pbData == nil {
return nil
}
return &PlaceAssetResponseDTO{
Status: pbData.Status,
OccupiedUntil: pbData.OccupiedUntil,
OccupierUID: pbData.OccupierUid,
}
}
// ConvertUnlockSlotData 转换解锁展位数据
func ConvertUnlockSlotData(pbData *pbGallery.UnlockSlotData) *UnlockSlotResponseDTO {
if pbData == nil {
return nil
}
return &UnlockSlotResponseDTO{
SlotTotal: pbData.SlotTotal,
CrystalBalance: pbData.CrystalBalance,
}
}
// ========== DTO 转 Proto ==========
// ConvertPlaceAssetRequest 转换放置资产请求
func ConvertPlaceAssetRequest(dto *PlaceAssetRequestDTO) *pbGallery.PlaceAssetRequest {
if dto == nil {
return nil
}
return &pbGallery.PlaceAssetRequest{
AssetId: dto.AssetID,
GalleryOwnerId: dto.GalleryOwnerID,
SlotId: dto.SlotID,
}
}