- Added the remaining components for the doctor import feature in the backend, including role management, ownership transfer endpoint, and captcha bypass for crawler service login. - Created detailed scenarios for the doctor claim process, ensuring proper identity verification and mobile validation. - Established a crawler interface for token management and state tracking using SQLite, enabling a resume capability for the crawling process.
62 lines
4.4 KiB
Markdown
62 lines
4.4 KiB
Markdown
در Crawler، برای اینکه بتواند اطلاعات را Crawl کرده و در Clinic DataYar یک Doctor ایجاد کند، نیاز به Token احراز هویت دارد.
|
|
|
|
در حال حاضر میتوانیم Token را بهصورت دستی ایجاد کرده و در اختیار Crawler قرار دهیم، اما ترجیح من این است که خود Crawler یک Web Interface ساده داشته باشد.
|
|
|
|
این وبسایت باید احراز هویت داخلی سادهای داشته باشد. احراز هویت میتواند Static باشد، چون این پنل استفاده عمومی ندارد و قرار نیست سیستم پیچیدهای برای مدیریت کاربران داشته باشیم.
|
|
|
|
من باید بتوانم وارد پنل Crawler شوم و سپس Username و Password مربوط به Clinic DataYar را وارد کنم.
|
|
|
|
Crawler باید با استفاده از این Username و Password به Clinic DataYar درخواست Login ارسال کند، Token را دریافت کند و آن را بهصورت امن ذخیره کند.
|
|
|
|
در نتیجه، نیازی به ساخت و وارد کردن دستی Token نباشد و بتوانم Token مورد استفاده Crawler را از طریق پنل مدیریت کنم.
|
|
|
|
همچنین Crawler باید یک Database داخلی داشته باشد.
|
|
|
|
من نمیخواهم برای Crawler یک Database Server مانند MySQL، MariaDB یا PostgreSQL نصب کنم.
|
|
|
|
ترجیح من استفاده از یک دیتابیس Local و File-Based مانند SQLite است.
|
|
|
|
هدف Database فقط این است که Crawler بتواند State و Progress عملیات Crawl را نگهداری کند و بداند:
|
|
|
|
- چه استانهایی پردازش شدهاند.
|
|
- چه شهرهایی پردازش شدهاند.
|
|
- در حال حاضر کدام شهر در حال پردازش است.
|
|
- چه Doctorهایی Crawl شدهاند.
|
|
- چه Doctorهایی با موفقیت به Clinic DataYar ارسال شدهاند.
|
|
- چه مواردی Failed شدهاند.
|
|
- چه کارهایی هنوز باقی مانده است.
|
|
|
|
Crawler باید فرآیند Crawl را بر اساس لیست استانها و شهرهای موجود در Clinic DataYar انجام دهد.
|
|
|
|
ابتدا باید لیست استانها و شهرها را از Clinic DataYar دریافت کند.
|
|
|
|
سپس پردازش باید بهصورت مرحلهای و ترتیبی انجام شود.
|
|
|
|
برای مثال:
|
|
|
|
ابتدا استان کهگیلویه و بویراحمد انتخاب شود.
|
|
|
|
سپس شهرهای این استان یکییکی پردازش شوند.
|
|
|
|
اگر شهر یاسوج در حال Crawl شدن است، Crawler باید تمام فرآیند مربوط به شهر یاسوج را کامل کند.
|
|
|
|
تا زمانی که Crawl و پردازش شهر یاسوج بهطور کامل تمام نشده است، Crawler نباید به شهر بعدی برود.
|
|
|
|
بعد از اتمام کامل یک شهر، وضعیت آن در Database بهعنوان Completed ذخیره شود و سپس پردازش شهر بعدی آغاز شود.
|
|
|
|
همین Flow برای تمام شهرهای یک استان انجام شود و بعد از اتمام کامل استان، Crawler به استان بعدی برود.
|
|
|
|
ترتیب کلی پردازش باید به شکل زیر باشد:
|
|
|
|
Province → City → Crawl Doctors → Process Doctors → Send Doctors to Clinic DataYar → Complete City → Next City → Complete Province → Next Province
|
|
|
|
Crawler باید قابلیت Resume داشته باشد.
|
|
|
|
یعنی اگر Process متوقف شد، Server Restart شد یا Crawler Crash کرد، بعد از اجرای مجدد نباید عملیات را از ابتدا شروع کند.
|
|
|
|
Crawler باید State ذخیرهشده در Database را بررسی کند و دقیقاً از آخرین مرحلهای که متوقف شده است، ادامه دهد.
|
|
|
|
هدف این است که Crawler یک سیستم State-Based و قابل Resume باشد و همیشه مشخص باشد چه کاری انجام شده، چه کاری در حال انجام است و چه کاری هنوز باقی مانده است.
|
|
|
|
اگر بخواهی، میتوانم همین متن را به یک پرامپت فنی دقیق برای Agent جهت پیادهسازی Crawler با NestJS + SQLite تبدیل کنم.
|