版本管理
continuous-integration/drone/push Build is running

This commit is contained in:
he
2026-05-06 14:01:39 +08:00
parent 7bfb6d2c5f
commit 4b8d9bf7bf
3 changed files with 111 additions and 10 deletions
@@ -33,7 +33,8 @@ public class SegmentationService(IRepository<Segmentation> _segmentationReposito
IRepository<Segment> _segmentRepository,
IRepository<ReadingQuestionTrial> _readingQuestionTrialRepository,
IRepository<ReadingTableQuestionTrial> _readingTableQuestionTrialRepository,
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer): BaseService, ISegmentationService
IRepository<SegmentationVersion> _segmentationVersionRepository,
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IWebHostEnvironment _hostEnvironment): BaseService, ISegmentationService
{
@@ -69,17 +70,87 @@ public class SegmentationService(IRepository<Segmentation> _segmentationReposito
/// <param name="addOrEditSegmentation"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> AddOrUpdateSegmentation(SegmentationAddOrEdit addOrEditSegmentation)
{
public async Task<IResponseOutput> AddOrUpdateSegmentation(SegmentationAddOrEdit addOrEditSegmentation)
{
var entity = await _segmentationRepository.InsertOrUpdateAsync(addOrEditSegmentation, true);
if (addOrEditSegmentation.Id != null)
{
await SaveSegmentationVersionAsync(addOrEditSegmentation.Id.Value);
}
var entity = await _segmentationRepository.InsertOrUpdateAsync(addOrEditSegmentation, true);
return ResponseOutput.Ok(entity.Id.ToString());
}
}
/// <summary>
/// 添加新版本
/// </summary>
/// <param name="segmentationId"></param>
/// <returns></returns>
private async Task SaveSegmentationVersionAsync(Guid segmentationId)
{
var data = await _segmentationRepository.FirstOrDefaultNoTrackingAsync(x => x.Id == segmentationId.Id.Value);
// 如果是新增或修改,记录一条版本信息
var maxVersion = await _segmentationVersionRepository
.Where(x => x.SegmentationId == data.Id)
.OrderByDescending(x => x.Version)
.Select(x => x.Version)
.FirstOrDefaultAsync();
var newVersion = maxVersion + 1;
var versionEntity = new SegmentationVersion
{
SegmentationId = data.Id,
Version = newVersion,
SegmentationJson = data.SegmentationJson,
SEGUrl = data.SEGUrl,
FileSize = data.FileSize,
};
await _segmentationVersionRepository.AddAsync(versionEntity);
await _segmentationRepository.SaveChangesAsync();
}
/// <summary>
/// 获取分割组历史版本
/// </summary>
/// <param name="inQuery"></param>
/// <returns></returns>
[HttpPost]
public async Task<PageOutput<SegmentationVersionView>> GetSegmentationVersionList(SegmentationVersionQuery inQuery)
{
var versionQueryable = _segmentationVersionRepository
.Where(x => x.SegmentationId == inQuery.SegmentationId)
.ProjectTo<SegmentationVersionView>(_mapper.ConfigurationProvider);
var defalutSortArray = new string[] { nameof(SegmentationVersion.Version) + " desc" };
var pageList = await versionQueryable.ToPagedListAsync(inQuery, defalutSortArray);
return pageList;
}
/// <summary>
/// 恢复分割组历史版本
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> RestoreSegmentationVersion(RestoreSegmentationVersionInDto inDto)
{
var version = await _segmentationVersionRepository.Where(x => x.Id == inDto.VersionId && x.SegmentationId == inDto.SegmentationId).FirstNotNullAsync();
var segmentation = await _segmentationRepository.Where(x => x.Id == inDto.SegmentationId).FirstNotNullAsync();
await _segmentationRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.SegmentationId, t => new Segmentation
{
SegmentationJson = version.SegmentationJson,
SEGUrl = version.SEGUrl,
FileSize = version.FileSize,
});
await _segmentationRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}
/// <summary>
/// 删除分割组