Skip to content

Commit

Permalink
add Billing
Browse files Browse the repository at this point in the history
  • Loading branch information
Boris Averin committed Mar 10, 2023
1 parent 8843559 commit 050c4a6
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 0 deletions.
56 changes: 56 additions & 0 deletions common/exceptions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
from rest_framework import serializers, status

class ErrorSerializer(serializers.Serializer):
"""Бизнес-ошибка"""

error_code = serializers.CharField(
help_text='Код ошибки',
required=True,
max_length=40,
)
error_message = serializers.CharField(
help_text='Краткое описание ошибки',
required=True,
max_length=255,
)

def update(self, instance, validated_data):
pass

def create(self, validated_data):
pass


class ErrorResponseSerializer(serializers.Serializer):
"""Стандартная ошибка"""

error = ErrorSerializer()

def update(self, instance, validated_data):
pass

def create(self, validated_data):
pass


class APIExceptionBase(Exception):

status_code: int

def __init__(self, message: str, code: str):
if not self.status_code:
raise NotImplementedError('status_code is not set')

self.serializer = ErrorResponseSerializer(
{
'error': {
'error_code': code,
'error_message': message,
},
}
)


class BadRequest(APIExceptionBase):

status_code = status.HTTP_400_BAD_REQUEST
46 changes: 46 additions & 0 deletions finance/migrations/0005_application_applicationlog.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Generated by Django 3.2.4 on 2023-03-02 20:27

import django.core.validators
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('finance', '0004_add_currency_data'),
]

operations = [
migrations.CreateModel(
name='Application',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(auto_now_add=True)),
('last_updated', models.DateTimeField(auto_now=True)),
('payment_id', models.UUIDField(blank=True, editable=False, null=True, unique=True, verbose_name='Id платежа')),
('amount', models.DecimalField(decimal_places=2, default=0, max_digits=11, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Сумма')),
('type', models.CharField(choices=[('refill', 'Ввод'), ('withdrawal', 'Вывод')], max_length=20, verbose_name='Тип платежа')),
('status', models.CharField(choices=[('pending', 'В обработке'), ('waiting_for_capture', 'К зачислению'), ('cancelled', 'Отменено'), ('completed', 'Выполнено'), ('error', 'Ошибка')], max_length=20, verbose_name='Статус')),
('error', models.CharField(blank=True, max_length=3000, null=True, verbose_name='Ошибка')),
('account', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='finance.account', verbose_name='Счет')),
('currency', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='finance.currency', verbose_name='Валюта')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='ApplicationLog',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(auto_now_add=True)),
('last_updated', models.DateTimeField(auto_now=True)),
('status', models.CharField(choices=[('pending', 'В обработке'), ('waiting_for_capture', 'К зачислению'), ('cancelled', 'Отменено'), ('completed', 'Выполнено'), ('error', 'Ошибка')], max_length=20, verbose_name='Статус')),
('application', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='finance.application', verbose_name='Заявка')),
],
options={
'abstract': False,
},
),
]

0 comments on commit 050c4a6

Please sign in to comment.