در 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 تبدیل کنم.
