feat(journal): add journal publish feature

1. add PublishAsync method to IJournalService and implement it in JournalService
2. add publish start/end time fields to Journal entity, DTOs and edit form
3. add journal publish API endpoint
4. add rabbitMQ message sending for book and page publish events
5. clean up some commented-out old controller methods
This commit is contained in:
glz
2026-06-30 11:03:39 +08:00
parent fa1acec8af
commit 6985a4af42
6 changed files with 133 additions and 60 deletions

View File

@ -141,6 +141,17 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
return BaseResponse<bool>.Success(data);
}
/// <summary>
/// 书籍发布
/// </summary>
/// <returns></returns>
[HttpPost, Route("journal/publish/{id:long}")]
public async Task<BaseResponse<bool>> Publish(long id)
{
var data = await JournalService.PublishAsync(id);
return BaseResponse<bool>.Success(data);
}
/// <summary>
/// 书籍铺码
/// </summary>
@ -200,17 +211,6 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
#region
///// <summary>
///// 书籍目录详情
///// </summary>
///// <returns></returns>
//[HttpGet, Route("catalog/tree/{JournalId:long}")]
//public async Task<BaseResponse<List<IcrJournalCatalog>>> CatalogDetailAsync(long JournalId)
//{
// var data = await _JournalCatalogService.DetailAsync(JournalId);
// return BaseResponse<List<IcrJournalCatalog>>.Success(data);
//}
/// <summary>
/// 书籍目录详情
/// </summary>
@ -312,18 +312,6 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
return BaseResponse<bool>.Success(data);
}
///// <summary>
///// 书籍目录复制
///// </summary>
///// <param name="input"></param>
///// <returns></returns>
//[HttpPost, Route("catalog/copy")]
//[ProducesResponseType(typeof(BaseResponse<bool>), 200)]
//public async Task<BaseResponse> CatalogCopy(CopyInput input)
//{
// var data = await _JournalCatalogServices.CopyAsync(input);
// return ApiResult(data, "书籍目录删除失败!");
//}
/// <summary>
/// 书籍目录移动
@ -411,30 +399,6 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
}
///// <summary>
///// 打印书页(全部) 暂时废弃这个方,直接使用 Adobe Reader X 软件打印就可以了
///// </summary>
///// <returns></returns>
//[HttpPost, Route("page/printJournalPage/{JournalId:long}")]
//public async Task<BaseResponse<bool>> PrintJournalPage([Required(ErrorMessage = "书籍编号不允许为空")] long JournalId)
//{
// var data = await JournalPageService.PrintJournalPageAsync(JournalId);
// return BaseResponse<bool>.Success(data);
//}
///// <summary>
///// 书页删除
///// </summary>
///// <returns></returns>
//[HttpPost, Route("page/delete/{id:long}")]
//[ProducesResponseType(typeof(BaseResponse<bool>), 200)]
//public async Task<IActionResult> PageDelete(long id)
//{
// var data = await _JournalPageServices.DeleteAsync(id);
// return ApiResult(data, "更新书页失败!");
//}
/// <summary>
/// 书页详情
/// </summary>
@ -446,17 +410,6 @@ namespace QYZH.InteractiveMagazine.WebApi.Controllers
return BaseResponse<JournalPageV2Output>.Success(data);
}
///// <summary>
///// 不包含有文章的书页
///// </summary>
///// <returns></returns>
//[HttpGet, Route("page/no-article/{JournalId:long}")]
//[ProducesResponseType(typeof(BaseResponse<List<JournalPageNoArticleOutput>>), 200)]
//public async Task<IActionResult> PageNoArticleAsync(long JournalId)
//{
// var data = await _JournalPageService.PageNoArticleAsync(JournalId);
// return BaseResponse<List<JournalPageNoArticleOutput>>(data, "查询书页失败!");
//}
#endregion