public async Task <Unit> Handle(Command request, CancellationToken cancellationToken) { var course = await _context.Courses.Where(x => x.Id == request.CourseId).FirstOrDefaultAsync(); if (course == null) { throw new RestException(HttpStatusCode.BadRequest, new { Grupa = "Nie znaleziono kursu" }); } var user = await _context.Users.Where(x => x.Id == request.UserId).FirstOrDefaultAsync(); if (user == null) { throw new RestException(HttpStatusCode.BadRequest, new { Użytkownik = "Nie znaleziono użytkownika" }); } var courseMainLecturer = await _context.CourseMainLecturers .Where(x => x.CourseId == course.Id && x.MainLecturerId == user.Id) .FirstOrDefaultAsync(); if (courseMainLecturer != null) { throw new RestException(HttpStatusCode.BadRequest, new { Użytkownik = "Użytkownik jest już głównym prowadzącym tego kursu" }); } courseMainLecturer = new CourseMainLecturer() { CourseId = course.Id, MainLecturerId = user.Id }; _context.CourseMainLecturers.Add(courseMainLecturer); var success = await _context.SaveChangesAsync() > 0; if (success) { return(Unit.Value); } throw new Exception("Problem podczas dodawania"); }
public async Task <User> Handle(Command request, CancellationToken cancellationToken) { if (await _context.Users.Where(x => x.Email == request.Email).AnyAsync()) { throw new RestException(HttpStatusCode.BadRequest, new { Email = "Email już istnieje" }); } if (await _context.Users.Where(x => x.UserName == request.UserName).AnyAsync()) { throw new RestException(HttpStatusCode.BadRequest, new { Nick = "Nick już istnieje" }); } if (request.Role == Role.MainLecturer || request.Role == Role.Lecturer || request.Role == Role.Administrator) { var currentUserName = _userAccessor.GetCurrentUsername(); if (currentUserName == null) { throw new RestException(HttpStatusCode.Unauthorized, new { Role = "Brak uprawnień do rejestracji konta z taką rolą" }); } var currentUser = await _userManager.FindByNameAsync(_userAccessor.GetCurrentUsername()); if (currentUser == null || currentUser.Role != Role.Administrator) { throw new RestException(HttpStatusCode.Unauthorized, new { Role = "Brak uprawnień do rejestracji konta z taką rolą" }); } } var user = new ApplicationUser() { LastName = request.LastName, FirstName = request.FirstName, Email = request.Email, UserName = request.UserName, Role = request.Role }; var result = await _userManager.CreateAsync(user, request.Password); var course = await _context.Courses.Where(x => x.Id == request.CourseId).FirstOrDefaultAsync(); if (course != null && request.Role == Role.MainLecturer) { var courseMainLecturer = new CourseMainLecturer() { CourseId = course.Id, MainLecturerId = user.Id, }; await _context.CourseMainLecturers.AddAsync(courseMainLecturer); await _context.SaveChangesAsync(); } if (result.Succeeded) { return(new User { FirstName = user.FirstName, LastName = user.LastName, Email = user.Email, UserName = user.UserName, Role = user.Role, Token = _jwtGenerator.CreateToken(user) }); } throw new Exception("Wystąpił błąd podczas tworzenia konta"); }