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));
            }
Beispiel #2
0
            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));
            }
Beispiel #3
0
            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.
            }
Beispiel #4
0
            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));
            }
Beispiel #5
0
            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");
            }
Beispiel #6
0
            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);
            }
Beispiel #7
0
            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));
            }
Beispiel #9
0
            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));
            }
Beispiel #10
0
            // 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"));
            }
Beispiel #12
0
            //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"));
            }
Beispiel #13
0
            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"));
            }
Beispiel #15
0
            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"));
            }
Beispiel #16
0
            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"));
            }
Beispiel #17
0
            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"));
            }
Beispiel #18
0
            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);
            }
Beispiel #19
0
            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"));
            }
Beispiel #20
0
            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");
            }
Beispiel #21
0
            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);
            }
Beispiel #22
0
            //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));
            }