Skip to content

KingeKod/custom-validation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Скоринговая платформа — API

HTTP-сервер на Python (без внешних зависимостей) для расчёта скорингового балла и получения интересов клиентов.

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

Файл Описание
api.py Основной файл сервера (с type hints)
scoring.py Логика расчёта счёта и интересов
test.py Юнит-тесты

Запуск сервера

# Запуск на порту 8080 (по умолчанию)
python api.py

# Запуск на указанном порту с логированием
python api.py --port 9000 --log logs/main.log

Сервер слушает localhost на указанном порту.

Тесты

python test.py

API

Единственная точка входа: POST /method

Общая структура запроса

{
    "account": "string",
    "login": "string",
    "token": "string",
    "method": "string",
    "arguments": {}
}

Аутентификация

Токен — SHA-512 хеш, зависит от типа пользователя:

  • Обычный пользователь: sha512(account + login + "Otus")
  • Администратор (login = "admin"): sha512(YYYYmmddHH + "42"), где YYYYmmddHH — текущее время с точностью до часа

Доступные методы

online_score — расчёт скорингового балла

arguments:

Поле Тип Описание
phone str / int Телефон, 11 символов, начинается с 7
email str Email (должен содержать @)
birthday str Дата в формате DD.MM.YYYY (не старше 70 лет)
gender int 0 — неизвестен, 1 — мужской, 2 — женский
first_name str Имя
last_name str Фамилия

Требуется хотя бы одна пара: phone+email, first_name+last_name или gender+birthday.

Ответ:

{
    "response": { "score": 3.0 },
    "code": 200
}

clients_interests — интересы клиентов

arguments:

Поле Тип Описание
client_ids int[] Список ID клиентов (обязательно)
date str Дата в формате DD.MM.YYYY (опционально)

Ответ:

{
    "response": {
        "1": ["sport", "music"],
        "2": ["travel", "books"]
    },
    "code": 200
}

Примеры запросов

Генерация токена (Python)

import hashlib, datetime

# Обычный пользователь
token = hashlib.sha512(("horns&hoofs" + "h&f" + "Otus").encode()).hexdigest()

# Администратор
token = hashlib.sha512(datetime.datetime.now().strftime("%Y%m%d%H") + "42").hexdigest()

online_score (curl)

TOKEN=$(python3 -c "import hashlib; print(hashlib.sha512('horns&hoofsh&fOtus'.encode()).hexdigest())")

curl -X POST http://localhost:8080/method \
  -H "Content-Type: application/json" \
  -d "{
    \"account\": \"horns&hoofs\",
    \"login\": \"h&f\",
    \"token\": \"$TOKEN\",
    \"method\": \"online_score\",
    \"arguments\": {
      \"phone\": \"79175002040\",
      \"email\": \"user@otus.ru\"
    }
  }"

clients_interests (curl)

TOKEN=$(python3 -c "import hashlib; print(hashlib.sha512('horns&hoofsh&fOtus'.encode()).hexdigest())")

curl -X POST http://localhost:8080/method \
  -H "Content-Type: application/json" \
  -d "{
    \"account\": \"horns&hoofs\",
    \"login\": \"h&f\",
    \"token\": \"$TOKEN\",
    \"method\": \"clients_interests\",
    \"arguments\": {
      \"client_ids\": [1, 2, 3]
    }
  }"

Коды ответов

Код Значение
200 Успех
400 Неверный формат запроса
403 Ошибка аутентификации
404 Найдена неизвестная конечная точка
422 Ошибка валидации данных
500 Внутренняя ошибка сервера

About

Custom validation on python, attempt to realize pydentic on minimal

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages