- Add SendSmsMessage class for encapsulating SMS message data. - Create KavehNegarProvider and RanginehProvider classes implementing SmsProviderInterface for sending SMS. - Implement SmsLogRepository and SmsTemplateRepository for managing SMS logs and templates. - Develop SendSmsHandler for handling SMS sending messages. - Create SmsService to manage SMS dispatching and logging. - Add UserProfileController for managing user profiles with CRUD operations. - Implement UserProfile entity and repository for user profile data management. - Update symfony.lock and bootstrap.php for project dependencies and environment setup.
85 lines
2.8 KiB
Markdown
85 lines
2.8 KiB
Markdown
# معماری — تسک ۰۲: ماژول احراز هویت
|
|
|
|
## ساختار فایلها
|
|
```
|
|
src/Module/Auth/
|
|
├── Controller/
|
|
│ ├── OtpController.php ← send-code, verify-code
|
|
│ ├── AuthController.php ← register, session/token
|
|
│ ├── OAuthController.php ← /oauth/token, /oauth/userinfo
|
|
│ └── UserController.php ← delete, patch user
|
|
├── Service/
|
|
│ ├── OtpService.php ← تولید، ذخیره و تأیید OTP در Redis
|
|
│ ├── JwtService.php ← صدور و تمدید JWT
|
|
│ ├── CaptchaService.php ← اعتبارسنجی captcha_token
|
|
│ └── UserService.php ← ایجاد، ویرایش، حذف کاربر
|
|
├── Repository/
|
|
│ └── UserRepository.php
|
|
├── Entity/
|
|
│ └── User.php
|
|
├── DTO/
|
|
│ ├── Request/
|
|
│ │ ├── SendCodeRequest.php
|
|
│ │ ├── VerifyCodeRequest.php
|
|
│ │ ├── RegisterRequest.php
|
|
│ │ ├── RefreshTokenRequest.php
|
|
│ │ └── UpdateUserRequest.php
|
|
│ └── Response/
|
|
│ ├── TokenResponse.php
|
|
│ └── UserInfoResponse.php
|
|
└── Voter/
|
|
└── UserVoter.php ← فقط owner یا admin میتواند ویرایش/حذف کند
|
|
```
|
|
|
|
## نمودار جریان احراز هویت
|
|
```
|
|
کاربر
|
|
│
|
|
├─► POST /send-code
|
|
│ └─► OtpService: تولید کد ۵ رقمی
|
|
│ └─► Redis: ذخیره با کلید otp:{mobile} (TTL=120s)
|
|
│ └─► SmsService: ارسال پیامک
|
|
│
|
|
├─► POST /verify-code
|
|
│ └─► OtpService: تأیید کد از Redis
|
|
│ ├─► اگر کاربر جدید: ایجاد User با وضعیت pending
|
|
│ └─► JwtService: صدور access_token + refresh_token
|
|
│
|
|
└─► POST /register (با X-CSRF-Token)
|
|
└─► UserService: تکمیل اطلاعات کاربر
|
|
```
|
|
|
|
## Entity: User
|
|
```php
|
|
#[ORM\Entity(repositoryClass: UserRepository::class)]
|
|
#[ORM\Table(name: 'users')]
|
|
class User implements UserInterface
|
|
{
|
|
#[ORM\Id, ORM\GeneratedValue, ORM\Column]
|
|
private int $id;
|
|
|
|
#[ORM\Column(type: UuidType::NAME, unique: true)]
|
|
private Uuid $uuid;
|
|
|
|
#[ORM\Column(length: 20, unique: true)]
|
|
private string $mobile;
|
|
|
|
#[ORM\Column(length: 100, nullable: true)]
|
|
private ?string $firstName;
|
|
|
|
#[ORM\Column(length: 100, nullable: true)]
|
|
private ?string $lastName;
|
|
|
|
#[ORM\Column(length: 180, nullable: true, unique: true)]
|
|
private ?string $email;
|
|
|
|
#[ORM\Column(length: 50)]
|
|
private string $status = 'pending'; // pending, active, blocked
|
|
|
|
#[ORM\Column(type: 'json')]
|
|
private array $roles = ['ROLE_USER'];
|
|
|
|
// TimestampableTrait
|
|
}
|
|
```
|