171 lines
4.5 KiB
Python
171 lines
4.5 KiB
Python
"""模块: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__'
|