class OTPSchema(Schema): """ OTP Verification API Schema """ mobile = fields.Number(required=True) otp = fields.Number(required=True) gender = fields.String(required=False, allow_none=True) email = fields.String(required=False, allow_none=True)
class AccountSchema(Schema): """ AccountSchema """ item_id = fields.String(attribute='item.item_id') updated = fields.String(attribute='item.updated') current_balance = fields.Number() available_balance = fields.Number() account_id = fields.String(required=False, allow_none=True) official_name = fields.String(required=False, allow_none=True) currency = fields.String(required=False, allow_none=True) type = fields.String(required=False, allow_none=True) subtype = fields.String(required=False, allow_none=True) transactions = fields.Method('get_transaction') def get_transaction(self, instance, **kwargs): return TransactionSchema().dump(instance.transaction_account.all(),many=True)
class LoginSchema(Schema): """ User API Schema """ name = fields.String(required=True) mobile = fields.Number(required=True) @validates("mobile") def validates_mobile(self, value): if not valid_mobile_number(value): raise InvalidDataException("Not a valid mobile Number") @post_load def post_processing(self, data, **kwargs): data['otp'] = create_otp() data['existing_user'] = not User.objects.filter( mobile=data['mobile']).exists() return data
class TransactionSchema(Schema): """ Account Schema category = models.ManyToManyField(TransactionCategory, blank=True, null=True) """ name = fields.String() transaction_id = fields.String() pending_transaction_id = fields.String() transaction_type = fields.String() currency = fields.String() date = fields.Date() authorized_date = fields.Date() pending = fields.Boolean() amount = fields.Number() categories = fields.Method('get_categories') def get_categories(self, instance, **kwargs): categories = [x['name'] for x in list(instance.category.all().values('name'))] return categories
class TokenSchema(Schema): """ OTP Verification API Schema """ token = fields.Number(required=True, read_only=True)