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:
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():
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):
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
}
}