using AutoMapper; using Entities.Contracts; using Entities.DTO; using Microsoft.EntityFrameworkCore; using SharedDATA.Api; namespace TechHelper.Services.Beta { public class SchoolService : ISchoolService { private readonly IUnitOfWork _work; private readonly IMapper _mapper; public SchoolService(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 schools = await repository.GetPagedListAsync( predicate: s => s.SchoolName.Contains(query.Search), pageSize: query.PageSize, pageIndex: query.PageIndex ); var schoolDtosFiltered = _mapper.Map>(schools.Items); return new ApiResponse(true, schoolDtosFiltered); } else { var schools = await repository.GetPagedListAsync( pageSize: query.PageSize, pageIndex: query.PageIndex ); var schoolDtos = _mapper.Map>(schools.Items); return new ApiResponse(true, schoolDtos); } } catch (Exception ex) { return new ApiResponse($"获取所有学校时发生错误: {ex.Message}"); } } public async Task GetAsync(Guid id) { try { var school = await _work.GetRepository().GetFirstOrDefaultAsync( predicate: s => s.Id == id, include: i => i.Include(s => s.Grades)); if (school == null) { return new ApiResponse("学校未找到。"); } var schoolDto = _mapper.Map(school); return new ApiResponse(true, schoolDto); } catch (Exception ex) { return new ApiResponse($"获取学校时发生错误: {ex.Message}"); } } public async Task GetSchoolByNameAsync(string schoolName) { try { var school = await _work.GetRepository().GetFirstOrDefaultAsync( predicate: s => s.SchoolName == schoolName, include: i =>i.Include(s => s.Grades)); if (school == null) { return new ApiResponse("学校未找到。"); } var schoolDto = _mapper.Map(school); return new ApiResponse(true, schoolDto); } catch (Exception ex) { return new ApiResponse($"根据名称获取学校时发生错误: {ex.Message}"); } } public async Task AddAsync(SchoolDto model) { try { // 检查是否已存在同名学校 var existingSchool = await _work.GetRepository().GetFirstOrDefaultAsync( predicate: s => s.SchoolName == model.SchoolName); if (existingSchool != null) { return new ApiResponse($"学校 '{model.SchoolName}' 已存在。"); } var school = _mapper.Map(model); await _work.GetRepository().InsertAsync(school); if (await _work.SaveChangesAsync() > 0) { return new ApiResponse(true, _mapper.Map(school)); } return new ApiResponse("添加学校失败。"); } catch (Exception ex) { return new ApiResponse($"添加学校时发生错误: {ex.Message}"); } } public async Task UpdateAsync(SchoolDto model) { try { var existingSchool = await _work.GetRepository().GetFirstOrDefaultAsync( predicate: s => s.Id == model.Id); if (existingSchool == null) { return new ApiResponse("学校未找到。"); } _mapper.Map(model, existingSchool); _work.GetRepository().Update(existingSchool); if (await _work.SaveChangesAsync() > 0) { return new ApiResponse(true, _mapper.Map(existingSchool)); } return new ApiResponse("更新学校失败。"); } catch (Exception ex) { return new ApiResponse($"更新学校时发生错误: {ex.Message}"); } } public async Task DeleteAsync(Guid id) { try { var existingSchool = await _work.GetRepository().GetFirstOrDefaultAsync( predicate: s => s.Id == id); if (existingSchool == null) { return new ApiResponse("学校未找到。"); } _work.GetRepository().Delete(existingSchool); if (await _work.SaveChangesAsync() > 0) { return new ApiResponse(true, "学校删除成功。"); } return new ApiResponse("删除学校失败。"); } catch (Exception ex) { return new ApiResponse($"删除学校时发生错误: {ex.Message}"); } } } }