using AutoMapper; using Entities.Contracts; using Entities.DTO; using Microsoft.AspNetCore.Identity; using Org.BouncyCastle.Crypto; using SharedDATA.Api; namespace TechHelper.Services { public class ClassService : IClassService { private readonly IUnitOfWork _work; private readonly IMapper _mapper; private readonly UserManager _userManager; public ClassService(IUnitOfWork work, IMapper mapper, UserManager userManager) { _work = work; _mapper = mapper; _userManager = userManager; } public async Task AddAsync(ClassDto model) { try { var @class = _mapper.Map(model); await _work.GetRepository().InsertAsync(@class); if (await _work.SaveChangesAsync() > 0) { return new ApiResponse(true, _mapper.Map(@class)); } return new ApiResponse("添加班级失败。"); } catch (Exception ex) { return new ApiResponse($"添加班级时发生错误: {ex.Message}"); } } // 实现 IBaseService.DeleteAsync public async Task DeleteAsync(Guid id) // ID 类型现在是 int { try { var existingClass = await _work.GetRepository().GetFirstOrDefaultAsync( predicate: c => c.Id == id); if (existingClass == null) { return new ApiResponse("班级未找到。"); } _work.GetRepository().Delete(existingClass); if (await _work.SaveChangesAsync() > 0) { return new ApiResponse(true, "班级删除成功。"); } return new ApiResponse("删除班级失败。"); } catch (Exception ex) { return new ApiResponse($"删除班级时发生错误: {ex.Message}"); } } // 实现 IBaseService.GetAllAsync public async Task GetAllAsync(QueryParameter query) { try { var repository = _work.GetRepository(); // 构建查询条件 (可根据 QueryParameter.Search 进行筛选) Func, IOrderedQueryable> orderBy = null; // 默认不排序 if (query.Search != null && !string.IsNullOrWhiteSpace(query.Search)) { // 在 Name 字段中进行模糊搜索 var classes = await repository.GetPagedListAsync( orderBy: orderBy, pageSize: query.PageSize, pageIndex: query.PageIndex ); var classDtosFiltered = _mapper.Map>(classes); return new ApiResponse(true, classDtosFiltered); } else { // 如果没有搜索条件,获取所有(带分页) var classes = await repository.GetPagedListAsync( orderBy: orderBy, pageSize: query.PageSize, pageIndex: query.PageIndex ); var classDtos = _mapper.Map>(classes); return new ApiResponse(true, classDtos); } } catch (Exception ex) { return new ApiResponse($"获取所有班级时发生错误: {ex.Message}"); } } // 实现 IBaseService.GetAsync public async Task GetAsync(Guid id) { try { var @class = await _work.GetRepository().GetFirstOrDefaultAsync( predicate: c => c.Id == id); if (@class == null) { return new ApiResponse("班级未找到。"); } var classDto = _mapper.Map(@class); return new ApiResponse(true, classDto); } catch (Exception ex) { return new ApiResponse($"获取班级时发生错误: {ex.Message}"); } } public async Task GetUserClass(Guid user) { var existingUserClass = await _work.GetRepository().GetFirstOrDefaultAsync(predicate: c=>c.StudentId == user); if(existingUserClass == null) return new ApiResponse("该学生没有班级。"); var classId = await _work.GetRepository().GetFirstOrDefaultAsync(predicate: c => c.Id == existingUserClass.ClassId); return new ApiResponse(true, (classId.Grade, classId.Number)); } // 实现 IBaseService.UpdateAsync public async Task UpdateAsync(ClassDto model) { try { // 首先通过 ID 查找现有实体 var existingClass = await _work.GetRepository().GetFirstOrDefaultAsync( predicate: c => c.Number == model.Class); if (existingClass == null) { return new ApiResponse("班级未找到。"); } _mapper.Map(model, existingClass); _work.GetRepository().Update(existingClass); if (await _work.SaveChangesAsync() > 0) { return new ApiResponse(true, _mapper.Map(existingClass)); } return new ApiResponse("更新班级失败。"); } catch (Exception ex) { return new ApiResponse($"更新班级时发生错误: {ex.Message}"); } } public async Task UserRegister(UserRegistrationToClassDto user) { try { var usrinfo = await _userManager.FindByEmailAsync(user.User); var existingClass = await _work.GetRepository().GetFirstOrDefaultAsync( predicate: (c => c.Number == user.ClassId && c.Grade == user.GradeId)); var finduser = await _userManager.FindByEmailAsync(user.User); if (existingClass == null || finduser == null || usrinfo == null) { return new ApiResponse("班级未找到。"); } if (user.Roles == UserRoles.Student) { var addresult = await _work.GetRepository().InsertAsync(new ClassStudent { StudentId = finduser.Id, ClassId = existingClass.Id }); await _userManager.AddToRoleAsync(usrinfo, UserRoles.Student.ToString()); } else if (user.Roles == UserRoles.Teacher) { var classTeacher = new ClassTeacher { ClassId = existingClass.Id, TeacherId = existingClass.Id, SubjectTaught = user.SubjectArea }; await _work.GetRepository().InsertAsync(classTeacher); await _userManager.AddToRoleAsync(usrinfo, UserRoles.Teacher.ToString()); } if (await _work.SaveChangesAsync() > 0) { return new ApiResponse(true, _mapper.Map(existingClass)); } return new ApiResponse("班级注册失败。"); } catch (Exception ex) { return new ApiResponse($"注册进班级时发生错误: {ex.Message}"); } } } }