Backend Geliştirme (Kotlin)
🚀 Eklenti Yaşam Döngüsü ve Bağlam
Eklentiler PanoPlugin sınıfını genişletir. Temel bağlamlar şunlardır:
applicationContext: Pano'nun ana DI bağlamı.pluginBeanContext: Eklenti içi bean'leri yönetir.pluginGlobalBeanContext: Farklı eklentiler arasında bean paylaşımı yapar.
Kurulum Etkileşimi
Veritabanı ağırlıklı işlemleri başlatmadan önce kurulumun tamamlanmasını bekleyin.
Olay İşleyici Örneği:
kotlin
@EventListener
class SetupEventHandler(private val plugin: YourPlugin): SetupEventListener {
override suspend fun onSetupFinished() {
if (plugin.pluginState == PluginState.STARTED) {
plugin.startPlugin()
}
}
}Ana Eklenti Sınıfı Yöntemleri:
kotlin
override suspend fun onStart() {
if (!setupManager.isSetupDone()) {
return // SetupEventHandler'ı bekle
}
startPlugin()
}
override suspend fun onUninstall() {
pluginDatabaseManager.uninstall(this)
}🗄️ Veritabanı ve Modeller
- Paket Yapısı:
db/daos/,db/impl/,db/models/,db/migrations/. - Anotasyonlar:
@DBEntity(modeller),@Migration(sürümlü değişiklikler),@Dao(uygulamalar). - İsimlendirme Kuralı: DAO ve Model isimlerini benzer tutun (örn:
AnnouncementModelveAnnouncementDao). - Uygulama: Soyut Dao sınıflarını genişletin ve model sınıfını sağlayın.
uninstallmantığının uygulandığından emin olun.
🛣️ API ve Yönlendirme
- Konum:
routes/paketi. - Türler:
PanelApi(yönetici),LoggedInApi(kimliği doğrulanmış kullanıcılar). - Doğrulama:
- Doğrulama işleyicileri zorunludur.
:idgibi yol değişkenlerini kullanın.- Şema tabanlı nesneler için
required bodybelirtin.
- İzinler:
applicationContextiçindekiauthProvider'ı kullanın. - Etkinlik Kayıtları: Tüm Panel API'leri mutlaka etkinlik kayıtları tanımlamalıdır.
- Hata Yönetimi: Yerleşik hataları (
com.panomc.platform.error) tercih edin. Özel hatalarıerror/içindecom.panomc.platform.model.Errorsınıfını genişleterek tanımlayın.
🔐 İzinler ve Yapılandırma
- İzinler:
permission/paketinde tanımlayın,@PermissionDefinitionilePanelPermissionsınıfını genişletin.- İkon:
PanelPermissionkurucusuna bir FontAwesome ikon adı sağlayın (örn:PanelPermission("fa-question-circle")). - Node: İzin nodedu, sınıf adından otomatik olarak oluşturulur (örn:
ManageFAQPermission->MANAGE_FAQ).
- İkon:
İzin Tanımlama Örneği:
kotlin
@PermissionDefinition
class ManageFAQPermission : PanelPermission("fa-question-circle")java
@PermissionDefinition
public class ManageFAQPermission extends PanelPermission {
public ManageFAQPermission() {
super("fa-question-circle");
}
}- Yapılandırma:
PluginConfigManagerkullanın.- Genel ayarları Config sınıflarında tutun.
- Önce Enum: Tip güvenliği için statik dizeler yerine Enum kullanın.