feat: implement staff management and subscription system

- Added StaffController for managing clinic staff, including listing, creating, updating, and toggling staff status.
- Created ClinicStaff entity and repository for staff data handling.
- Developed SubscriptionController to manage subscription plans and periods, including trial subscriptions.
- Introduced SubscriptionPlan, SubscriptionPeriod, and ClinicSubscription entities for subscription management.
- Implemented SubscriptionService for handling subscription logic, including trial activation and subscription creation from payments.
- Added necessary repositories for subscription entities to facilitate data access and manipulation.
This commit is contained in:
hamed
2026-06-14 22:10:28 +03:30
parent dcd631f503
commit b0244f28f5
53 changed files with 4434 additions and 40 deletions
+117
View File
@@ -298,3 +298,120 @@ Updated template with `status: "rejected"`.
| Code | HTTP | Description |
|------|------|-------------|
| `ERR_VALIDATION_002` | 422 | Missing note |
---
## SMS Wallet
کیف پیامکی — جدا از کیف مالی، فقط برای ارسال پیامک.
### GET /api/v1/sms/wallet/balance
**Permission:** `IS_AUTHENTICATED_FULLY`
```json
{
"success": true,
"data": {
"balance_rials": 15000,
"sms_price_rials": 500,
"estimated_sms_count": 30
}
}
```
### POST /api/v1/sms/wallet/charge
شارژ کیف پیامکی از طریق درگاه پرداخت.
**Permission:** `IS_AUTHENTICATED_FULLY`
```json
{
"gateway": "mellat",
"amount_rials": 50000,
"frontend_address": "https://example.com/sms-wallet"
}
```
**Response 200:**
```json
{
"success": true,
"data": {
"payment_uuid": "...",
"redirect_url": "https://gateway...",
"order_id": "ORD-..."
}
}
```
پس از پرداخت موفق، موجودی کیف خودکار شارژ می‌شود.
### GET /api/v1/sms/wallet/logs
تراکنش‌های کیف پیامک (paginated).
**Query params:** `page`, `limit`
```json
{
"success": true,
"data": [
{
"uuid": "...",
"type": "credit",
"amount_rials": 50000,
"description": "شارژ کیف پیامک",
"created_at": 1718000000
}
],
"meta": { "totalRecords": 5, "totalPages": 1, "currentPage": 1 }
}
```
---
## SMS Settings
### GET /api/v1/sms/settings
تنظیمات پیامک entity جاری.
**Permission:** `IS_AUTHENTICATED_FULLY`
```json
{
"success": true,
"data": {
"entity_type": "clinic",
"entity_id": 5,
"reminder_enabled": true,
"reminder_hours_before": 2,
"post_visit_enabled": false,
"post_visit_text": null,
"updated_at": 1718000000
}
}
```
### PATCH /api/v1/sms/settings
**Permission:** `IS_AUTHENTICATED_FULLY`
```json
{
"reminder_enabled": true,
"reminder_hours_before": 3,
"post_visit_enabled": true,
"post_visit_text": "از مراجعه شما سپاسگزاریم"
}
```
---
## Admin Endpoints
### GET /api/v1/admin/sms/wallet-report
**Permission:** `ROLE_ADMIN` — لیست همه کیف‌های پیامکی (paginated)