public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername()); var attendee = new ActivityAttendee { AppUser = user, Activity = request.Activity, IsHost = true }; request.Activity.Attendees.Add(attendee); // Включаем изменение (добавление новых данных) в контекст базы данных _context.Activities.Add(request.Activity); // Фактически сохраняем данные в таблицу базу данных var result = await _context.SaveChangesAsync() > 0; if (!result) { return(Result <Unit> .Failure("Failed to create activity")); } // Фактически, мы ничего не делаем, но эта конструкция позволяет уведомить // вызывающий класс, что команда была успешно выполнена return(Result <Unit> .Success(Unit.Value)); }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { //Find current user var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUserName()); //Newly created activiy has as attendee current user var attendee = new ActivityAttendee { AppUser = user, Activity = request.Activity, IsHost = true }; //Add attendee to activiy request.Activity.Attendees.Add(attendee); //Create attendee _context.Activities.Add(request.Activity); //Save changes returns a number of entries added to DB. var result = await _context.SaveChangesAsync() > 0; if (!result) { return(Result <Unit> .Failure("Fail to create activity")); } return(Result <Unit> .Success(Unit.Value)); }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername()); var attendee = new ActivityAttendee { AppUser = user, Activity = request.Activity, IsHost = true }; request.Activity.Attendees.Add(attendee); _context.Activities.Add(request.Activity); //adding activity in context in memory, not in database - async not required var result = await _context.SaveChangesAsync() > 0; //if nothing has been written to the database this will be false if (!result) { return(Result <Unit> .Failure("Failed to create activiity")); } return(Result <Unit> .Success(Unit.Value)); //equivalent to nothing, lets API controller know we're finished. }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername()); var attendee = new ActivityAttendee { AppUser = user, Activity = request.Activity, IsHost = true }; request.Activity.Attendees.Add(attendee); _context.Activities.Add(request.Activity); var result = await _context.SaveChangesAsync() > 0; if (!result) { return(Result <Unit> .Failure("Failed to create activity")); } return(Result <Unit> .Success(Unit.Value)); }
public async Task <Unit> Handle(Command command, CancellationToken cancellationToken) { var activity = new Activity { Id = command.Id, Title = command.Title, Description = command.Description, Category = command.Category, Date = command.Date, City = command.City, Venue = command.Venue }; var appUser = await _databaseContext.Users.SingleOrDefaultAsync(x => x.UserName == _userAccessor.GetCurrentUsername()); var activityAttendee = new ActivityAttendee { AppUser = appUser, Activity = activity, IsHost = true, DateJoined = DateTime.Now, }; _databaseContext.Activities.Add(activity); _databaseContext.ActivityAttendees.Add(activityAttendee); var dataSuccessfullySaved = await _databaseContext.SaveChangesAsync() > 0; if (dataSuccessfullySaved) { return(Unit.Value); } throw new Exception("Problem creating new activity"); }
public async Task <ActivityDto> Handle(Command request, CancellationToken cancellationToken) { var activity = _mapper.Map <ActivityData, Activity>(request.Activity); var username = _currentUserAccessor.GetCurrentUsername(); var user = _context.Users.FirstOrDefaultAsync(x => x.UserName == username, cancellationToken).Result; await _context.Activities.AddAsync(activity, cancellationToken); var attendee = new ActivityAttendee { AppUser = user, Activity = activity, DateJoined = DateTime.Now, IsHost = true, ActivityId = activity.Id, AppUserId = user.Id }; await _context.ActivityAttendees.AddAsync(attendee, cancellationToken); await _context.SaveChangesAsync(cancellationToken); var activityToReturn = _mapper.Map <Activity, ActivityDto>(activity); return(activityToReturn); }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { var user = await _context.Users.FirstOrDefaultAsync (x => x.UserName == _userAccessor.GetUsername()); var attendee = new ActivityAttendee { AppUser = user, Activity = request.Activity, IsHost = true }; request.Activity.Attendees.Add(attendee); _context.Activities.Add(request.Activity); var result = await _context.SaveChangesAsync() > 0; if (!result) { return(Result <Unit> .Failure("Failed to create the activity!")); } //equivalent to nothing, just lets API controller know //we're finished with whatever is going on inside here return(Result <Unit> .Success(Unit.Value)); }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername()); // Make the link! var attendee = new ActivityAttendee { AppUserId = user.Id, AppUser = user, ActivityId = request.Activity.Id, Activity = request.Activity, IsHost = true }; // Add the link to the activity! request.Activity.Attendees.Add(attendee); _context.Activities.Add(request.Activity); // Returns an integer of how many state entries changed in the DB. var res = await _context.SaveChangesAsync() > 0; if (!res) { return(Result <Unit> .Failure("Failed to create activity")); } // We are finished! return(Result <Unit> .Success(Unit.Value)); }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername()); var attendee = new ActivityAttendee { AppUser = user, Activity = request.Activity, IsHost = true }; request.Activity.Attendees.Add(attendee); _context.Activities.Add(request.Activity); var result = await _context.SaveChangesAsync() > 0; if (!result) { return(Result <Unit> .Failure("Failed to create activity")); } // THIS IS EQUIVALENT TO NOTHING, just a way to let our API controller know we have finished on this return(Result <Unit> .Success(Unit.Value)); }
// Result of type Mediator Unit public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { // _context is the database object // get access to user object from db var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername()); // create a new attendee who host/start the activity var attendee = new ActivityAttendee { AppUser = user, Activity = request.Activity, IsHost = true }; // add the host to the attendee of Activity request.Activity.Attendees.Add(attendee); _context.Activities.Add(request.Activity); // check result of saving changes to database var result = await _context.SaveChangesAsync() > 0; if (!result) { return(Result <Unit> .Failure("Failed to create activity")); } return(Result <Unit> .Success(Unit.Value)); // Unit.Value is equivalent to returning nothing, only notifying success }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { //Get activity var activity = await _context.Activities .Include(a => a.Attendees).ThenInclude(u => u.AppUser) .FirstOrDefaultAsync(x => x.Id == request.Id); if (activity == null) { return(null); } //Find user by user name var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccesor.GetUserName()); if (user == null) { return(null); } var hostUsername = activity.Attendees.FirstOrDefault(x => x.IsHost)?.AppUser?.UserName; //Verify if user is attending activity var attendance = activity.Attendees.FirstOrDefault(x => x.AppUser.UserName == user.UserName); //Attendee is the host if (attendance != null && hostUsername == user.UserName) { //If he abandon activiy, then this one is cancelled activity.IsCancelled = !activity.IsCancelled; } //Normal attendee if (attendance != null && hostUsername != user.UserName) { //Remove from attendee list activity.Attendees.Remove(attendance); } //Attendance not going to activity if (attendance == null) { //Create new attendance attendance = new ActivityAttendee { AppUser = user, Activity = activity, IsHost = false }; activity.Attendees.Add(attendance); } var result = await _context.SaveChangesAsync() > 0; return(result ? Result <Unit> .Success(Unit.Value) : Result <Unit> .Failure("Problem updating attendance")); }
//Update activity, imamo 3 slucaja, kada je Host, kada je gost i kada ne postoji activity public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { //dobavimo activity iz baze sa datim Id koji prosledjujemo var activity = await _context.Activities .Include(a => a.Attendees).ThenInclude(u => u.AppUser) .FirstOrDefaultAsync(x => x.Id == request.Id); if (activity == null) { return(null); } //dobavljamo trenutnog ulogovanog user-a var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername()); if (user == null) { return(null); } //gledamo ko je Host ako ga ima uopste var hostUsername = activity.Attendees.FirstOrDefault(x => x.IsHost)?.AppUser?.UserName; //provera da li je nas user uopste ige na tu activity var attendance = activity.Attendees.FirstOrDefault(x => x.AppUser.UserName == user.UserName); //ako je host onda moze da cancel-uje ili da ponovo otvori activity if (attendance != null && hostUsername == user.UserName) { activity.IsCancelled = !activity.IsCancelled; } //ako je gost samo sklonimo aktivnost iz planiranih aktivnosti if (attendance != null && hostUsername != user.UserName) { activity.Attendees.Remove(attendance); } //ako je nema onda je kreiramo if (attendance == null) { attendance = new ActivityAttendee { AppUser = user, Activity = activity, IsHost = false }; activity.Attendees.Add(attendance); } //cuvamo u bazu var result = await _context.SaveChangesAsync() > 0; //vracamo rezultat sta god da je return(result ? Result <Unit> .Success(Unit.Value) : Result <Unit> .Failure("Problem updating attendance")); }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { // get the activity and its related data with eager loading (using EntityFrameworkCore) var activity = await _context.Activities .Include(a => a.Attendees).ThenInclude(u => u.AppUser) .FirstOrDefaultAsync(x => x.Id == request.Id); if (activity == null) { return(null); // 404 not found } // get the user making this request var user = await _context.Users.FirstAsync(x => x.UserName == _userAccessor.GetUsername()); if (user == null) { return(null); // 404 not found } // not async method: activity already loaded from db // defensive approach: optional chaining var hostUsername = activity.Attendees.FirstOrDefault(x => x.IsHost)?.AppUser?.UserName; var attendance = activity.Attendees.FirstOrDefault(x => x.AppUser.UserName == user.UserName); // if the host is making this request, then toggle the IsCancelled status if (attendance != null && hostUsername == user.UserName) { activity.IsCancelled = !activity.IsCancelled; } // if an attendee is making this request, remove the attendee from activity if (attendance != null && hostUsername != user.UserName) { activity.Attendees.Remove(attendance); } // if a non-attendee user is making this request, add that user to the attendee list if (attendance == null) { attendance = new ActivityAttendee { AppUser = user, Activity = activity, IsHost = false }; activity.Attendees.Add(attendance); } // persist the changes to database var result = await _context.SaveChangesAsync() > 0; // return the result (Unit.Value means nothing) return(result ? Result <Unit> .Success(Unit.Value) : Result <Unit> .Failure("Problem updating attendance")); }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { // find activity (include users) var activity = await _context.Activities .Include(a => a.Attendees).ThenInclude(u => u.AppUser) .SingleOrDefaultAsync(x => x.Id == request.Id); if (activity == null) { return(null); } // find current user var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername()); if (user == null) { return(null); } // find host of username from [activity] by IsHost var hostUsername = activity.Attendees.FirstOrDefault(x => x.IsHost)?.AppUser?.UserName; // find attendance of username from [activity] by current user var attendance = activity.Attendees.FirstOrDefault(x => x.AppUser.UserName == user.UserName); // current user is host if (attendance != null && hostUsername == user.UserName) { activity.IsCancelled = !activity.IsCancelled; } // current user isn't host if (attendance != null && hostUsername != user.UserName) { activity.Attendees.Remove(attendance); } // no attendance by activity that joined it. if (attendance == null) { attendance = new ActivityAttendee { AppUser = user, Activity = activity, IsHost = false, }; activity.Attendees.Add(attendance); } var result = await _context.SaveChangesAsync() > 0; return(result ? Result <Unit> .Success(Unit.Value) : Result <Unit> .Failure("Problem updating attendance")); }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { var activity = await context.Activities .Include(a => a.Attendees) .ThenInclude(u => u.AppUser) .FirstOrDefaultAsync(x => x.Id == request.Id); if (activity == null) { return(null); } var user = await context.Users .FirstOrDefaultAsync(x => x.UserName == userAccessor.GetUserName()); if (user == null) { return(null); } var hostUsername = activity.Attendees .FirstOrDefault(x => x.IsHost)?.AppUser?.UserName; var attendance = activity.Attendees .FirstOrDefault(x => x.AppUser.UserName == user.UserName); if (attendance != null && hostUsername == user.UserName) { activity.IsCancelled = !activity.IsCancelled; } if (attendance != null && hostUsername != user.UserName) { activity.Attendees.Remove(attendance); } if (attendance == null) { attendance = new ActivityAttendee { AppUser = user, Activity = activity, IsHost = false }; activity.Attendees.Add(attendance); } var result = await context.SaveChangesAsync() > 0; return(result ? Result <Unit> .Success(Unit.Value) : Result <Unit> .Failure("Problem updating attendnace")); }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { //Gets the correct activity with a GUID var activity = await Context.Activities .Include(a => a.Attendees) .ThenInclude(u => u.AppUser) .SingleOrDefaultAsync(x => x.Id == request.Id, cancellationToken); // Returns BadRequest if (activity == null) { return(null); } // Get the calling users username, through IUserAccessor. var user = await Context.Users.FirstOrDefaultAsync(x => x.UserName == UserAccessor.GetUsername()); // Returns BadRequest if (user == null) { return(null); } // The host of the activity var hostUsername = activity.Attendees.FirstOrDefault(x => x.IsHost)?.AppUser?.UserName; // Get the attendance var attendance = activity.Attendees.FirstOrDefault(x => x.AppUser.UserName == user.UserName); // If the caller is host, either cancel or reopen activity. if (attendance != null && hostUsername == user.UserName) { activity.IsCancelled = !activity.IsCancelled; } // If caller is not host but attending, remove from activity. if (attendance != null && hostUsername != user.UserName) { activity.Attendees.Remove(attendance); } // If caller has not attended, add him to the activity. if (attendance == null) { attendance = new ActivityAttendee() { AppUser = user, Activity = activity, IsHost = false }; activity.Attendees.Add(attendance); } var results = await Context.SaveChangesAsync(cancellationToken) > 0; // Check if inserting was successfull. return(results ? Result <Unit> .Success(Unit.Value) : Result <Unit> .Failure("Problem updating attendance")); }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { var activity = await _context.Activities .Include(a => a.Attendees).ThenInclude(u => u.AppUser) .FirstOrDefaultAsync(x => x.Id == request.Id); if (activity == null) { return(null); } var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername()); if (user == null) { return(null); } var hostUsername = activity.Attendees.FirstOrDefault(x => x.IsHost)?.AppUser?.UserName; var attendance = activity.Attendees.FirstOrDefault(x => x.AppUser.UserName == user.UserName); if (attendance != null && hostUsername == user.UserName) //the user is the host { activity.IsCancelled = !activity.IsCancelled; //toggle the status of cancell } if (attendance != null && hostUsername != user.UserName) // the user is not the host { activity.Attendees.Remove(attendance); //remove user from activity } if (attendance == null) //add user to the activity { attendance = new ActivityAttendee { AppUser = user, Activity = activity, IsHost = false }; activity.Attendees.Add(attendance); } var result = await _context.SaveChangesAsync() > 0; //save changes to db return(result ? Result <Unit> .Success(Unit.Value) : Result <Unit> .Failure("Problem Updating Attendance")); }
public async Task <Unit> Handle(Command request, CancellationToken cancellationToken) { var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUserName()); var attendee = new ActivityAttendee { AppUser = user, Activity = request.Activity, IsHost = true }; request.Activity.Attendees.Add(attendee); _context.Activities.Add(request.Activity); await _context.SaveChangesAsync(); return(Unit.Value); }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { var user = await this._dataContext.Users.FirstOrDefaultAsync(user => user.UserName == this._iUserAccessor.GetUserName()); var attendee = new ActivityAttendee { AppUser = user, Activity = request.Activity, IsHost = true }; request.Activity.Attendees.Add(attendee); this._dataContext.Activities.Add(request.Activity); return(await this._dataContext.SaveChangesAsync() > 0 ? Result <Unit> .Success(Unit.Value) : Result <Unit> .Failure("Failed to create activity")); }
public async Task <Unit> Handle(Command command, CancellationToken cancellationToken) { var activity = await _databaseContext.Activities.FindAsync(command.Id); if (activity == null) { throw new RESTException(HttpStatusCode.NotFound, new { Activity = "Not found" }); } var appUser = await _databaseContext.Users .SingleOrDefaultAsync(x => x.UserName == _userAccessor.GetCurrentUsername()); var alreadyAttending = await _databaseContext.ActivityAttendees .AnyAsync(x => x.ActivityId == activity.Id && x.AppUserId == appUser.Id); if (alreadyAttending) { throw new RESTException(HttpStatusCode.NotFound, new { Attendance = "Already attending this activity" }); } var newAttendance = new ActivityAttendee { Activity = activity, AppUser = appUser, IsHost = false, DateJoined = DateTime.Now, }; _databaseContext.ActivityAttendees.Add(newAttendance); var attendanceSuccessfullyCreated = await _databaseContext.SaveChangesAsync() > 0; if (attendanceSuccessfullyCreated) { return(Unit.Value); } throw new Exception("Problem while trying to attend an activity"); }
public async Task <ActivityDto> Handle(Command request, CancellationToken cancellationToken) { // get the current event from db var activity = await _context.Activities .Include(x => x.Attendees) .ThenInclude(a => a.AppUser) .FirstOrDefaultAsync(x => x.Id == request.Id); var username = _currentUserAccessor.GetCurrentUsername(); // get the currently logged in user var user = await _userManager.FindByNameAsync(_currentUserAccessor.GetCurrentUsername()); // create the attendance - check to see if it exists first var attendance = await _context.ActivityAttendees.FirstOrDefaultAsync( x => x.ActivityId == activity.Id && x.AppUserId == user.Id, cancellationToken); if (attendance == null) { attendance = new ActivityAttendee() { Activity = activity, ActivityId = activity.Id, AppUser = user, AppUserId = user.Id, DateJoined = DateTime.Now, IsHost = false }; await _context.ActivityAttendees.AddAsync(attendance, cancellationToken); await _context.SaveChangesAsync(cancellationToken); } var activityDto = _mapper.Map <Activity, ActivityDto>(activity); return(activityDto); }
//Task<Unit> ne vraca nista ali govori da je ova akcija zavrsena public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername()); var attendee = new ActivityAttendee { AppUser = user, Activity = request.Activity, IsHost = true }; request.Activity.Attendees.Add(attendee); //odavde cuvamo novu activity u activities tabeli, a gore smo napravili vezu sa user-om _context.Activities.Add(request.Activity); var result = await _context.SaveChangesAsync() > 0; //saveChanges vvraca integer if (!result) { return(Result <Unit> .Failure("Failed to create activity")); } return(Result <Unit> .Success(Unit.Value)); }