Přeskočit obsah

Průvodce vývojáře — Nastavení prostředí


Požadavky

Povinné

Nástroj Verze Ověření
.NET SDK 10.0+ dotnet --version
PostgreSQL 17 lokálně nebo Docker
Visual Studio 2022 17.12+ s MAUI workloadem
DevExpress 25.2.x licence nutná pro Eva.Manager

Volitelné

Nástroj Účel
JetBrains Rider Alternativní IDE
Docker Desktop Kontejnerizované spuštění
Postman / Bruno Testování API
pgAdmin / DBeaver Správa PostgreSQL

NuGet feedy

Projekt vyžaduje dva privátní NuGet feedy. Přidejte je do NuGet.Config nebo přes CLI:

# Bartech privátní feed
dotnet nuget add source https://baget.xtrace.cz/v3/index.json --name Bartech

# DevExpress feed (nahraďte TOKEN vaším licenčním tokenem)
dotnet nuget add source "https://nuget.devexpress.com/YOUR_TOKEN/api/v3/index.json" --name DevExpress

DevExpress licenční token získáte v DevExpress Customer Portal.

# Nastavení DevExpress licence (nutné pro build Eva.Manager)
# Windows
set DevExpress_License=VÁŠ_LICENČNÍ_KLÍČ

# Linux / macOS
export DevExpress_License=VÁŠ_LICENČNÍ_KLÍČ

Klonování a první build

git clone <url-repozitáře>
cd Eva.Mobile

# Obnovení NuGet balíčků
dotnet restore Eva.slnx

# Build celé solution
dotnet build Eva.slnx

Zdrojové kódy jsou v src/, solution soubory v kořeni repozitáře.


Konfigurace databáze

Varianta A — lokální PostgreSQL

  1. Vytvořte databázi eva_data
  2. Spusťte inicializační skripty z src/Eva.Database/install/ (v pořadí dle číslování)
  3. Zkopírujte appsettings.Development.template.json na appsettings.Development.json a upravte connection string:
{
  "ConnectionStrings": {
    "default": "Host=localhost;Port=5432;Database=eva_data;Username=postgres;Password=vaše_heslo"
  }
}

Varianta B — Docker databáze

docker build -f .docker/Dockerfile_DB -t eva-db .
docker run -d -p 5432:5432 --name eva-db eva-db

Spuštění projektů

# REST API (port 5000 / 5001)
dotnet run --project src/Eva.Mobile.WebApi/Eva.Mobile.WebApi.csproj

# Blazor Manager (port 5080)
dotnet run --project src/Eva.Manager/Eva.Manager.csproj

# MAUI — Android
dotnet build src/Eva.Mobile/Eva.Mobile.csproj -f net10.0-android

# MAUI — iOS
dotnet build src/Eva.Mobile/Eva.Mobile.csproj -f net10.0-ios

Swagger UI dostupné na: http://localhost:5000/swagger (jen Development)


Spuštění testů

# Všechny testy
dotnet test Eva.slnx

# Pouze Print testy
dotnet test src/Eva.Print.Tests/Eva.Print.Tests.csproj

# Konkrétní test
dotnet test src/Eva.Print.Tests/Eva.Print.Tests.csproj --filter "FullyQualifiedName~NázevTestu"

# API testy (integrační — ArticleTransfer, Inventory, Locations, TenantIsolation)
dotnet test tests/Eva.Mobile.WebApi.Tests/Eva.Mobile.WebApi.Tests.csproj

E2E Playwright testy (Eva.Manager.PlaywrightTests)

E2E testy vyžadují běžící Eva.Manager instanci a nainstalovaný Chromium:

# 1. Spusť Eva.Manager lokálně
dotnet run --project src/Eva.Manager/Eva.Manager.csproj

# 2. Nainstaluj Chromium (jednorázově po prvním buildu)
pwsh tests/Eva.Manager.PlaywrightTests/bin/Debug/net10.0/playwright.ps1 install chromium

# 3. Spusť E2E testy
dotnet test tests/Eva.Manager.PlaywrightTests/Eva.Manager.PlaywrightTests.csproj

# 4. Viditelný browser pro debugování — vytvoř testconfig.local.json
# {"Headless": false, "SlowMo": 100}

testconfig.local.json je vyloučen z gitu — slouží pro lokální override přihlašovacích údajů, URL a nastavení prohlížeče.

Pokryté scénáře: přihlášení, registrace tenanta + JoinCode flow, správa uživatelů (licence limit), správa dat (export JSON/CSV, import), report designer.


Celé prostředí přes Docker Compose

# Lokální vývoj — všechny 3 kontejnery (DB + API + Manager)
docker-compose up --build

# Produkční compose (bez Print)
docker-compose -f .docker/compose-EVA-xtdocker-deploy.yaml up -d

# Produkční compose (s Print service)
docker-compose -f .docker/compose-EVA-xtdocker-deploy_with_Print.yaml up -d

Lokalizace

Eva.Manager podporuje 5 jazyků: cs-CZ, en-US, de-DE, sk-SK (plus výchozí bez suffixu).

Resource soubory

Soubor Účel
Resource.resx + varianty Statické popisky UI — názvy sloupců, záhlaví, tlačítka
Messages.resx + varianty Dynamické zprávy — notifikace, validace, suggestion bublinky AI

Konvence klíčů

  • Klíče v Resource.resx odpovídají vzoru Entita_Pole nebo Akce_Kontext, např. Article_Name, Button_Save.
  • Klíče v Messages.resx odpovídají vzoru Oblast_Zprava, např. AiChat_SuggestionAssets.
  • Hardcoded texty v Razor stránkách nahrazujeme přes @localizer["KlicZResource"] nebo @localizer["KlicZMessages"].

Přidání nového lokalizačního klíče

  1. Přidejte klíč do Resource.resx (výchozí, cs-CZ).
  2. Přidejte překlad do Resource.en-US.resx, Resource.sk-SK.resx, Resource.de-DE.resx.
  3. Injectujte IStringLocalizer<Resource> do komponenty a použijte @localizer["VašKlíč"].

Dx-lang agent

Soubor .claude/skills/dx-lang.md definuje agenta pro automatizaci lokalizace hardcoded textů v Razor stránkách. Použijte ho pro hromadnou lokalizaci nových stránek.


AI Chat integrace

Eva.Manager obsahuje integrovaný AI chatbot na stránce /ai-chat. Detailní vývojářský průvodce je v souboru doc/ai_guide.md.

Přidání nového AI nástroje (stručný postup)

  1. Přidejte metodu do EvaAiFunctions.cs s atributem [Description("...")] na každém parametru.
  2. Zaregistrujte funkciEvaAiFunctions je singletons injektovaný do EvaToolsMiddleware; nová metoda se zaregistruje automaticky při použití reflexe.
  3. Aktualizujte systémový prompt — přidejte popis nástroje do EvaSystemPrompt.cs (sekce dostupných nástrojů).
  4. Otestujte — spusťte aplikaci, otevřete /ai-chat a ověřte volání nástroje v logu nebo v tabulce dbo.AiChatMessage.

Podrobnosti (popis parametrů, práce s EvaDocumentationService, konvence pojmenování) viz doc/ai_guide.md.