Добавка Приложение

Въведение

Приложенията за добавки се изграждат от класове, които наследяват интерфейса ITfApplicationAddon. Tefter.bg сканира за тези класове при стартиране и ги прави достъпни за потребителите.

Приложенията за добавки също изискват типизирани компоненти за техния жизнен цикъл. Обикновено приложенията за добавки създават свои собствени таблици в базата данни за съхранение и управление на своите данни.

Стандартният процес за създаване и разпространение на приложение за Tefter.bg включва разработване на Razor библиотечен проект и след това разпространение на резултата като NuGet пакет. За практически примери можете да прегледате проектите на съществуващи доставчици, създадени от нас, като:

Seed Project GitHub
Talk Application GitHub
Asset Application GitHub

Проект на приложението

Обичайната структура на проектите е следната:

Data provider project

Клас на приложение

Това е обичайната структура на метода и неговите свойства и методи за обратно извикване.

namespace WebVella.Tefter.Seeds.SampleApplication;

public class SampleApp : ITfApplicationAddon
{
	public const string ID = "1492d19b-c8b2-4abb-9e88-2b645ba518ff";
	public const string NAME = "Sample Application";
	public const string DESCRIPTION = "Sample Application Description";
	public const string FLUENT_ICON_NAME = "Album";

	public Guid Id { get; init;} =  new Guid(ID);
	public string Name { get; init;} =  NAME;
	public string Description { get; init;} =  DESCRIPTION;
	public string FluentIconName { get; init;} =  FLUENT_ICON_NAME;

	public void OnStart()
	{
	}

	public void OnRegisterDependencyInjections(IServiceCollection services)
	{
		services.AddSingleton<ISampleAppService, SampleAppService>();
	}
}

Миграции на данни

Тъй като приложенията за добавки могат да имат свои собствени таблици с данни, миграциите се използват за създаване и управление на тези таблици в различни версии.

Типичен клас за миграция трябва да наследи интерфейса ITfApplicationMigration и да има атрибут на клас TfApplicationMigration.

Тези класове се откриват и изпълняват по време на фазата на стартиране на програмата, във възходящ ред въз основа на низа на версията, дефиниран в атрибута.

Ето пример за такава миграция:

using Microsoft.Extensions.DependencyInjection;
namespace WebVella.Tefter.Seeds.SampleApplication.Migrations;

[TfApplicationMigration(SampleApp.ID, "2025.04.04.01")]
public class SampleAppMigration2025040401 : ITfApplicationMigration
{
	public Task MigrateDataAsync(ITfApplicationAddon app, IServiceProvider serviceProvider, ITfDatabaseService dbService)
	{
		ISampleAppService sampleAppService = serviceProvider.GetService<ISampleAppService>();

		sampleAppService.AddNote("Test note 1");
		sampleAppService.AddNote("Test note 2");
		sampleAppService.AddNote("Test note 3");

		return Task.CompletedTask;
	}

	public Task MigrateStructureAsync(ITfApplicationAddon app, TfDatabaseBuilder dbBuilder)
	{
		dbBuilder
			.NewTableBuilder(Guid.NewGuid(), "sample_app_notes")
			.WithColumns(columns =>
			{
				columns
					.AddGuidColumn("id", c => { c.WithAutoDefaultValue().NotNullable(); })
					.AddShortTextColumn("note_text", c => { c.NotNullable().WithDefaultValue(""); })
					.AddDateTimeColumn("created_on", c => { c.WithDefaultValue(DateTime.UtcNow); });
			})
			.WithConstraints(constraints =>
			{
				constraints
					.AddPrimaryKeyConstraint("pk_sample_app_note_id", c => { c.WithColumns("id"); });
			});


		return Task.CompletedTask;
	}
}

Област страниця

Този компонент позволява приложение да бъде интегрирано в страници на пространство, като позволява на приложението да има собствен тип страница в навигацията на пространството. Той трябва да наследи интерфейса ITfSpacePageAddon. Прочети повече.

Административна и Табло страница

Този компонент позволява на приложение да инжектира собствена административна или обща страница на таблото за управление. За страница на административен панел той трябва да наследи интерфейса ITfScreenRegionComponent<TfAdminPageComponentContext>, а за публична страница на таблото за управление интерфейсът е ITfScreenRegionComponent<TfPageComponentContext>. Прочети повече.

Тип колона на изглед

Ако имате нужда от конкретна селекция на данни в изгледа на пространството, това е начинът. Прочети повече

Компоненти на колона на изглед

Ако имате нужда от специфично представяне на данни в изгледа на пространството, това е начинът.Прочети повече