Goodlabour.ru (main) Index TheGame

TheGame:
GameScenario - Пт 06 июн 2025
thegame_keydb_php - Пт 06 июн 2025
The game scene(godot) - Пт 06 июн 2025
autopub - Пт 06 июн 2025
Remove Duplicates - Пт 06 июн 2025 22:11:05 MSK
Status Auto Update - Сб 07 июн 2025 18:10:33 MSK
KeyDB Status Control - 07.06.2025 18:55
EngineeringApproachВт 10 июн 2025 10:09:40 MSK
Последние:
BooksNetworkSecurityВт 10 июн 2025 12:06:13 MSK
platformВс 15 июн 2025 23:50:39 MSK
PostgreqGuru-1Пт 20 июн 2025 11:08:56 MSK
ErusevParsedownReadmeПт 20 июн 2025 11:21:28 MSK
file_descriptorsПт 17 окт 2025 18:26:39 MSK

Схема системы на текущем этапе

flowchart TB
    subgraph "GoodLabour Platform (Pre-Prod)"
        A[Apache2] --> B[Django]
        B --> C[PostgreSQL 15]
        B --> D[KeyDB]
        B --> E[Static Files]
        A -->|HTTPS| F[Клиент: React]
    end

    subgraph "Модули Python"
        B --> G[billing]
        B --> H[orders]
        B --> I[users]
        G --> J[services.py]
        G --> K[models.py]
    end

Структура проекта

/var/www/goodlabour/
├── .env
├── requirements.txt
├── manage.py
├── README.txt
├── goodlabour/
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── billing/
│   ├── services.py
│   ├── models.py
│   └── admin.py
├── orders/
│   ├── views.py
│   └── models.py
└── static/

Код для развертывания (bash)

#!/bin/bash

# Создаем папку и окружение
mkdir -p /var/www/goodlabour
cd /var/www/goodlabour
python3.11 -m venv venv
source venv/bin/activate

# Устанавливаем зависимости
cat > requirements.txt << EOF
Django==5.0
psycopg2-binary
redis
django-redis
django-admin-actions
EOF
pip install -r requirements.txt

# Создаем проект и модули
django-admin startproject goodlabour .
python manage.py startapp billing
python manage.py startapp orders

# Настраиваем базовые файлы
cat > billing/models.py << EOF
from django.db import models

class CommissionRule(models.Model):
    name = models.CharField("Название правила", max_length=100)
    customer_percent = models.DecimalField("Комиссия с заказчика (%)", max_digits=5, decimal_places=2, default=5.0)
    contractor_percent = models.DecimalField("Комиссия с исполнителя (%)", max_digits=5, decimal_places=2, default=5.0)
    is_active = models.BooleanField("Активно", default=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.name} (заказчик: {self.customer_percent}%, исполнитель: {self.contractor_percent}%)"
EOF

cat > billing/services.py << EOF
from decimal import Decimal
from .models import CommissionRule

def calculate_commission(amount: Decimal) -> dict:
    rule = CommissionRule.objects.filter(is_active=True).first()
    if not rule:
        raise ValueError("Нет активных правил комиссий")
    customer_fee = amount * (rule.customer_percent / Decimal(100))
    contractor_fee = amount * (rule.contractor_percent / Decimal(100))
    return {
        "customer_total": amount + customer_fee,
        "contractor_net": amount - contractor_fee,
        "platform_income": customer_fee + contractor_fee,
        "rule_id": rule.id
    }
EOF

# Создаем README
cat > README.txt << EOF
GoodLabour Platform (Pre-Prod)
=============================

1. Настройка:
   - Отредактируйте .env (DB, SECRET_KEY)
   - python manage.py migrate
   - python manage.py createsuperuser

2. Команды:
   - Запуск: python manage.py runserver 0.0.0.0:8000
   - Тесты: python manage.py test billing.tests

3. Админка:
   - /admin (логин из п.1)
   - Модель: CommissionRule - управление комиссиями

4. API:
   - POST /api/orders/create - создание заказа
   - GET /api/billing/commission - текущие правила
EOF

# Права
chmod -R 775 /var/www/goodlabour
echo "Проект развернут в /var/www/goodlabour"

Инструкция для инженера

  1. Развертывание:

    bash deploy.sh
  2. Настройка БД:

    echo "DATABASE_URL=postgres://user:pass@localhost:5432/goodlabour" > .env
  3. Запуск:

    source venv/bin/activate
    python manage.py migrate
    python manage.py runserver 0.0.0.0:8000
  4. Тестирование:

    curl -X POST http://localhost:8000/api/orders/create -H "Content-Type: application/json" -d '{"amount": 1000}'

Проверка работы

  1. Админка: http://server:8000/admin
  2. API-документация: http://server:8000/api/schema/swagger-ui/

Важно: Для продакшна замените runserver на Apache2 + mod_wsgi!