181 lines
4.3 KiB
Go
181 lines
4.3 KiB
Go
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,
|
||
}
|
||
}
|
||
|
||
// ConvertInspirationFlowData 转换灵感瀑布数据
|
||
func ConvertInspirationFlowData(pbData *pbGallery.InspirationFlowData) *GetInspirationFlowResponseDTO {
|
||
if pbData == nil {
|
||
return nil
|
||
}
|
||
|
||
dto := &GetInspirationFlowResponseDTO{
|
||
Cursor: pbData.Cursor,
|
||
HasMore: pbData.HasMore,
|
||
SessionID: pbData.SessionId,
|
||
Items: make([]*InspirationFlowItemDTO, 0, len(pbData.Items)),
|
||
}
|
||
|
||
for _, item := range pbData.Items {
|
||
dto.Items = append(dto.Items, &InspirationFlowItemDTO{
|
||
AssetID: item.AssetId,
|
||
Name: item.Name,
|
||
CoverURL: item.CoverUrl,
|
||
LikeCount: item.LikeCount,
|
||
OwnerNickname: item.OwnerNickname,
|
||
Span: item.Span,
|
||
MaterialType: item.MaterialType,
|
||
})
|
||
}
|
||
|
||
return dto
|
||
}
|