using AutoMapper;
using Entities.Contracts;
using Entities.DTO;
using SharedDATA.Api;
namespace TechHelper.Services.Beta
{
///
/// Lesson服务实现类
///
public class LessonService : ILessonService
{
private readonly IUnitOfWork _work;
private readonly IMapper _mapper;
public LessonService(IUnitOfWork work, IMapper mapper)
{
_work = work;
_mapper = mapper;
}
public async Task GetAllAsync(QueryParameter query)
{
try
{
var repository = _work.GetRepository();
if (query.Search != null && !string.IsNullOrWhiteSpace(query.Search))
{
var lessons = await repository.GetPagedListAsync(
predicate: l => l.Title.Contains(query.Search),
pageSize: query.PageSize,
pageIndex: query.PageIndex
);
var lessonDtosFiltered = _mapper.Map>(lessons.Items);
return new ApiResponse(true, lessonDtosFiltered);
}
else
{
var lessons = await repository.GetPagedListAsync(
pageSize: query.PageSize,
pageIndex: query.PageIndex
);
var lessonDtos = _mapper.Map>(lessons.Items);
return new ApiResponse(true, lessonDtos);
}
}
catch (Exception ex)
{
return new ApiResponse($"获取所有课程时发生错误: {ex.Message}");
}
}
public async Task GetAsync(Guid id)
{
try
{
var lesson = await _work.GetRepository().GetFirstOrDefaultAsync(
predicate: l => l.Id == id);
if (lesson == null)
{
return new ApiResponse("课程未找到。");
}
var lessonDto = _mapper.Map(lesson);
return new ApiResponse(true, lessonDto);
}
catch (Exception ex)
{
return new ApiResponse($"获取课程时发生错误: {ex.Message}");
}
}
public async Task AddAsync(LessonDto model)
{
try
{
// 检查是否已存在同名课程
var existingLesson = await _work.GetRepository().GetFirstOrDefaultAsync(
predicate: l => l.Title == model.Title && l.TextbookID == model.TextBookId);
if (existingLesson != null)
{
return new ApiResponse($"课程 '{model.Title}' 在该教材中已存在。");
}
var lesson = _mapper.Map(model);
await _work.GetRepository().InsertAsync(lesson);
if (await _work.SaveChangesAsync() > 0)
{
return new ApiResponse(true, lesson.Id);
}
return new ApiResponse("添加课程失败。");
}
catch (Exception ex)
{
return new ApiResponse($"添加课程时发生错误: {ex.Message}");
}
}
public async Task UpdateAsync(LessonDto model)
{
try
{
var existingLesson = await _work.GetRepository().GetFirstOrDefaultAsync(
predicate: l => l.Id == model.Id);
if (existingLesson == null)
{
return new ApiResponse("课程未找到。");
}
// 检查是否要修改为已存在的课程名称(排除当前课程)
var lessonWithSameName = await _work.GetRepository().GetFirstOrDefaultAsync(
predicate: l => l.Title == model.Title && l.TextbookID == model.TextBookId && l.Id != model.Id);
if (lessonWithSameName != null)
{
return new ApiResponse($"课程名称 '{model.Title}' 在该教材中已被其他课程使用。");
}
_mapper.Map(model, existingLesson);
_work.GetRepository().Update(existingLesson);
if (await _work.SaveChangesAsync() > 0)
{
var lessonDto = _mapper.Map(existingLesson);
return new ApiResponse(true, lessonDto);
}
return new ApiResponse("更新课程失败。");
}
catch (Exception ex)
{
return new ApiResponse($"更新课程时发生错误: {ex.Message}");
}
}
public async Task DeleteAsync(Guid id)
{
try
{
var existingLesson = await _work.GetRepository().GetFirstOrDefaultAsync(
predicate: l => l.Id == id);
if (existingLesson == null)
{
return new ApiResponse("课程未找到。");
}
_work.GetRepository().Delete(existingLesson);
if (await _work.SaveChangesAsync() > 0)
{
return new ApiResponse(true, "课程删除成功。");
}
return new ApiResponse("删除课程失败。");
}
catch (Exception ex)
{
return new ApiResponse($"删除课程时发生错误: {ex.Message}");
}
}
}
}