src/cluster_erp/modules/app_store/ içindeki app_store modülü bir platform modülüdür. Satılabilir uygulamaların kataloğunu, yüklenen lisansı, hangi rollerin hangi uygulamayı kullanabileceğini, kullanıcıların uygulama isteklerini ve kurulumun hangi uygulamaları yüklediğini tutar. Yöneticiler onu mağaza ve uygulama yöneticisi uygulamalarıyla yönetir; her kullanıcının başlatıcısı onun kayıt defterinden çizilir. Diğer modüllerin API'leri üzerindeki uygulama server/entitlements.py içindedir ve uygulama mağazası lisansları ve hakları sayfasında açıklanır.
Bir bakışta¶
| Öğe | Değer | Kaynak |
|---|---|---|
| Paket | src/cluster_erp/modules/app_store/ |
klasör |
| Modül sınıfı | Module |
src/cluster_erp/modules/app_store/module.py:18 |
name / version |
app_store / 0.1.0 |
src/cluster_erp/modules/app_store/module.py:26-32 |
| API öneki | /api/v1/app_store (ModuleBase.api_prefix) |
src/cluster_erp/core/module_base.py:37-38, src/cluster_erp/modules/app_store/module.py:54-57 |
| Alt modüller | 0; license.py, models.py, routes.py, services.py ve catalog.json içeren düz bir modül |
klasör listesi |
| Tablolar | 5: app_store_apps, app_store_licenses, app_store_assignments, app_store_requests, app_store_installs |
src/cluster_erp/modules/app_store/models.py:32-138 |
| Metadata'daki varlıklar | 0; kenar çubuğu içeriği yok | src/cluster_erp/modules/app_store/module.py:65-79 |
| Web uygulamasında yeri | Katalogda store, app-library ve app-manager sistem uygulamaları; webapp/store/ içinde galeri klasörleri |
src/cluster_erp/modules/app_store/catalog.json |
| Masaüstünde yeri | yok; src/cluster_erp/desktop/modules/ içinde klasör yok |
klasör |
Modül ne yapar¶
- Katalog tablosunu her açılışta gelen
catalog.jsondosyasına yakınsatır ve ilk açılışta yeni uygulamaları yükler (src/cluster_erp/modules/app_store/module.py:38-52,src/cluster_erp/modules/app_store/services.py:91-135). - Her kullanıcının kayıt defterini sunar: her etkin uygulama hak, kurulum, koltuk ve yeniden onay durumuyla (
src/cluster_erp/modules/app_store/routes.py:18-39). - Lisansı saklar ve yeniden doğrular (
src/cluster_erp/modules/app_store/services.py:191-265). - Rol koltuk kurallarını ve uygulama isteklerini tutar (
src/cluster_erp/modules/app_store/services.py:267-361). - Uygulamaları yükler, yeniden onaylar ve kaldırır (
src/cluster_erp/modules/app_store/services.py:169-189). - Uygulama başına JavaScript paketlerini bir katman denetiminden sonra
gated_apps/içinden sunar (src/cluster_erp/modules/app_store/routes.py:95-155).
Alt modüller¶
| Alt modül | Amaç | Ana varlıklar | Yönlendirici | Kaynak |
|---|---|---|---|---|
| yok (düz modül) | Katalog, lisans, koltuklar, istekler, kurulumlar | StoreApp, AppLicense, AppAssignment, AppRequest, AppInstall |
/api/v1/app_store |
src/cluster_erp/modules/app_store/routes.py (router) |
Veri modeli¶
| Varlık | Tablo | Anahtar alanlar | Notlar | Kaynak |
|---|---|---|---|---|
StoreApp |
app_store_apps |
app_key, enabled, sort, manifest |
manifest etiketleri, ekran bağlantısını ve kapsanan modülleri taşıyan JSONB'dir |
src/cluster_erp/modules/app_store/models.py:14-52 |
AppLicense |
app_store_licenses |
raw_text, licensee, status_cache, last_seen_at |
en yeni canlı satır geçerlidir | src/cluster_erp/modules/app_store/models.py:55-75 |
AppAssignment |
app_store_assignments |
app_key, role_id, intent |
canlı satırlar arasında benzersiz (app_key, role_id) |
src/cluster_erp/modules/app_store/models.py:77-104 |
AppRequest |
app_store_requests |
app_key, requested_by, status, decided_by, decision_reason |
src/cluster_erp/modules/app_store/models.py:107-120 |
|
AppInstall |
app_store_installs |
app_key, status, app_version, consented_modules |
canlı satırlar arasında benzersiz app_key |
src/cluster_erp/modules/app_store/models.py:123-162 |
Katalog, 6'sı sistem uygulaması olmak üzere 28 uygulama tutar; catalog.json girdilerinden sayıldı.
Ekranlar ve metadata¶
Modül metadata varlığı bildirmez; yüzeyleri metadata ekranları değil, özel uygulamalardır (src/cluster_erp/modules/app_store/module.py:65-79). Lisans kartı Lisans Durumu (webapp/i18n/tr.json anahtarı license.status_title), mağaza ise lisanssız bir uygulama için Lisans gerekli (webapp/i18n/tr.json anahtarı store.license_needed) gösterir. İstemci kodu korunan uygulama paketleri sayfasında belgelenir.
Durumlar ve aksiyonlar¶
| Kayıt | Değerler | Kaynak |
|---|---|---|
| Lisans durumu | none, invalid, active, grace, read_only |
src/cluster_erp/modules/app_store/license.py:9-14 |
AppInstall.status |
installed, uninstalled |
src/cluster_erp/modules/app_store/services.py:169-189 |
AppRequest.status |
pending, approved, denied |
src/cluster_erp/modules/app_store/models.py:114-116, src/cluster_erp/modules/app_store/services.py:352 |
AppAssignment.intent |
required, available, blocked |
src/cluster_erp/modules/app_store/services.py:282 |
| Aksiyon | Etiket | Koşul | Uç | İzin | Kaynak |
|---|---|---|---|---|---|
| lisans yükleme | Yükle ve Doğrula (license.upload) |
lisanslama devrede; belge doğrulanır | POST /api/v1/app_store/license |
license.manage |
src/cluster_erp/modules/app_store/routes.py:71-82 |
| lisans kaldırma | metadata'da yok | bir lisans var | DELETE /api/v1/app_store/license |
license.manage |
src/cluster_erp/modules/app_store/routes.py:85-92 |
| uygulama isteme | metadata'da yok | kimliği doğrulanmış | POST /api/v1/app_store/apps/{app_key}/request |
yalnızca kimlik doğrulama | src/cluster_erp/modules/app_store/routes.py:184-191 |
| isteğe karar | metadata'da yok | istek pending |
POST /api/v1/app_store/requests/{request_id}/decide |
store_app.assign |
src/cluster_erp/modules/app_store/routes.py:228-264 |
| yükleme, yeniden onay | metadata'da yok | bilinen uygulama; yeniden onay installed ister |
POST /api/v1/app_store/apps/{app_key}/install, /reconsent |
store_app.install |
src/cluster_erp/modules/app_store/routes.py:267-285 |
| kaldırma | metadata'da yok | sistem uygulaması değil | POST /api/v1/app_store/apps/{app_key}/uninstall |
store_app.uninstall |
src/cluster_erp/modules/app_store/routes.py:288-295 |
İş kuralları¶
- Kullanıcının rollerinden birindeki
blockedkoltuk kuralı kazanır; herhangi birrequiredveyaavailablekuralı varsa uygulamayı yalnızca o roller alır; kuralı olmayan bir uygulama açıktır (src/cluster_erp/modules/app_store/services.py:23-47). - Bir uygulama isteğini onaylamak, uygulamayı isteyenin her canlı rolü için
availableyapar (src/cluster_erp/modules/app_store/services.py:357-361,src/cluster_erp/modules/app_store/routes.py:243-252). - Yeniden tohumlama, bir operatörün satıştan çektiği bir uygulamayı asla yeniden etkinleştirmez (
src/cluster_erp/modules/app_store/services.py:91-99). - Değiştirilen veya kaldırılan bir lisans pasifleştirilmiş satır olarak kalır (
src/cluster_erp/modules/app_store/services.py:246-265).
Olaylar ve sorgular¶
Modül hiçbir EventBus işleyicisi kaydetmez (src/cluster_erp/modules/app_store/module.py:59-60). Rol kimliklerini modules/auth/guards.py içindeki role_ids_for ile okur (src/cluster_erp/modules/app_store/routes.py:250-252).
| Yön | Sözleşme sınıfı | İşleyici veya yayan | Kaynak |
|---|---|---|---|
| yok | yok | yok | src/cluster_erp/modules/app_store/module.py:59-60 |
Yetkiler¶
| İzin anahtarı | Kullanan | Kaynak |
|---|---|---|
license.manage |
lisans yükleme ve kaldırma | src/cluster_erp/modules/app_store/routes.py:71-92 |
store_app.assign |
atamalar, istek listesi, istek kararı | src/cluster_erp/modules/app_store/routes.py:158-264 |
store_app.install |
yükleme ve yeniden onay | src/cluster_erp/modules/app_store/routes.py:267-285 |
store_app.uninstall |
kaldırma | src/cluster_erp/modules/app_store/routes.py:288-295 |
Dört kod ek kodlar olarak tohumlanır (src/cluster_erp/server/app.py:801-807). Kayıt defteri, lisans okuma, varlık ucu ve uygulama istekleri yalnızca kimlik doğrulama ister (src/cluster_erp/modules/app_store/routes.py:18-66, src/cluster_erp/modules/app_store/routes.py:103-110).
Gizlilik, saklama ve geçmiş¶
Modül istekler ve atamalardaki kullanıcı ve rol kimlikleri dışında kişisel veri tutmaz; privacy_handlers.py dosyası yoktur. Tüm tablolar BaseModel sınıfından türer; bu yüzden değişiklikleri değişiklik geçmişindedir; bkz. değişiklik geçmişi.
Analitik olguları¶
Bu modülün analytics_facts.py dosyası yoktur.
Ayarlar ve başvuru verileri¶
license_public_key lisanslamayı devreye alır; boşken her katalog uygulamasına hak verilir (src/cluster_erp/config/settings.py:566-569). Kataloğun kendisi catalog.json içindeki satıcı verisidir (src/cluster_erp/modules/app_store/services.py:50-63).
Testler¶
tests/ ve web-client/ içinde dosya adıyla bulundu.
| Tür | Dosya | Kapsam |
|---|---|---|
| pytest | tests/test_entitlement_stamp.py |
hak belleği sürüm damgası (2 test) |
| pytest | tests/test_store_catalog_assets.py |
katalog ekran görüntüleri ve açıklamaları (4 test) |
| e2e | web-client/_e2e_app_store.mjs, web-client/_e2e_store.mjs, web-client/_e2e_store_uibook.mjs |
mağaza ve uygulama yöneticisi |
| e2e | web-client/_e2e_license.mjs |
lisans yükleme ve durumları |
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| app request | AppRequest |
Bir kullanıcının bir uygulamada koltuk verilmesi isteği. | uygulama isteği | src/cluster_erp/modules/app_store/models.py:107 |
| system app | manifest.system |
Her zaman hakkı olan ve kaldırılamayan katalog uygulaması. | sistem uygulaması | src/cluster_erp/modules/app_store/services.py:182-189 |
İlgili sayfalar¶
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.