Files

171 lines
4.5 KiB
Python
Raw Permalink 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.
"""模块:CRB 序列化器
为 10 个模型提供 PascalCase 序列化输出。MC 插件表与 Django 独有表共用
``PascalCaseModelSerializer`` 基类,保证 API 输出与 Python 属性命名一致。"""
from rest_framework import serializers
from gvsds.common.Serializer import PascalCaseModelSerializer
from .models import (
CmeCurrencies, CmeBalances, CmeTransactions, CmePaymentRequests,
CmePlayerSettings, CmeExchangeRates,
CmeStoreValue, CmeWalletGVSDSMapping, Enterprise, EnterpriseUser,
ShopProduct, ShopCartItem, ShopOrder, ShopOrderItem,
)
class CmeCurrenciesSerializer(PascalCaseModelSerializer):
"""CME 币种序列化器"""
class Meta:
model = CmeCurrencies
fields = '__all__'
class CmeBalancesSerializer(PascalCaseModelSerializer):
"""CME 钱包余额序列化器
注:``UserUUID`` 为 MC 玩家 UUID(BINARY16),序列化为 UUID 字符串。"""
class Meta:
model = CmeBalances
fields = '__all__'
class CmeTransactionsSerializer(PascalCaseModelSerializer):
"""CME 交易流水序列化器"""
class Meta:
model = CmeTransactions
fields = '__all__'
class CmePaymentRequestsSerializer(PascalCaseModelSerializer):
"""CME 付款请求序列化器"""
class Meta:
model = CmePaymentRequests
fields = '__all__'
class CmePlayerSettingsSerializer(PascalCaseModelSerializer):
"""CME 玩家设置序列化器"""
class Meta:
model = CmePlayerSettings
fields = '__all__'
class CmeExchangeRatesSerializer(PascalCaseModelSerializer):
"""CME 汇率序列化器"""
class Meta:
model = CmeExchangeRates
fields = '__all__'
class CmeStoreValueSerializer(PascalCaseModelSerializer):
"""CME 储值序列化器"""
class Meta:
model = CmeStoreValue
fields = '__all__'
class CmeWalletGVSDSMappingSerializer(PascalCaseModelSerializer):
"""GVSDS↔MC 玩家映射序列化器"""
class Meta:
model = CmeWalletGVSDSMapping
fields = '__all__'
class EnterpriseSerializer(PascalCaseModelSerializer):
"""企业序列化器"""
class Meta:
model = Enterprise
fields = '__all__'
class EnterpriseUserSerializer(PascalCaseModelSerializer):
"""企业用户序列化器"""
class Meta:
model = EnterpriseUser
fields = '__all__'
# ============================================================================
# 商店系统序列化器
# ============================================================================
class ShopProductSerializer(PascalCaseModelSerializer):
"""商店商品序列化器"""
class Meta:
model = ShopProduct
fields = '__all__'
class ShopCartItemSerializer(PascalCaseModelSerializer):
"""购物车项序列化器(含商品快照)"""
ProductName = serializers.SerializerMethodField()
ProductPrice = serializers.SerializerMethodField()
ProductImages = serializers.SerializerMethodField()
ProductStatus = serializers.SerializerMethodField()
Stock = serializers.SerializerMethodField()
def _get_product(self, obj):
return getattr(obj, 'Product', None)
def get_ProductName(self, obj):
p = self._get_product(obj)
return p.ProductName if p else None
def get_ProductPrice(self, obj):
p = self._get_product(obj)
return p.ProductPrice if p else None
def get_ProductImages(self, obj):
p = self._get_product(obj)
return p.ProductImages if p else []
def get_ProductStatus(self, obj):
p = self._get_product(obj)
return p.ProductStatus if p else 0
def get_Stock(self, obj):
p = self._get_product(obj)
return p.Stock if p else 0
class Meta:
model = ShopCartItem
fields = '__all__'
class ShopOrderItemSerializer(PascalCaseModelSerializer):
"""订单项序列化器"""
class Meta:
model = ShopOrderItem
fields = '__all__'
class ShopOrderSerializer(PascalCaseModelSerializer):
"""订单序列化器(含订单项)"""
Items = serializers.SerializerMethodField()
OrderStatusText = serializers.SerializerMethodField()
def get_Items(self, obj):
items = obj.items.all()
return ShopOrderItemSerializer(items, many=True).data
def get_OrderStatusText(self, obj):
return obj.get_OrderStatus_display() if hasattr(obj, 'get_OrderStatus_display') else None
class Meta:
model = ShopOrder
fields = '__all__'