# XML-Parser

Сервис для парсинга диаграмм баз данных и индексации их в векторной базе данных Milvus.

## Содержание
- [Обзор](#обзор)
- [Функционал](#функционал)
- [Установка](#установка)
- [Использование](#использование)
- [API Endpoints](#api-endpoints)
- [Конфигурация](#конфигурация)

## Обзор

XML-Parser предоставляет инструменты для анализа диаграмм баз данных, извлечения структурной информации и их индексации в векторной базе данных Milvus. \
Сервис поддерживает диаграммы в форматах DrawIO и DBeaver, извлекает таблицы, поля и отношения между ними, а затем преобразует эту информацию в векторный формат для эффективного семантического поиска.

Проект реализован как REST API с использованием фреймворка FastAPI, что обеспечивает высокую производительность и удобство использования.

## Функционал

- **Парсинг диаграмм DrawIO** - извлечение структуры таблиц и связей из стандартных XML-файлов DrawIO
- **Поддержка DBeaver** - обработка схем баз данных, экспортированных из DBeaver
- **Автоматическое определение формата** - интеллектуальное распознавание типа загруженной диаграммы
- **Извлечение метаданных** - получение информации о:
  - Именах таблиц и их полях
  - Первичных и внешних ключах (PK, FK)
  - Связях между таблицами
  - Типах данных полей
- **Индексация в Milvus** - создание векторов bm25 для полнотекстового поиска
- **Умное обновление** - приоритизация версий схем с большим количеством информации

## Установка

### Ручная установка

#### Сборка образа

```bash
make build
```

#### Запуск контейнера

```bash
make run
```

После выполнения сервис будет доступен по адресу http://localhost:8100

## Использование

После запуска сервиса, вы можете отправлять HTTP POST запросы на endpoint `/process-schema/` для обработки и индексации схем баз данных.

### Пример запроса

```bash
curl -X POST "http://localhost:8100/process-schema/" \
  -H "accept: application/json" \
  -H "Content-Type: multipart/form-data" \
  -F "file=@database_schema.xml;type=text/xml" \
  -F "project_name=my_database_project"
```

### Пример ответа

```json
{
  "status": "success",
  "message": "Схема успешно обработана и индексирована (обнаружен тип: drawio)",
  "project_name": "my_database_project",
  "tables_count": 12,
  "collection_name": "_my_database_project_xml",
  "inserted_count": 8,
  "updated_count": 4,
  "skipped_count": 0,
  "detected_schema_type": "drawio"
}
```

## API Endpoints

### Обработка схемы базы данных

**URL**: `/process-schema/`
**Метод**: POST

**Параметры запроса**:
- `file` (обязательный) - XML-файл с диаграммой базы данных (DrawIO или DBeaver)
- `project_name` (обязательный) - Имя проекта, используется для именования коллекции в Milvus

**Ответ**:
- `status` - Статус обработки (success/error)
- `message` - Информативное сообщение о результате
- `project_name` - Имя проекта
- `tables_count` - Количество обнаруженных таблиц
- `collection_name` - Имя созданной коллекции в Milvus
- `inserted_count` - Количество вставленных новых записей
- `updated_count` - Количество обновленных записей
- `skipped_count` - Количество пропущенных записей
- `detected_schema_type` - Обнаруженный тип схемы (drawio/dbeaver)

---

Если у вас возникнут вопросы или потребуется помощь, не стесняйтесь обращаться!