ZakirovT 057e1f526b init
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00
2026-01-22 00:45:41 +03:00

PerfReviewSummarizer

ASP.NET Minimal API приложение для анализа git-коммитов и формирования summary за период (квартал/полугодие).

Возможности

  • Чтение коммитов из локального git-репозитория
  • Анализ коммитов за указанный период (квартал, полугодие или произвольный период)
  • Автоматическая категоризация коммитов по типам изменений
  • Формирование статистики и summary
  • AI Summary с OpenAI - получение интеллектуального резюме через GPT
  • Веб-интерфейс для удобного взаимодействия с API
  • Swagger UI для документации и тестирования API

Технологии

  • .NET 10
  • ASP.NET Minimal API
  • LibGit2Sharp для работы с git
  • OpenAI API для генерации AI summaries

Запуск

  1. Убедитесь, что у вас установлен .NET 10 SDK

  2. Получите API ключ от OpenAI (опционально, только для AI Summary функции)

  3. Перейдите в директорию проекта:

    cd PerfReviewSummarizer.Api
    
  4. (Опционально) Добавьте OpenAI API ключ в appsettings.json:

    {
      "OpenAI": {
        "ApiKey": "your-openai-api-key-here"
      }
    }
    

    Или установите переменную окружения: OPENAI__APIKEY=your-api-key

  5. Запустите приложение:

    dotnet run
    

Приложение будет доступно по адресу http://localhost:5000 (или другому порту, указанному в launchSettings.json)

Веб-интерфейс будет доступен на главной странице (http://localhost:5000/) Swagger UI будет доступен по адресу http://localhost:5000/swagger

API Endpoints

POST /api/summary

Получить summary за период.

Тело запроса (JSON):

{
  "repositoryPath": ".",  // Путь к git репозиторию (опционально, по умолчанию текущая директория)
  "startDate": "2024-01-01",  // Начальная дата (опционально)
  "endDate": "2024-06-30",    // Конечная дата (опционально)
  "period": "quarter"         // Период: "quarter" или "halfyear" (опционально)
}

Пример запроса для текущего квартала:

{
  "period": "quarter"
}

Пример запроса для текущего полугодия:

{
  "period": "halfyear"
}

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

{
  "period": {
    "startDate": "2024-01-01T00:00:00",
    "endDate": "2024-03-31T00:00:00",
    "description": "С 2024-01-01 по 2024-03-31"
  },
  "stats": {
    "totalCommits": 150,
    "totalFilesChanged": 450,
    "totalAdditions": 5000,
    "totalDeletions": 2000,
    "uniqueContributors": 5
  },
  "categories": [
    {
      "category": "Новые функции",
      "description": "Разработка и добавление новых возможностей",
      "commitsCount": 45,
      "keyChanges": ["Добавлена авторизация", "Реализован поиск"]
    }
  ],
  "topCommits": [...]
}

POST /api/summary/ai

Получить AI Summary через OpenAI GPT

Генерирует интеллектуальное резюме на основе сообщений коммитов с использованием GPT.

Требует:

  • OpenAI API ключ в конфигурации

Тело запроса (JSON):

{
  "repositoryPath": ".",  // Путь к git репозиторию (опционально)
  "startDate": "2024-01-01",  // Начальная дата (опционально)
  "endDate": "2024-06-30",    // Конечная дата (опционально)
  "period": "quarter"         // Период: "quarter" или "halfyear" (опционально)
}

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

{
  "summary": "За текущий квартал была проведена значительная работа над новыми функциями...",
  "periodInfo": {
    "startDate": "2024-01-01T00:00:00",
    "endDate": "2024-03-31T00:00:00",
    "description": "С 2024-01-01 по 2024-03-31"
  },
  "commitsCount": 150,
  "commitMessages": ["Fix: исправлена ошибка авторизации", "Feat: добавлена поддержка двухфакторной авторизации", ...]
}

GET /api/commits

Получить список коммитов за период.

Query параметры:

  • repositoryPath (опционально) - путь к git репозиторию
  • startDate (опционально) - начальная дата
  • endDate (опционально) - конечная дата

Пример:

GET /api/commits?startDate=2024-01-01&endDate=2024-06-30

GET /health

Health check endpoint.

GET /

Информация об API и доступных endpoints.

Конфигурация

appsettings.json

Пример конфигурации:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "GitRepository": {
    "DefaultPath": "."
  },
  "OpenAI": {
    "ApiKey": "sk-... (ваш OpenAI API ключ)"
  }
}

Переменные окружения

Альтернативно, можно установить переменные окружения:

  • OPENAI__APIKEY - OpenAI API ключ
  • GITREPOSITORY__DEFAULTPATH - путь к репозиторию по умолчанию

Получение OpenAI API ключа

  1. Перейдите на https://platform.openai.com
  2. Создайте аккаунт или войдите в существующий
  3. Перейдите в раздел API keys
  4. Создайте новый ключ
  5. Скопируйте ключ и добавьте в конфигурацию приложения

Категории коммитов

Приложение автоматически категоризирует коммиты по следующим категориям:

  • Исправления ошибок - коммиты с fix/bug
  • Новые функции - коммиты с feat/add
  • Рефакторинг - улучшение структуры кода
  • Тестирование - добавление тестов
  • API изменения - изменения в API
  • UI изменения - изменения в интерфейсе
  • Конфигурация - изменения настроек
  • Документация - обновление документации
  • Оптимизация производительности - улучшение производительности
  • Безопасность - улучшения безопасности
  • Прочие изменения - остальные коммиты

Примеры использования

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

# Получить summary за текущий квартал
curl -X POST http://localhost:5000/api/summary \
  -H "Content-Type: application/json" \
  -d '{"period": "quarter"}'

# Получить AI Summary за квартал
curl -X POST http://localhost:5000/api/summary/ai \
  -H "Content-Type: application/json" \
  -d '{"period": "quarter"}'

# Получить summary за полугодие для конкретного репозитория
curl -X POST http://localhost:5000/api/summary \
  -H "Content-Type: application/json" \
  -d '{"repositoryPath": "C:/Projects/MyProject", "period": "halfyear"}'

# Получить коммиты за период
curl "http://localhost:5000/api/commits?startDate=2024-01-01&endDate=2024-06-30"

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

# Получить summary за квартал
$body = @{
    period = "quarter"
} | ConvertTo-Json

Invoke-RestMethod -Uri "http://localhost:5000/api/summary" -Method Post -Body $body -ContentType "application/json"

# Получить AI Summary за квартал
Invoke-RestMethod -Uri "http://localhost:5000/api/summary/ai" -Method Post -Body $body -ContentType "application/json"

Веб-интерфейс

Приложение включает удобный веб-интерфейс с двумя вкладками:

Traditional Summary

  • Форма для выбора параметров: путь к репозиторию, период анализа
  • Визуализация статистики: карточки с основными метриками (коммиты, файлы, строки)
  • Категории изменений: группировка коммитов по типам с описаниями
  • Топ коммитов: список самых значимых коммитов с детальной информацией

AI Summary (OpenAI)

  • Интеллектуальное резюме: анализ коммитов через GPT
  • Профессиональное описание: автоматическое описание работы за период
  • Быстрая обработка: получение summary в несколько секунд

Адаптивный дизайн: интерфейс работает на всех устройствах

Откройте http://localhost:5000/ в браузере после запуска приложения.

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

PerfReviewSummarizer/
├── PerfReviewSummarizer.Api/
│   ├── Models/          # Модели данных
│   │   ├── CommitInfo.cs
│   │   ├── SummaryRequest.cs
│   │   ├── SummaryResponse.cs
│   │   └── OpenAiSummaryRequest.cs (новое)
│   ├── Services/        # Сервисы
│   │   ├── IGitService.cs
│   │   ├── GitService.cs
│   │   ├── IOpenAiService.cs (новое)
│   │   └── OpenAiService.cs (новое)
│   ├── wwwroot/         # Статические файлы
│   │   ├── index.html   # Главная страница
│   │   ├── styles.css   # Стили
│   │   └── app.js       # JavaScript логика
│   ├── Program.cs       # Точка входа и настройка API
│   └── appsettings.json # Конфигурация
└── README.md

Что нового

Версия с OpenAI интеграцией

  • OpenAI GPT интеграция - использование GPT-4o-mini для генерации резюме
  • 🎯 AI Summary endpoint - новый POST /api/summary/ai endpoint
  • 📱 Улучшенный веб-интерфейс - вкладки для выбора типа анализа
  • 🎨 Стилизация AI результатов - специальное оформление для AI саммари
Description
No description provided
Readme 106 KiB
Languages
C# 56.1%
JavaScript 21.2%
CSS 11.6%
HTML 11.1%