205
تسلط بر ASP.NET Core: نمایش تاریخ شمسی انتشار و مدیریت تغییرات کلاینتها به سبک حرفهای
مدیریت چندین وبسایت مشتری میتواند چالشبرانگیز باشد، مخصوصاً وقتی پای اطلاعرسانی به مشتریان درباره بروزرسانیها میرسد. آیا تا به حال با این چالشها روبرو شدهاید:
- نمایش تاریخ آخرین بروزرسانی در وبسایت به تقویم شمسی (فارسی)
- نگهداری تاریخچه تغییرات دقیق (مشابه گیتهاب) برای تمام پروژههای مشتریان در یک مکان متمرکز
در این مقاله، این چالشها را برای برنامههای ASP.NET Core Razor Pages با راهحلهای عملی و مبتنی بر کد حل میکنیم.
چالش اصلی: شفافسازی و پیگیری تغییرات
مشتریان حق دارند بدانند وبسایتشان آخرین بار چه زمانی بروز شده است. اما نمایش تاریخ میلادی برای مخاطبان فارسیزبان گمراهکننده است. از طرفی، پیگیری تغییرات در دهها پروژه مختلف میتواند کابوس مدیریتی ایجاد کند!
راهحل: دو استراتژی مکمل
- نمایش خودکار تاریخ شمسی انتشار: استخراج زمان انتشار از اسمبلی و تبدیل به تقویم شمسی
- سیستم متمرکز ثبت تغییرات مشتریان: ایجاد سامانهای مبتنی بر EF Core برای ردیابی تغییرات
بخش 1: نمایش تاریخ شمسی در فوتر سایت
1. کلاس کمکی AppInfo (خواندن تاریخ اسمبلی)
// Helpers/AppInfo.cs
using System.Globalization;
public static class AppInfo
{
public static DateTime GetBuildDate()
{
// کد خواندن تاریخ از اسمبلی (بدون تغییر)
}
public static string GetPersianBuildDate()
{
DateTime buildDate = GetBuildDate();
PersianCalendar pc = new PersianCalendar();
return $"{pc.GetYear(buildDate):D4}/{pc.GetMonth(buildDate):D2}/{pc.GetDayOfMonth(buildDate):D2}";
}
}
2. نمایش در Layout
<!-- Pages/Shared/_Layout.cshtml -->
<footer>
<div>
آخرین بروزرسانی:
@YourApp.Helpers.AppInfo.GetPersianBuildDate()
</div>
</footer>
بخش 2: سیستم ثبت تغییرات مشتریان
1. مدلهای دیتابیس
// مدل مشتری
public class Client
{
public int Id { get; set; }
[Required] public string Name { get; set; } // نام مشتری
public string WebsiteUrl { get; set; } // آدرس سایت
}
// مدل تغییرات
public enum ChangeType
{
StructureUpdate, // تغییر ساختار
ContentUpdate, // محتوا
BugFix, // رفع خطا
NewFeature, // قابلیت جدید
Deployment // استقرار
}
public class ChangeLog
{
public int Id { get; set; }
public int ClientId { get; set; }
public DateTime ChangeDate { get; set; } = DateTime.UtcNow;
[Required]
public string Description { get; set; } // شرح تغییرات
public ChangeType Type { get; set; }
public string GitHash { get; set; } // اختیاری (شناسه کامیت)
}
2. مدیریت تغییرات در ریزر پیجها
// Pages/Clients/Details.cshtml.cs
public class DetailsModel : PageModel
{
private readonly ApplicationDbContext _context;
public DetailsModel(ApplicationDbContext context)
{
_context = context;
}
public Client Client { get; set; }
public async Task OnGetAsync(int id)
{
Client = await _context.Clients
.Include(c => c.ChangeLogs)
.FirstOrDefaultAsync(m => m.Id == id);
}
}
3. روشهای ثبت تغییرات
الف) ثبت دستی (پیشنهادی برای شروع)
از طریق صفحه مدیریت تغییرات در پنل ادمین
ب) ثبت خودکار از طریق API
// Controller
[HttpPost("api/changelog")]
public async Task AddLog([FromBody] LogRequest request)
{
// اعتبارسنجی و ثبت در دیتابیس
// احراز هویت الزامی است!
}
جمعبندی: حرفهای شوید!
با پیادهسازی این راهحلها:
- تاریخ شمسی انتشار را به صورت خودکار نمایش دهید
- تاریخچه کاملی از تغییرات هر مشتری داشته باشید
- شفافیت را در ارتباط با مشتریان افزایش دهید
این سیستمها با استفاده از ASP.NET Core و Entity Framework پیادهسازی شدهاند و به راحتی قابل توسعه هستند.
نظرات و تجربیات خود را درباره مدیریت تغییرات مشتریان با ما به اشتراک بگذارید!