Přeskočit obsah

Přidání nové funkcionality

Postup pro přidání typické funkcionality do systému EVA.


Přidání nového API endpointu

1. Entita (Eva.Data)

Pokud je potřeba nová entita:

// Eva.Data/Models/NewEntity.cs
[Table("NewEntity", Schema = "dbo")]
public class NewEntity
{
    public long OID { get; set; }
    public string Name { get; set; } = "";
    public bool Deleted { get; set; }
}

Přidejte DbSet do EvaDataContext:

public DbSet<NewEntity> NewEntities { get; set; }

Vygenerujte a aplikujte EF Core migraci:

dotnet ef migrations add AddNewEntity --project src/Eva.Data --startup-project src/Eva.Mobile.WebApi
dotnet ef database update --project src/Eva.Data --startup-project src/Eva.Mobile.WebApi

2. Datová služba (Eva.Data)

// Eva.Data/Services/NewEntityDataService.cs
public interface INewEntityDataService : IBaseDataService<NewEntity> { }

public class NewEntityDataService
    : BaseDataService<NewEntity>, INewEntityDataService
{
    public NewEntityDataService(IDbContextFactory<EvaDataContext> factory) : base(factory) { }
}

Zaregistrujte v AddEvaDataServices():

services.AddScoped<INewEntityDataService, NewEntityDataService>();

3. Controller (Eva.Mobile.WebApi)

// Eva.Mobile.WebApi/Controllers/NewEntityController.cs
[Route("api/[controller]")]
[ApiController]
public class NewEntityController : BaseApiController
{
    private readonly INewEntityDataService _service;

    public NewEntityController(INewEntityDataService service)
        => _service = service;

    [HttpGet]
    public async Task<IActionResult> GetAll()
    {
        var items = await _service.GetAllAsync();
        return Ok(items);
    }

    [HttpPost]
    public async Task<IActionResult> Create(NewEntity entity)
    {
        var created = await _service.CreateAsync(entity);
        return CreatedAtAction(nameof(GetAll), new { id = created.OID }, created);
    }
}

Přidání Blazor stránky (Eva.Manager)

1. Stránka

@* Eva.Manager/Components/Pages/NewFeature/NewFeaturePage.razor *@
@page "/new-feature"
@attribute [Authorize(Roles = "Admin,Manager")]
@inject INewEntityDataService Service

<h3>Nová funkce</h3>

<DxGrid Data="@_items">
    <Columns>
        <DxGridDataColumn FieldName="Name" Caption="Název" />
    </Columns>
</DxGrid>

@code {
    private IEnumerable<NewEntity>? _items;

    protected override async Task OnInitializedAsync()
    {
        _items = await Service.GetAllAsync();
    }
}

2. Přidání do navigace

Upravte menu.json (a jazykové varianty):

{
  "text": "Nová funkce",
  "url": "/new-feature",
  "icon": "dx-icon-edit"
}


Přidání MAUI obrazovky (Eva.Mobile)

1. View (XAML)

<!-- Eva.Mobile/Views/NewFeatureView.xaml -->
<ContentPage xmlns="..."
             x:Class="Eva.Mobile.Views.NewFeatureView"
             Style="{StaticResource AppContentPage}">
    <Label Text="{Binding Title}" />
</ContentPage>

2. ViewModel

// Eva.Mobile/ViewModels/NewFeatureViewModel.cs
[ObservableObject]
public partial class NewFeatureViewModel
{
    [ObservableProperty]
    private string _title = "Nová funkce";

    [RelayCommand]
    private async Task LoadAsync()
    {
        // Načtení dat přes RestService
    }
}

3. Registrace v AppShell.xaml a MauiProgram.cs

<ShellContent Title="New Feature" ContentTemplate="{DataTemplate v:NewFeatureView}" />
builder.Services.AddTransient<NewFeatureView>();
builder.Services.AddTransient<NewFeatureViewModel>();