feat(AppVersion): Add version tracking system for frontend cache invalidation
Build and Deploy to Production / build-and-deploy (push) Successful in 1m37s

- Add AppVersion entity with CurrentVersion, MinRequiredVersion, RequiresFullCacheClear
- Add GetAppVersion query to check app version and compare with client version
- Add GetAllAppVersions query for admin panel
- Add UpdateAppVersion command to update/create app versions
- Add appversion.proto for gRPC communication
- Add AppVersionService for gRPC endpoints
- Add database migration for AppVersions table
This commit is contained in:
masoodafar-web
2025-12-25 18:06:12 +03:30
parent 2e54aa7aca
commit 17c2958b9c
15 changed files with 4244 additions and 0 deletions
@@ -0,0 +1,23 @@
namespace CMSMicroservice.Application.AppVersionCQ.Queries.GetAllAppVersions;
/// <summary>
/// Query برای دریافت همه نسخه‌های اپلیکیشن‌ها
/// </summary>
public record GetAllAppVersionsQuery(bool IncludeInactive = false) : IRequest<List<AppVersionItemDto>>;
/// <summary>
/// DTO برای هر آیتم نسخه اپلیکیشن
/// </summary>
public record AppVersionItemDto
{
public long Id { get; init; }
public string AppName { get; init; } = string.Empty;
public string CurrentVersion { get; init; } = string.Empty;
public string MinRequiredVersion { get; init; } = string.Empty;
public bool RequiresFullCacheClear { get; init; }
public string? UpdateMessage { get; init; }
public string? ReleaseNotes { get; init; }
public bool IsActive { get; init; }
public DateTime Created { get; init; }
public DateTime? LastModified { get; init; }
}
@@ -0,0 +1,44 @@
namespace CMSMicroservice.Application.AppVersionCQ.Queries.GetAllAppVersions;
/// <summary>
/// Handler برای دریافت همه نسخه‌های اپلیکیشن‌ها
/// </summary>
public class GetAllAppVersionsQueryHandler : IRequestHandler<GetAllAppVersionsQuery, List<AppVersionItemDto>>
{
private readonly IApplicationDbContext _context;
public GetAllAppVersionsQueryHandler(IApplicationDbContext context)
{
_context = context;
}
public async Task<List<AppVersionItemDto>> Handle(GetAllAppVersionsQuery request, CancellationToken cancellationToken)
{
var query = _context.AppVersions
.Where(v => !v.IsDeleted);
if (!request.IncludeInactive)
{
query = query.Where(v => v.IsActive);
}
var versions = await query
.OrderBy(v => v.AppName)
.Select(v => new AppVersionItemDto
{
Id = v.Id,
AppName = v.AppName,
CurrentVersion = v.CurrentVersion,
MinRequiredVersion = v.MinRequiredVersion,
RequiresFullCacheClear = v.RequiresFullCacheClear,
UpdateMessage = v.UpdateMessage,
ReleaseNotes = v.ReleaseNotes,
IsActive = v.IsActive,
Created = v.Created,
LastModified = v.LastModified
})
.ToListAsync(cancellationToken);
return versions;
}
}