django-cfg 1.2.31__py3-none-any.whl → 1.3.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/api/health/views.py +4 -2
  3. django_cfg/apps/knowbase/config/settings.py +16 -15
  4. django_cfg/apps/payments/README.md +326 -0
  5. django_cfg/apps/payments/admin/__init__.py +20 -10
  6. django_cfg/apps/payments/admin/api_keys_admin.py +521 -237
  7. django_cfg/apps/payments/admin/balance_admin.py +592 -297
  8. django_cfg/apps/payments/admin/currencies_admin.py +526 -222
  9. django_cfg/apps/payments/admin/filters.py +306 -199
  10. django_cfg/apps/payments/admin/payments_admin.py +465 -70
  11. django_cfg/apps/payments/admin/subscriptions_admin.py +578 -128
  12. django_cfg/apps/payments/admin_interface/__init__.py +18 -0
  13. django_cfg/apps/payments/admin_interface/templates/payments/base.html +162 -0
  14. django_cfg/apps/payments/admin_interface/templates/payments/components/dev_tool_card.html +38 -0
  15. django_cfg/apps/payments/admin_interface/templates/payments/components/loading_spinner.html +16 -0
  16. django_cfg/apps/payments/admin_interface/templates/payments/components/notification.html +27 -0
  17. django_cfg/apps/payments/admin_interface/templates/payments/components/provider_card.html +86 -0
  18. django_cfg/apps/payments/admin_interface/templates/payments/components/status_card.html +39 -0
  19. django_cfg/apps/payments/admin_interface/templates/payments/currency_converter.html +382 -0
  20. django_cfg/apps/payments/admin_interface/templates/payments/payment_dashboard.html +300 -0
  21. django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +303 -0
  22. django_cfg/apps/payments/admin_interface/templates/payments/payment_list.html +382 -0
  23. django_cfg/apps/payments/admin_interface/templates/payments/payment_status.html +500 -0
  24. django_cfg/apps/payments/admin_interface/templates/payments/webhook_dashboard.html +594 -0
  25. django_cfg/apps/payments/admin_interface/views/__init__.py +23 -0
  26. django_cfg/apps/payments/admin_interface/views/payment_views.py +259 -0
  27. django_cfg/apps/payments/admin_interface/views/webhook_dashboard.py +37 -0
  28. django_cfg/apps/payments/apps.py +34 -9
  29. django_cfg/apps/payments/config/__init__.py +28 -51
  30. django_cfg/apps/payments/config/constance/__init__.py +22 -0
  31. django_cfg/apps/payments/config/constance/config_service.py +123 -0
  32. django_cfg/apps/payments/config/constance/fields.py +69 -0
  33. django_cfg/apps/payments/config/constance/settings.py +160 -0
  34. django_cfg/apps/payments/config/django_cfg_integration.py +202 -0
  35. django_cfg/apps/payments/config/helpers.py +130 -0
  36. django_cfg/apps/payments/management/__init__.py +1 -3
  37. django_cfg/apps/payments/management/commands/__init__.py +1 -3
  38. django_cfg/apps/payments/management/commands/cleanup_expired_data.py +419 -0
  39. django_cfg/apps/payments/management/commands/currency_stats.py +297 -225
  40. django_cfg/apps/payments/management/commands/manage_currencies.py +303 -151
  41. django_cfg/apps/payments/management/commands/manage_providers.py +333 -160
  42. django_cfg/apps/payments/management/commands/process_pending_payments.py +357 -0
  43. django_cfg/apps/payments/management/commands/test_providers.py +434 -0
  44. django_cfg/apps/payments/middleware/__init__.py +3 -1
  45. django_cfg/apps/payments/middleware/api_access.py +329 -222
  46. django_cfg/apps/payments/middleware/rate_limiting.py +342 -152
  47. django_cfg/apps/payments/middleware/usage_tracking.py +249 -240
  48. django_cfg/apps/payments/migrations/0001_initial.py +708 -536
  49. django_cfg/apps/payments/models/__init__.py +13 -18
  50. django_cfg/apps/payments/models/api_keys.py +121 -43
  51. django_cfg/apps/payments/models/balance.py +153 -115
  52. django_cfg/apps/payments/models/base.py +68 -15
  53. django_cfg/apps/payments/models/currencies.py +172 -148
  54. django_cfg/apps/payments/models/managers/__init__.py +44 -0
  55. django_cfg/apps/payments/models/managers/api_key_managers.py +329 -0
  56. django_cfg/apps/payments/models/managers/balance_managers.py +599 -0
  57. django_cfg/apps/payments/models/managers/currency_managers.py +385 -0
  58. django_cfg/apps/payments/models/managers/payment_managers.py +511 -0
  59. django_cfg/apps/payments/models/managers/subscription_managers.py +641 -0
  60. django_cfg/apps/payments/models/payments.py +235 -285
  61. django_cfg/apps/payments/models/subscriptions.py +257 -177
  62. django_cfg/apps/payments/models/tariffs.py +147 -40
  63. django_cfg/apps/payments/services/__init__.py +209 -56
  64. django_cfg/apps/payments/services/cache/__init__.py +6 -6
  65. django_cfg/apps/payments/services/cache_service/__init__.py +143 -0
  66. django_cfg/apps/payments/services/cache_service/api_key_cache.py +37 -0
  67. django_cfg/apps/payments/services/{cache/base.py → cache_service/interfaces.py} +3 -1
  68. django_cfg/apps/payments/services/cache_service/keys.py +49 -0
  69. django_cfg/apps/payments/services/cache_service/rate_limit_cache.py +47 -0
  70. django_cfg/apps/payments/services/cache_service/simple_cache.py +101 -0
  71. django_cfg/apps/payments/services/core/__init__.py +10 -6
  72. django_cfg/apps/payments/services/core/balance_service.py +435 -360
  73. django_cfg/apps/payments/services/core/base.py +166 -0
  74. django_cfg/apps/payments/services/core/currency_service.py +478 -0
  75. django_cfg/apps/payments/services/core/payment_service.py +371 -465
  76. django_cfg/apps/payments/services/core/subscription_service.py +425 -481
  77. django_cfg/apps/payments/services/core/webhook_service.py +410 -0
  78. django_cfg/apps/payments/services/integrations/__init__.py +29 -0
  79. django_cfg/apps/payments/services/integrations/ngrok_service.py +47 -0
  80. django_cfg/apps/payments/services/integrations/providers_config.py +107 -0
  81. django_cfg/apps/payments/services/providers/__init__.py +9 -14
  82. django_cfg/apps/payments/services/providers/base.py +234 -174
  83. django_cfg/apps/payments/services/providers/nowpayments.py +478 -0
  84. django_cfg/apps/payments/services/providers/registry.py +367 -301
  85. django_cfg/apps/payments/services/types/__init__.py +78 -0
  86. django_cfg/apps/payments/services/types/data.py +177 -0
  87. django_cfg/apps/payments/services/types/requests.py +150 -0
  88. django_cfg/apps/payments/services/types/responses.py +156 -0
  89. django_cfg/apps/payments/services/types/webhooks.py +232 -0
  90. django_cfg/apps/payments/signals/__init__.py +33 -8
  91. django_cfg/apps/payments/signals/api_key_signals.py +210 -129
  92. django_cfg/apps/payments/signals/balance_signals.py +174 -0
  93. django_cfg/apps/payments/signals/payment_signals.py +128 -103
  94. django_cfg/apps/payments/signals/subscription_signals.py +194 -142
  95. django_cfg/apps/payments/static/payments/css/components.css +380 -0
  96. django_cfg/apps/payments/static/payments/css/dashboard.css +188 -0
  97. django_cfg/apps/payments/static/payments/js/components.js +545 -0
  98. django_cfg/apps/payments/static/payments/js/utils.js +412 -0
  99. django_cfg/apps/payments/templatetags/__init__.py +1 -1
  100. django_cfg/apps/payments/templatetags/payment_tags.py +466 -0
  101. django_cfg/apps/payments/urls.py +45 -48
  102. django_cfg/apps/payments/urls_admin.py +33 -42
  103. django_cfg/apps/payments/views/api/__init__.py +101 -0
  104. django_cfg/apps/payments/views/api/api_keys.py +387 -0
  105. django_cfg/apps/payments/views/api/balances.py +381 -0
  106. django_cfg/apps/payments/views/api/base.py +298 -0
  107. django_cfg/apps/payments/views/api/currencies.py +402 -0
  108. django_cfg/apps/payments/views/api/payments.py +415 -0
  109. django_cfg/apps/payments/views/api/subscriptions.py +475 -0
  110. django_cfg/apps/payments/views/api/webhooks.py +476 -0
  111. django_cfg/apps/payments/views/serializers/__init__.py +99 -0
  112. django_cfg/apps/payments/views/serializers/api_keys.py +424 -0
  113. django_cfg/apps/payments/views/serializers/balances.py +300 -0
  114. django_cfg/apps/payments/views/serializers/currencies.py +335 -0
  115. django_cfg/apps/payments/views/serializers/payments.py +387 -0
  116. django_cfg/apps/payments/views/serializers/subscriptions.py +429 -0
  117. django_cfg/apps/payments/views/serializers/webhooks.py +137 -0
  118. django_cfg/config.py +1 -1
  119. django_cfg/core/config.py +40 -4
  120. django_cfg/core/generation.py +25 -4
  121. django_cfg/core/integration/README.md +363 -0
  122. django_cfg/core/integration/__init__.py +47 -0
  123. django_cfg/core/integration/commands_collector.py +239 -0
  124. django_cfg/core/integration/display/__init__.py +15 -0
  125. django_cfg/core/integration/display/base.py +157 -0
  126. django_cfg/core/integration/display/ngrok.py +164 -0
  127. django_cfg/core/integration/display/startup.py +815 -0
  128. django_cfg/core/integration/url_integration.py +123 -0
  129. django_cfg/core/integration/version_checker.py +160 -0
  130. django_cfg/management/commands/auto_generate.py +4 -0
  131. django_cfg/management/commands/check_settings.py +6 -0
  132. django_cfg/management/commands/clear_constance.py +5 -2
  133. django_cfg/management/commands/create_token.py +6 -0
  134. django_cfg/management/commands/list_urls.py +6 -0
  135. django_cfg/management/commands/migrate_all.py +6 -0
  136. django_cfg/management/commands/migrator.py +3 -0
  137. django_cfg/management/commands/rundramatiq.py +6 -0
  138. django_cfg/management/commands/runserver_ngrok.py +51 -29
  139. django_cfg/management/commands/script.py +6 -0
  140. django_cfg/management/commands/show_config.py +12 -2
  141. django_cfg/management/commands/show_urls.py +4 -0
  142. django_cfg/management/commands/superuser.py +6 -0
  143. django_cfg/management/commands/task_clear.py +4 -1
  144. django_cfg/management/commands/task_status.py +3 -1
  145. django_cfg/management/commands/test_email.py +3 -0
  146. django_cfg/management/commands/test_telegram.py +6 -0
  147. django_cfg/management/commands/test_twilio.py +6 -0
  148. django_cfg/management/commands/tree.py +6 -0
  149. django_cfg/management/commands/validate_config.py +155 -149
  150. django_cfg/models/constance.py +31 -11
  151. django_cfg/models/payments.py +175 -492
  152. django_cfg/modules/django_logger.py +160 -146
  153. django_cfg/modules/django_unfold/dashboard.py +64 -16
  154. django_cfg/registry/core.py +1 -0
  155. django_cfg/template_archive/django_sample.zip +0 -0
  156. django_cfg/utils/smart_defaults.py +227 -570
  157. django_cfg/utils/toolkit.py +51 -11
  158. {django_cfg-1.2.31.dist-info → django_cfg-1.3.3.dist-info}/METADATA +4 -1
  159. {django_cfg-1.2.31.dist-info → django_cfg-1.3.3.dist-info}/RECORD +162 -185
  160. django_cfg/apps/payments/__init__.py +0 -8
  161. django_cfg/apps/payments/admin/tariffs_admin.py +0 -199
  162. django_cfg/apps/payments/config/module.py +0 -70
  163. django_cfg/apps/payments/config/providers.py +0 -105
  164. django_cfg/apps/payments/config/settings.py +0 -96
  165. django_cfg/apps/payments/config/utils.py +0 -52
  166. django_cfg/apps/payments/decorators.py +0 -291
  167. django_cfg/apps/payments/management/commands/README.md +0 -146
  168. django_cfg/apps/payments/managers/__init__.py +0 -23
  169. django_cfg/apps/payments/managers/api_key_manager.py +0 -35
  170. django_cfg/apps/payments/managers/balance_manager.py +0 -361
  171. django_cfg/apps/payments/managers/currency_manager.py +0 -306
  172. django_cfg/apps/payments/managers/payment_manager.py +0 -192
  173. django_cfg/apps/payments/managers/subscription_manager.py +0 -37
  174. django_cfg/apps/payments/managers/tariff_manager.py +0 -29
  175. django_cfg/apps/payments/migrations/0002_network_providercurrency_and_more.py +0 -241
  176. django_cfg/apps/payments/migrations/0003_add_usd_rate_cache.py +0 -30
  177. django_cfg/apps/payments/models/events.py +0 -73
  178. django_cfg/apps/payments/serializers/__init__.py +0 -57
  179. django_cfg/apps/payments/serializers/api_keys.py +0 -51
  180. django_cfg/apps/payments/serializers/balance.py +0 -59
  181. django_cfg/apps/payments/serializers/currencies.py +0 -63
  182. django_cfg/apps/payments/serializers/payments.py +0 -62
  183. django_cfg/apps/payments/serializers/subscriptions.py +0 -71
  184. django_cfg/apps/payments/serializers/tariffs.py +0 -56
  185. django_cfg/apps/payments/services/billing/__init__.py +0 -8
  186. django_cfg/apps/payments/services/cache/simple_cache.py +0 -135
  187. django_cfg/apps/payments/services/core/fallback_service.py +0 -432
  188. django_cfg/apps/payments/services/internal_types.py +0 -461
  189. django_cfg/apps/payments/services/middleware/__init__.py +0 -8
  190. django_cfg/apps/payments/services/monitoring/__init__.py +0 -22
  191. django_cfg/apps/payments/services/monitoring/api_schemas.py +0 -76
  192. django_cfg/apps/payments/services/monitoring/provider_health.py +0 -372
  193. django_cfg/apps/payments/services/providers/cryptapi/__init__.py +0 -4
  194. django_cfg/apps/payments/services/providers/cryptapi/config.py +0 -8
  195. django_cfg/apps/payments/services/providers/cryptapi/models.py +0 -192
  196. django_cfg/apps/payments/services/providers/cryptapi/provider.py +0 -439
  197. django_cfg/apps/payments/services/providers/cryptomus/__init__.py +0 -4
  198. django_cfg/apps/payments/services/providers/cryptomus/models.py +0 -176
  199. django_cfg/apps/payments/services/providers/cryptomus/provider.py +0 -429
  200. django_cfg/apps/payments/services/providers/cryptomus/provider_v2.py +0 -564
  201. django_cfg/apps/payments/services/providers/models/__init__.py +0 -34
  202. django_cfg/apps/payments/services/providers/models/currencies.py +0 -190
  203. django_cfg/apps/payments/services/providers/nowpayments/__init__.py +0 -4
  204. django_cfg/apps/payments/services/providers/nowpayments/models.py +0 -196
  205. django_cfg/apps/payments/services/providers/nowpayments/provider.py +0 -380
  206. django_cfg/apps/payments/services/providers/stripe/__init__.py +0 -4
  207. django_cfg/apps/payments/services/providers/stripe/models.py +0 -184
  208. django_cfg/apps/payments/services/providers/stripe/provider.py +0 -109
  209. django_cfg/apps/payments/services/security/__init__.py +0 -34
  210. django_cfg/apps/payments/services/security/error_handler.py +0 -635
  211. django_cfg/apps/payments/services/security/payment_notifications.py +0 -342
  212. django_cfg/apps/payments/services/security/webhook_validator.py +0 -474
  213. django_cfg/apps/payments/static/payments/css/payments.css +0 -340
  214. django_cfg/apps/payments/static/payments/js/notifications.js +0 -202
  215. django_cfg/apps/payments/static/payments/js/payment-utils.js +0 -318
  216. django_cfg/apps/payments/static/payments/js/theme.js +0 -86
  217. django_cfg/apps/payments/tasks/__init__.py +0 -12
  218. django_cfg/apps/payments/tasks/webhook_processing.py +0 -177
  219. django_cfg/apps/payments/templates/admin/payments/currency/change_list.html +0 -50
  220. django_cfg/apps/payments/templates/payments/base.html +0 -182
  221. django_cfg/apps/payments/templates/payments/components/payment_card.html +0 -201
  222. django_cfg/apps/payments/templates/payments/components/payment_qr_code.html +0 -109
  223. django_cfg/apps/payments/templates/payments/components/progress_bar.html +0 -43
  224. django_cfg/apps/payments/templates/payments/components/provider_stats.html +0 -40
  225. django_cfg/apps/payments/templates/payments/components/status_badge.html +0 -34
  226. django_cfg/apps/payments/templates/payments/components/status_overview.html +0 -148
  227. django_cfg/apps/payments/templates/payments/dashboard.html +0 -258
  228. django_cfg/apps/payments/templates/payments/dashboard_simple_test.html +0 -35
  229. django_cfg/apps/payments/templates/payments/payment_create.html +0 -579
  230. django_cfg/apps/payments/templates/payments/payment_detail.html +0 -373
  231. django_cfg/apps/payments/templates/payments/payment_list.html +0 -354
  232. django_cfg/apps/payments/templates/payments/stats.html +0 -261
  233. django_cfg/apps/payments/templates/payments/test.html +0 -213
  234. django_cfg/apps/payments/templatetags/payments_tags.py +0 -315
  235. django_cfg/apps/payments/utils/__init__.py +0 -43
  236. django_cfg/apps/payments/utils/billing_utils.py +0 -342
  237. django_cfg/apps/payments/utils/config_utils.py +0 -239
  238. django_cfg/apps/payments/utils/middleware_utils.py +0 -228
  239. django_cfg/apps/payments/utils/validation_utils.py +0 -94
  240. django_cfg/apps/payments/views/__init__.py +0 -63
  241. django_cfg/apps/payments/views/api_key_views.py +0 -164
  242. django_cfg/apps/payments/views/balance_views.py +0 -75
  243. django_cfg/apps/payments/views/currency_views.py +0 -122
  244. django_cfg/apps/payments/views/payment_views.py +0 -149
  245. django_cfg/apps/payments/views/subscription_views.py +0 -135
  246. django_cfg/apps/payments/views/tariff_views.py +0 -131
  247. django_cfg/apps/payments/views/templates/__init__.py +0 -25
  248. django_cfg/apps/payments/views/templates/ajax.py +0 -451
  249. django_cfg/apps/payments/views/templates/base.py +0 -212
  250. django_cfg/apps/payments/views/templates/dashboard.py +0 -60
  251. django_cfg/apps/payments/views/templates/payment_detail.py +0 -102
  252. django_cfg/apps/payments/views/templates/payment_management.py +0 -158
  253. django_cfg/apps/payments/views/templates/qr_code.py +0 -174
  254. django_cfg/apps/payments/views/templates/stats.py +0 -244
  255. django_cfg/apps/payments/views/templates/utils.py +0 -181
  256. django_cfg/apps/payments/views/webhook_views.py +0 -266
  257. django_cfg/apps/payments/viewsets.py +0 -66
  258. django_cfg/core/integration.py +0 -160
  259. django_cfg/template_archive/.gitignore +0 -1
  260. django_cfg/template_archive/__init__.py +0 -0
  261. django_cfg/urls.py +0 -33
  262. {django_cfg-1.2.31.dist-info → django_cfg-1.3.3.dist-info}/WHEEL +0 -0
  263. {django_cfg-1.2.31.dist-info → django_cfg-1.3.3.dist-info}/entry_points.txt +0 -0
  264. {django_cfg-1.2.31.dist-info → django_cfg-1.3.3.dist-info}/licenses/LICENSE +0 -0
django_cfg/__init__.py CHANGED
@@ -32,7 +32,7 @@ Example:
32
32
  default_app_config = "django_cfg.apps.DjangoCfgConfig"
33
33
 
34
34
  # Version information
35
- __version__ = "1.2.31"
35
+ __version__ = "1.3.3"
36
36
  __license__ = "MIT"
37
37
 
38
38
  # Import registry for organized lazy loading
@@ -17,6 +17,8 @@ from django.core.cache import cache
17
17
  from django.conf import settings
18
18
  from django.utils import timezone
19
19
 
20
+ from django_cfg.core.integration import get_current_version
21
+
20
22
 
21
23
  class HealthCheckView(View):
22
24
  """
@@ -40,7 +42,7 @@ class HealthCheckView(View):
40
42
  "status": "healthy",
41
43
  "timestamp": timezone.now().isoformat(),
42
44
  "service": config.project_name if config else "Django CFG",
43
- "version": config.project_version if config else "unknown",
45
+ "version": get_current_version(),
44
46
  "checks": {}
45
47
  }
46
48
  except Exception:
@@ -48,7 +50,7 @@ class HealthCheckView(View):
48
50
  "status": "healthy",
49
51
  "timestamp": timezone.now().isoformat(),
50
52
  "service": "Django CFG",
51
- "version": "unknown",
53
+ "version": get_current_version(),
52
54
  "checks": {}
53
55
  }
54
56
 
@@ -71,22 +71,23 @@ class EmbeddingConfig(BaseModel):
71
71
  description="Maximum number of items in memory cache"
72
72
  )
73
73
 
74
- # API Keys from environment
75
- @property
76
- def openai_api_key(self) -> Optional[str]:
77
- """Get OpenAI API key from environment configuration."""
78
- try:
79
- return settings.api_keys.openai
80
- except AttributeError:
81
- return os.getenv("OPENAI_API_KEY")
74
+ # >> Old variant, should be imported from CfgConfig
75
+ # # API Keys from environment
76
+ # @property
77
+ # def openai_api_key(self) -> Optional[str]:
78
+ # """Get OpenAI API key from environment configuration."""
79
+ # try:
80
+ # return settings.api_keys.openai
81
+ # except AttributeError:
82
+ # return os.getenv("OPENAI_API_KEY")
82
83
 
83
- @property
84
- def openrouter_api_key(self) -> Optional[str]:
85
- """Get OpenRouter API key from environment configuration."""
86
- try:
87
- return settings.api_keys.openrouter
88
- except AttributeError:
89
- return os.getenv("OPENROUTER_API_KEY")
84
+ # @property
85
+ # def openrouter_api_key(self) -> Optional[str]:
86
+ # """Get OpenRouter API key from environment configuration."""
87
+ # try:
88
+ # return settings.api_keys.openrouter
89
+ # except AttributeError:
90
+ # return os.getenv("OPENROUTER_API_KEY")
90
91
 
91
92
 
92
93
  class ChunkingConfig(BaseModel):
@@ -0,0 +1,326 @@
1
+ # Universal Payment System v2.0
2
+
3
+ 🚀 **Complete payment system with webhook support, provider management, and modern dashboard.**
4
+
5
+ ## 🏗️ Architecture Overview
6
+
7
+ Built using **Skyscraper Architecture** - 8 levels from foundation to integration:
8
+
9
+ ```
10
+ Level 7: Integration Layer │ ✅ Webhooks, Templates, URLs
11
+ Level 6: Interface Layer │ ✅ Admin, Management, Dashboard
12
+ Level 5: API Layer │ ✅ REST API, ViewSets, Serializers
13
+ Level 4: Service Layer │ ✅ PaymentService, ProviderRegistry
14
+ Level 3: Business Logic │ ✅ Signals, Middleware, Managers
15
+ Level 2: Data Layer │ ✅ Models, Migrations, Relationships
16
+ Level 1: Infrastructure │ ✅ Cache, Config, Ready Modules
17
+ Level 0: Foundation │ ✅ Django, PostgreSQL, Redis, Python
18
+ ```
19
+
20
+ ## 🚀 Quick Start
21
+
22
+ ### 1. Installation
23
+
24
+ ```bash
25
+ # Add to INSTALLED_APPS
26
+ INSTALLED_APPS = [
27
+ # ...
28
+ 'django_cfg.apps.payments',
29
+ # ...
30
+ ]
31
+
32
+ # Include URLs
33
+ urlpatterns = [
34
+ # External API (requires API keys)
35
+ path('payments/api/', include('django_cfg.apps.payments.urls_api')),
36
+
37
+ # Internal admin (requires staff access)
38
+ path('payments/admin/', include('django_cfg.apps.payments.urls_admin')),
39
+ ]
40
+ ```
41
+
42
+ ### 2. Development with Ngrok
43
+
44
+ ```bash
45
+ # Start development server with ngrok tunnel
46
+ python manage.py runserver_ngrok
47
+
48
+ # Access webhook dashboard
49
+ http://localhost:8000/payments/admin/webhooks/
50
+ ```
51
+
52
+ ### 3. Provider Configuration
53
+
54
+ The system automatically detects providers from `ProviderRegistry`. No hardcoded providers!
55
+
56
+ ```python
57
+ # Providers are loaded dynamically from registry
58
+ from django_cfg.apps.payments.services.providers.registry import get_provider_registry
59
+
60
+ registry = get_provider_registry()
61
+ providers = registry.list_available_providers() # ['nowpayments', ...]
62
+ ```
63
+
64
+ ## 📡 Webhook System
65
+
66
+ ### Universal Webhook Handler
67
+
68
+ ```python
69
+ # Supports any provider dynamically
70
+ POST /payments/api/webhooks/{provider}/
71
+
72
+ # Examples:
73
+ POST /payments/api/webhooks/nowpayments/
74
+ POST /payments/api/webhooks/stripe/
75
+ POST /payments/api/webhooks/new_provider/ # Automatically supported!
76
+ ```
77
+
78
+ ### Provider Management
79
+
80
+ ```python
81
+ # Get webhook URLs for all providers
82
+ GET /payments/api/webhooks/providers/
83
+
84
+ # Response:
85
+ {
86
+ "success": true,
87
+ "providers": [
88
+ {
89
+ "name": "nowpayments",
90
+ "display_name": "NowPayments",
91
+ "webhook_url": "https://abc123.ngrok.io/payments/api/webhooks/nowpayments/",
92
+ "signature_header": "x-nowpayments-sig",
93
+ "signature_algorithm": "HMAC-SHA512",
94
+ "icon": "💎"
95
+ }
96
+ ]
97
+ }
98
+ ```
99
+
100
+ ### Security Features
101
+
102
+ - ✅ **Signature Validation** - Provider-specific HMAC verification
103
+ - ✅ **Replay Protection** - Request ID tracking and deduplication
104
+ - ✅ **Rate Limiting** - Configurable per-provider limits
105
+ - ✅ **IP Filtering** - Optional whitelist support
106
+ - ✅ **Audit Logging** - Complete request/response logging
107
+
108
+ ## 🎨 Dashboard Features
109
+
110
+ ### Modern UI Components
111
+
112
+ - 🌙 **Dark Mode Support** - Automatic theme switching
113
+ - 📱 **Responsive Design** - Works on all devices
114
+ - ⚡ **Real-time Updates** - Auto-refresh every 30 seconds
115
+ - 🔄 **Interactive Elements** - Copy URLs, test webhooks
116
+ - 📊 **Live Statistics** - Provider health, success rates
117
+
118
+ ### Template Components
119
+
120
+ Reusable, dynamic components:
121
+
122
+ ```django
123
+ <!-- Status Card -->
124
+ {% include 'payments/components/status_card.html' with title="Ngrok Status" icon="🌐" %}
125
+
126
+ <!-- Provider Card (dynamic) -->
127
+ {% include 'payments/components/provider_card.html' with provider=provider_data %}
128
+
129
+ <!-- Loading Spinner -->
130
+ {% include 'payments/components/loading_spinner.html' with size="large" %}
131
+ ```
132
+
133
+ ## 🔧 Configuration
134
+
135
+ ### Provider Registration
136
+
137
+ ```python
138
+ # Add new provider (no code changes needed!)
139
+ from django_cfg.apps.payments.services.integrations.providers_config import WEBHOOK_METADATA
140
+
141
+ # Just add to WEBHOOK_METADATA
142
+ WEBHOOK_METADATA['new_provider'] = WebhookProviderInfo(
143
+ name='new_provider',
144
+ display_name='New Provider',
145
+ signature_header='x-new-provider-sig',
146
+ signature_algorithm='HMAC-SHA256',
147
+ icon='🆕'
148
+ )
149
+ ```
150
+
151
+ ### Ngrok Integration
152
+
153
+ ```python
154
+ # Automatic ngrok support via django-cfg
155
+ # No configuration needed - just run:
156
+ python manage.py runserver_ngrok
157
+ ```
158
+
159
+ ### Environment Variables
160
+
161
+ ```bash
162
+ # Ngrok authentication
163
+ NGROK_AUTHTOKEN=your_token_here
164
+
165
+ # Provider secrets (via Constance)
166
+ NOWPAYMENTS_API_KEY=your_api_key
167
+ NOWPAYMENTS_IPN_SECRET=your_secret
168
+ ```
169
+
170
+ ## 📊 API Endpoints
171
+
172
+ ### External API (requires API keys)
173
+
174
+ ```
175
+ # Payment Management
176
+ GET /payments/api/payments/
177
+ POST /payments/api/payments/
178
+ GET /payments/api/payments/{id}/
179
+
180
+ # Webhook Endpoints
181
+ POST /payments/api/webhooks/{provider}/
182
+ GET /payments/api/webhooks/providers/
183
+ GET /payments/api/webhooks/health/
184
+ GET /payments/api/webhooks/stats/
185
+
186
+ # Currency & Rates
187
+ GET /payments/api/currencies/
188
+ GET /payments/api/currencies/rates/
189
+ POST /payments/api/currencies/convert/
190
+ ```
191
+
192
+ ### Internal Admin (requires staff access)
193
+
194
+ ```
195
+ # Dashboard
196
+ GET /payments/admin/
197
+ GET /payments/admin/webhooks/
198
+
199
+ # Management Tools
200
+ GET /payments/admin/ajax/webhooks/status/
201
+ GET /payments/admin/ajax/webhooks/stats/
202
+ ```
203
+
204
+ ## 🧪 Testing
205
+
206
+ ### Webhook Testing
207
+
208
+ ```bash
209
+ # Test webhook endpoint
210
+ curl -X POST https://abc123.ngrok.io/payments/api/webhooks/nowpayments/ \
211
+ -H "Content-Type: application/json" \
212
+ -H "x-nowpayments-sig: test_signature" \
213
+ -d '{"payment_id": "test", "payment_status": "finished"}'
214
+ ```
215
+
216
+ ### Health Checks
217
+
218
+ ```bash
219
+ # Check system health
220
+ curl /payments/api/webhooks/health/
221
+
222
+ # Get statistics
223
+ curl /payments/api/webhooks/stats/?days=7
224
+ ```
225
+
226
+ ## 🔄 Adding New Providers
227
+
228
+ ### 1. Register Provider Class
229
+
230
+ ```python
231
+ # In your provider module
232
+ class NewProvider(BaseProvider):
233
+ def validate_webhook(self, payload, signature):
234
+ # Provider-specific validation
235
+ pass
236
+
237
+ # Register with system
238
+ registry.register_provider_class('new_provider', NewProvider, NewProviderConfig)
239
+ ```
240
+
241
+ ### 2. Add Webhook Metadata
242
+
243
+ ```python
244
+ # In providers_config.py
245
+ WEBHOOK_METADATA['new_provider'] = WebhookProviderInfo(
246
+ name='new_provider',
247
+ display_name='New Provider',
248
+ signature_header='x-new-provider-sig',
249
+ signature_algorithm='HMAC-SHA256',
250
+ icon='🆕'
251
+ )
252
+ ```
253
+
254
+ ### 3. That's it!
255
+
256
+ The system automatically:
257
+ - ✅ Creates webhook endpoint: `/webhooks/new_provider/`
258
+ - ✅ Adds to dashboard UI with icon
259
+ - ✅ Includes in provider list API
260
+ - ✅ Handles signature validation
261
+ - ✅ Provides ngrok URLs
262
+
263
+ ## 📈 Performance & Scalability
264
+
265
+ - **Lazy Loading** - Providers loaded on-demand
266
+ - **Caching** - Redis-backed provider and rate limit caching
267
+ - **Async Support** - Ready for async webhook processing
268
+ - **Health Monitoring** - Automatic provider health checks
269
+ - **Fallback Mechanisms** - Graceful degradation when providers fail
270
+
271
+ ## 🛡️ Security Best Practices
272
+
273
+ 1. **Always validate signatures** - Never trust unsigned webhooks
274
+ 2. **Use HTTPS in production** - Ngrok is for development only
275
+ 3. **Implement rate limiting** - Prevent abuse and DoS attacks
276
+ 4. **Monitor webhook activity** - Set up alerts for failures
277
+ 5. **Rotate secrets regularly** - Update provider secrets periodically
278
+
279
+ ## 📚 Documentation
280
+
281
+ - [Webhook Integration Guide](/@docs_new/integration/webhooks-ngrok.md)
282
+ - [Provider Configuration](/@docs_new/models/config.md)
283
+ - [Service Layer Documentation](/@docs_new/services/index.md)
284
+ - [Architecture Overview](/@docs_new/architecture.md)
285
+
286
+ ## 🎯 Production Deployment
287
+
288
+ ### Requirements
289
+
290
+ - Python 3.11+
291
+ - Django 4.2+
292
+ - PostgreSQL 12+
293
+ - Redis 6+
294
+ - Nginx (for static files)
295
+
296
+ ### Environment Setup
297
+
298
+ ```bash
299
+ # Production settings
300
+ DEBUG=False
301
+ ALLOWED_HOSTS=your-domain.com
302
+ DATABASE_URL=postgresql://...
303
+ REDIS_URL=redis://...
304
+
305
+ # Provider configuration
306
+ NOWPAYMENTS_API_KEY=prod_key
307
+ NOWPAYMENTS_IPN_SECRET=prod_secret
308
+ ```
309
+
310
+ ### Nginx Configuration
311
+
312
+ ```nginx
313
+ location /payments/api/webhooks/ {
314
+ proxy_pass http://django;
315
+ proxy_set_header Host $host;
316
+ proxy_set_header X-Real-IP $remote_addr;
317
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
318
+ proxy_set_header X-Forwarded-Proto $scheme;
319
+ }
320
+ ```
321
+
322
+ ---
323
+
324
+ ## 🎉 **Universal Payment System v2.0 - Ready for Production!**
325
+
326
+ **Built with ❤️ using Django-CFG framework**
@@ -1,24 +1,34 @@
1
1
  """
2
- Admin interfaces for universal payments.
2
+ Admin interfaces for Universal Payment System v2.0.
3
+
4
+ Unfold-powered admin with modern UI/UX and advanced functionality.
3
5
  """
4
6
 
5
- from .balance_admin import UserBalanceAdmin, TransactionAdmin
7
+ from .currencies_admin import CurrencyAdmin, NetworkAdmin, ProviderCurrencyAdmin
6
8
  from .payments_admin import UniversalPaymentAdmin
7
- from .subscriptions_admin import SubscriptionAdmin, EndpointGroupAdmin
9
+ from .balance_admin import UserBalanceAdmin, TransactionAdmin
10
+ from .subscriptions_admin import SubscriptionAdmin, EndpointGroupAdmin, TariffAdmin, TariffEndpointGroupAdmin
8
11
  from .api_keys_admin import APIKeyAdmin
9
- from .currencies_admin import CurrencyAdmin, NetworkAdmin, ProviderCurrencyAdmin
10
- from .tariffs_admin import TariffAdmin, TariffEndpointGroupAdmin
11
12
 
12
13
  __all__ = [
14
+ # Currency admins
15
+ 'CurrencyAdmin',
16
+ 'NetworkAdmin',
17
+ 'ProviderCurrencyAdmin',
18
+
19
+ # Payment admins
20
+ 'UniversalPaymentAdmin',
21
+
22
+ # Balance admins
13
23
  'UserBalanceAdmin',
14
24
  'TransactionAdmin',
15
- 'UniversalPaymentAdmin',
25
+
26
+ # Subscription admins
16
27
  'SubscriptionAdmin',
17
28
  'EndpointGroupAdmin',
18
- 'APIKeyAdmin',
19
- 'CurrencyAdmin',
20
- 'NetworkAdmin',
21
- 'ProviderCurrencyAdmin',
22
29
  'TariffAdmin',
23
30
  'TariffEndpointGroupAdmin',
31
+
32
+ # API Key admins
33
+ 'APIKeyAdmin',
24
34
  ]