using AutoMapper; using Entities.Contracts; using Entities.DTO; using Microsoft.EntityFrameworkCore; using SharedDATA.Api; using TechHelper.Services; namespace TechHelper.Services.Beta { public class KeyPointService : IKeyPointService { private readonly IUnitOfWork _work; private readonly IMapper _mapper; public KeyPointService(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 keyPoints = await repository.GetPagedListAsync( predicate: k => k.Key.Contains(query.Search), pageSize: query.PageSize, pageIndex: query.PageIndex ); var keyPointDtosFiltered = _mapper.Map>(keyPoints); return new ApiResponse(true, keyPointDtosFiltered); } else { var keyPoints = await repository.GetPagedListAsync( pageSize: query.PageSize, pageIndex: query.PageIndex ); var keyPointDtos = _mapper.Map>(keyPoints); return new ApiResponse(true, keyPointDtos); } } catch (Exception ex) { return new ApiResponse($"获取所有知识点时发生错误: {ex.Message}"); } } public async Task GetAsync(Guid id) { try { var keyPoint = await _work.GetRepository().GetFirstOrDefaultAsync( predicate: k => k.Id == id); if (keyPoint == null) { return new ApiResponse("知识点未找到。"); } var keyPointDto = _mapper.Map(keyPoint); return new ApiResponse(true, keyPointDto); } catch (Exception ex) { return new ApiResponse($"获取知识点时发生错误: {ex.Message}"); } } public async Task AddAsync(KeyPointDto model) { try { var existingKeyPoint = await _work.GetRepository().GetFirstOrDefaultAsync( predicate: k => k.Key == model.Key && k.LessonID == model.LessonId); if (existingKeyPoint != null) { return new ApiResponse($"知识点 '{model.Key}' 在此课程中已存在。"); } var keyPoint = _mapper.Map(model); await _work.GetRepository().InsertAsync(keyPoint); if (await _work.SaveChangesAsync() > 0) { return new ApiResponse(true, _mapper.Map(keyPoint)); } return new ApiResponse("添加知识点失败。"); } catch (Exception ex) { return new ApiResponse($"添加知识点时发生错误: {ex.Message}"); } } public async Task UpdateAsync(KeyPointDto model) { try { var existingKeyPoint = await _work.GetRepository().GetFirstOrDefaultAsync( predicate: k => k.Id == model.Id); if (existingKeyPoint == null) { return new ApiResponse("知识点未找到。"); } _mapper.Map(model, existingKeyPoint); _work.GetRepository().Update(existingKeyPoint); if (await _work.SaveChangesAsync() > 0) { return new ApiResponse(true, _mapper.Map(existingKeyPoint)); } return new ApiResponse("更新知识点失败。"); } catch (Exception ex) { return new ApiResponse($"更新知识点时发生错误: {ex.Message}"); } } public async Task DeleteAsync(Guid id) { try { var existingKeyPoint = await _work.GetRepository().GetFirstOrDefaultAsync( predicate: k => k.Id == id); if (existingKeyPoint == null) { return new ApiResponse("知识点未找到。"); } _work.GetRepository().Delete(existingKeyPoint); if (await _work.SaveChangesAsync() > 0) { return new ApiResponse(true, "知识点删除成功。"); } return new ApiResponse("删除知识点失败。"); } catch (Exception ex) { return new ApiResponse($"删除知识点时发生错误: {ex.Message}"); } } public async Task GetKeyPointsByLessonIdAsync(Guid lessonId) { try { var keyPoints = await _work.GetRepository().GetAllAsync( predicate: k => k.LessonID == lessonId); var keyPointDtos = _mapper.Map>(keyPoints); return new ApiResponse(true, keyPointDtos); } catch (Exception ex) { return new ApiResponse($"根据课程ID获取知识点时发生错误: {ex.Message}"); } } } }