private User GetUser(TeamBuilderContext context, string username, string password, string firstName, string lastName, int age)
        {
            var user = context.Users
                       .SingleOrDefault(u => u.Username.Equals(username, StringComparison.OrdinalIgnoreCase));

            if (user != null && user.IsDeleted != false)
            {
                throw new InvalidOperationException(string.Format(UsernameTakenExceptionMessage, username));
            }

            user = new User();
            base.AssignValueArgument <User>(user, string.Format(UsernameNotValidExceptionMessage, username), u => u.Username = username);
            base.AssignValueArgument <User>(user, string.Format(PasswordNotValidExceptionMessage, password), u => u.Password = password);
            base.AssignValueArgument <User>(user, AgeNotValidExceptionMessage, u => u.Age = age);
            user.FirstName = firstName;
            user.LastName  = lastName;

            return(user);
        }
        private void AcceptInvitation(string teamName)
        {
            using (TeamBuilderContext context = new TeamBuilderContext())
            {
                User loggedUser = AuthenticationManager.GetCurrentUser();
                Team teamToJoin = context.Teams.SingleOrDefault(team => team.Name == teamName);

                context.Users.Attach(loggedUser);
                loggedUser.Teams.Add(teamToJoin);

                Invitation invitationToAccept = context.Invitations
                                                .SingleOrDefault(invitation => invitation.TeamId == teamToJoin.Id &&
                                                                 invitation.InvitedUserId == loggedUser.Id &&
                                                                 invitation.IsActive);

                invitationToAccept.IsActive = false;
                context.SaveChanges();
            }
        }
        public string Execute(string[] args)
        {
            Check.CheckLength(6, args);

            AuthenticationManager.Authorize();

            string eventName    = args[0];
            string description  = args[1];
            string startDateStr = args[2] + " " + args[3];
            string endDateStr   = args[4] + " " + args[5];

            DateTime startDate = ValidateDateParsing(startDateStr);
            DateTime endDate   = ValidateDateParsing(endDateStr);

            if (startDate >= endDate)
            {
                throw new ArgumentException(Constants.ErrorMessages.StartDateIsAfterEndDate);
            }

            var currentUser = AuthenticationManager.GetGurrentUser();

            var newEvent = new Event()
            {
                Name        = eventName,
                Description = description,
                StartDate   = startDate,
                EndDate     = endDate,
                CreatorId   = currentUser.Id
            };

            if (!IsValid(newEvent))
            {
                throw new ArgumentException(Constants.ErrorMessages.InvalidEventArgs);
            }

            using (var ctx = new TeamBuilderContext())
            {
                ctx.Events.Add(newEvent);
                ctx.SaveChanges();
            }

            return($"Event {eventName} was created successfully!");
        }
        private void AddTeamToEvent(string eventName, string teamName)
        {
            using (TeamBuilderContext context = new TeamBuilderContext())
            {
                Team  team = context.Teams.FirstOrDefault(t => t.Name == teamName);
                Event evnt = context.Events
                             .OrderByDescending(e => e.StartDate) // latest startDate event
                             .FirstOrDefault(e => e.Name == eventName);

                // Check if team is already added to event
                if (evnt.ParticipatingTeams.Any(t => t.Name == teamName))
                {
                    throw new InvalidOperationException(Constants.ErrorMessages.CannotAddSameTeamTwice);
                }

                evnt.ParticipatingTeams.Add(team);
                context.SaveChanges();
            }
        }
        public string Execute(string[] inputArgs)
        {
            Check.CheckLength(0, inputArgs);

            AuthenticationManager.Authorize();

            User currentUser = AuthenticationManager.GetCurrentUser();

            using (var context = new TeamBuilderContext())
            {
                currentUser           = context.Users.FirstOrDefault(u => u.Username == currentUser.Username);
                currentUser.IsDeleted = true;
                context.SaveChanges();

                AuthenticationManager.Logout();
            }

            return($"User {currentUser.Username} was deleted successfully");
        }
        public void Execute(string[] parameters)
        {
            if (parameters.Length != 1)
            {
                throw new InvalidOperationException(ConsoleMessages.InvalidArgumentCount);
            }
            if (LogedUser.User == null)
            {
                throw new InvalidOperationException(ConsoleMessages.LogInFirst);
            }

            TeamBuilderContext ctx = new TeamBuilderContext();
            var user = ctx.Users.Where(u => u.Id == LogedUser.User.Id).FirstOrDefault();

            ctx.Users.Remove(user);
            ctx.SaveChanges();
            SucessMessage = $"User {user.Username} was deleted successfully!";
            LogedUser.Logout();
        }
Example #7
0
        public void RegisterUser(string username, string password, string firstName, string lastName, int age, Gender gender)
        {
            using (var context = new TeamBuilderContext())
            {
                User user = new User
                {
                    Username  = username,
                    Password  = password,
                    FirstName = firstName,
                    LastName  = lastName,
                    Age       = age,
                    Gender    = gender
                };

                context.Users.Add(user);

                context.SaveChanges();
            }
        }
Example #8
0
        //EventTeam <eventName>
        internal static string Execute(string[] data)
        {
            Check.CheckLength(1, data);

            var eventName = data[0];

            bool eventExists = CommandHelper.IsEventExisting(eventName);

            if (!eventExists)
            {
                throw new ArgumentException(string.Format(Constants.ErrorMessages.EventNotFound, eventName));
            }

            var eventTeams = new StringBuilder();

            using (var context = new TeamBuilderContext())
            {
                var @event = context.Events
                             .Where(e => e.Name == eventName)
                             .Select(e => new
                {
                    e.Name,
                    e.StartDate,
                    e.EndDate,
                    e.Description,
                    TeamNames = e.ParticipatingEventTeams.
                                Select(p => p.Team.Name).ToArray()
                })
                             .OrderByDescending(e => e.StartDate)
                             .First();

                eventTeams.AppendLine($"{@event.Name} {@event.StartDate} {@event.EndDate}");
                eventTeams.AppendLine($"{@event.Description}");

                eventTeams.AppendLine("Teams:");
                foreach (var name in @event.TeamNames)
                {
                    eventTeams.AppendLine($"--{name}");
                }

                return(eventTeams.ToString().TrimEnd());
            }
        }
Example #9
0
        public string DeleteUser()
        {
            ShouldLogIn();
            using (var db = new TeamBuilderContext())
            {
                var user = AuthenticationManager.GetCurrentUser(db);

                AuthenticationManager.Logout();


                var userToDelete = db.Users.Find(user.Id);

                userToDelete.IsDeleted = true;

                db.SaveChanges();

                return(user.Username);
            }
        }
        public string Execute(string[] args)
        {
            Check.CheckLength(0, args);
            AuthenticationManager.Authorize();

            User currentUser = AuthenticationManager.GetCurrentUser();

            using (TeamBuilderContext context = new TeamBuilderContext())
            {
                currentUser.IsDeleted = true;

                context.Users.Update(currentUser);
                context.SaveChanges();

                AuthenticationManager.LogOut();
            }

            return($"User {currentUser.Username} was deleted successfully!");
        }
Example #11
0
        public string Execute(string[] args)
        {
            Check.CheckLenght(0, args);

            AuthenticationManager.Authorize();

            var currentUser = AuthenticationManager.GetCurrentUser();

            using (var context = new TeamBuilderContext())
            {
                currentUser.IsDeleted = true;
                context.Users.Update(currentUser);
                context.SaveChanges();

                AuthenticationManager.Logout();;
            }

            return(string.Format(Constants.SuccessMessages.Delete, currentUser.UserName));
        }
Example #12
0
        private User CorrectUser(string username, string password)
        {
            using (var db = new TeamBuilderContext())
            {
                if (db.Users.SingleOrDefault(u => u.Username == username) == null)
                {
                    return(null);
                }

                var user = db.Users.SingleOrDefault(u => u.Username == username);

                if (user.Password.CompareTo(password) != 0 || user.IsDeleted == true)
                {
                    return(null);
                }

                return(user);
            }
        }
Example #13
0
        public string Execute(string[] inputArgs)
        {
            Check.CheckLength(0, inputArgs);

            AuthenticationManager.Authorize();

            User currentUser = AuthenticationManager.GetCurrentUser();

            using (var db = new TeamBuilderContext())
            {
                db.Entry(currentUser).State = EntityState.Unchanged;

                currentUser.IsDeleted = true;
                db.SaveChanges();

                AuthenticationManager.Logout();
            }
            return($"User {currentUser.Username} was deleted successfully!");
        }
        private void AcceptInvite(User currentUser, string teamName)
        {
            using (TeamBuilderContext context = new TeamBuilderContext())
            {
                var teamId = context.Teams.FirstOrDefault(e => e.Name == teamName).Id;

                var userTeam = new UserTeam()
                {
                    UserId = currentUser.Id,
                    TeamId = teamId
                };

                var invite = context.Invitations.FirstOrDefault(e => e.InvitedUserId == currentUser.Id && e.TeamId == teamId);
                invite.IsActive = false;

                context.UserTeams.Add(userTeam);
                context.SaveChanges();
            }
        }
        private string ShowTeam(string teamName)
        {
            using (TeamBuilderContext context = new TeamBuilderContext())
            {
                Team teamToShow = context.Teams.SingleOrDefault(team => team.Name == teamName);

                StringBuilder sb = new StringBuilder();

                sb.AppendLine($"[{teamToShow.Name}] [{teamToShow.Acronym}]");
                sb.AppendLine("Members:");

                foreach (User member in teamToShow.Members)
                {
                    sb.AppendLine($"--{member.Username}");
                }

                return(sb.ToString());
            }
        }
Example #16
0
        private static void CreateCurrentEvent(User currentUser, string eventName, string description, DateTime startDate, DateTime endDate)
        {
            var currentEvent = new Event()
            {
                Name        = eventName,
                Description = description,
                StartDate   = startDate,
                EndDate     = endDate,
                CreatorId   = currentUser.Id
            };

            using (var db = new TeamBuilderContext())
            {
                ValidateEvent(currentEvent, db);

                db.Events.Add(currentEvent);
                db.SaveChanges();
            }
        }
        public static bool IsUserExisting(string username)
        {
            using (TeamBuilderContext context = new TeamBuilderContext())
            {
                var user = context.Users.FirstOrDefault(u => u.Username == username);

                if (user == null)
                {
                    return(false);
                }

                if (user.IsDeleted)
                {
                    return(false);
                }

                return(true);
            }
        }
        public string Execute(string[] inputArgs)
        {
            //•	AcceptInvite <teamName>

            Check.CheckLength(1, inputArgs);

            AuthenticationManager.Authorize();

            string teamName = inputArgs[0];

            using (var context = new TeamBuilderContext())
            {
                var team = context.Teams.FirstOrDefault(t => t.Name == teamName);

                if (team == null)
                {
                    throw new ArgumentException(Constants.ErrorMessages.TeamNotFound, teamName);
                }
                var currentUser = AuthenticationManager.GetCurrentUser();

                if (!context.Invitations.Any(i => i.InvitedUserId == currentUser.Id && i.TeamId == team.Id))
                {
                    throw new ArgumentException(Constants.ErrorMessages.InviteNotFound, teamName);
                }

                var invitation =
                    context.Invitations.FirstOrDefault(
                        i => i.InvitedUserId == currentUser.Id && i.Team.Name == teamName);

                context.Invitations.Remove(invitation);

                context.UserTeams.Add(new UserTeam
                {
                    UserId = currentUser.Id,
                    TeamId = team.Id
                });

                context.SaveChanges();

                return($"User {currentUser.Username} joined team {teamName}!");
            }
        }
        private static void AddTeamTo(string eventName, string teamName)
        {
            using (var db = new TeamBuilderContext())
            {
                var events = db
                             .Events
                             .Where(e => e.Name == eventName)
                             .ToList();

                var eventId = default(int);

                if (events.Count > 1)
                {
                    DateTime?latestDate = events
                                          .Where(e => e.StartDate.HasValue)
                                          .Max(e => e.StartDate)
                                          .Value;

                    eventId = events
                              .Single(e => e.StartDate == latestDate)
                              .Id;
                }
                else
                {
                    eventId = events.First().Id;
                }

                var teamId = db
                             .Teams
                             .First(t => t.Name == teamName)
                             .Id;

                var currentTeamEvent = new TeamEvent()
                {
                    EventId = eventId,
                    TeamId  = teamId
                };

                db.TeamEvents.Add(currentTeamEvent);
                db.SaveChanges();
            }
        }
        public string Execute(IUserSession userSession, params string[] data)
        {
            User user = userSession.User;

            if (user == null)
            {
                throw new InvalidOperationException(Constants.ErrorMessages.LoginFirst);
            }

            var context = new TeamBuilderContext();

            var userFromDatabase = context.Users.FirstOrDefault(u => u.UserId == user.UserId);

            userFromDatabase.IsDeleted = true;
            context.SaveChanges();

            userSession.LogOut();

            return($"User {user.Username} was deleted successfully!");
        }
        private string LoadEvent(string eventName)
        {
            StringBuilder sb = new StringBuilder();

            using (TeamBuilderContext ctx = new TeamBuilderContext())
            {
                Event ev = ctx.Events.Include("ParticipatingTeams").OrderByDescending(e => e.StartDate).FirstOrDefault(e => e.Name == eventName);
                sb.AppendLine($"{ev.Name} {ev.StartDate} {ev.EndDate} {ev.Description}");
                sb.AppendLine($"Teams: {ev.ParticipatingTeams.Count()}");
                foreach (var team in ev.ParticipatingTeams)
                {
                    sb.AppendLine($"--{team.Name}, Members: {team.Members.Count}");
                    foreach (var member in team.Members)
                    {
                        sb.AppendLine($"----{member.Username} {member.Age}");
                    }
                }
            }
            return(sb.ToString().Trim());
        }
Example #22
0
 private void SendInvitation(string teamName, string username)
 {
     using (TeamBuilderContext ctx = new TeamBuilderContext())
     {
         Team       team = ctx.Teams.FirstOrDefault(t => t.Name == teamName);
         User       user = ctx.Users.FirstOrDefault(u => u.Username == username);
         Invitation inv  = new Invitation
         {
             TeamId        = team.Id,
             InvitedUserId = user.Id
         };
         if (team.CreatorId == user.Id)
         {
             inv.IsActive = false;
             team.Members.Add(user);
         }
         ctx.Invitations.Add(inv);
         ctx.SaveChanges();
     }
 }
Example #23
0
        public void Create(string teamName, string acronym, string description)
        {
            using (var context = new TeamBuilderContext())
            {
                string currentUserUsername = AuthenticationService.GetCurrentUser().Username;

                User creator = context.Users.FirstOrDefault(u => u.Username == currentUserUsername);

                Team newTeam = new Team
                {
                    Name        = teamName,
                    Acronym     = acronym,
                    Description = description,
                    Creator     = creator
                };

                context.Teams.Add(newTeam);
                context.SaveChanges();
            }
        }
Example #24
0
        public static void AcceptInvite(string teamName)
        {
            using (TeamBuilderContext db = new TeamBuilderContext())
            {
                var team = db.Teams.FirstOrDefault(t => t.Name == teamName);
                var user = AuthenticationManager.GetCurrentUser();

                db.Users.Attach(user);

                user.Teams.Add(team);

                Invitation invitation = db.Invitations.FirstOrDefault(i => i.TeamId == team.Id &&
                                                                      i.InvitedUserId == user.Id &&
                                                                      i.IsActive);

                invitation.IsActive = false;

                db.SaveChanges();
            }
        }
 private void SendInvite(string teamName, string username)
 {
     using (TeamBuilderContext context = new TeamBuilderContext())
     {
         Team       team       = context.Teams.FirstOrDefault(t => t.Name == teamName);
         User       user       = context.Users.FirstOrDefault(u => u.Username == username);
         Invitation invitation = new Invitation()
         {
             InvitedUser = user,
             Team        = team
         };
         if (team.CreatorId == user.Id)
         {
             team.Members.Add(user);
             invitation.IsActive = false;
         }
         context.Invitations.Add(invitation);
         context.SaveChanges();
     }
 }
Example #26
0
        public static string ShowDetails(string teamName)
        {
            using (TeamBuilderContext db = new TeamBuilderContext())
            {
                var    team   = db.Teams.FirstOrDefault(t => t.Name == teamName);
                string result = $"{teamName} {team.Acronym}\n";

                if (team.Members.Any())
                {
                    result += "Members:";
                }

                foreach (var teamMember in team.Members)
                {
                    result += $"\n--{teamMember.Username}";
                }

                return(result);
            }
        }
        private static void KickUser(string teamName, string userName)
        {
            using (var db = new TeamBuilderContext())
            {
                var team = db
                           .Teams
                           .First(t => t.Name == teamName);

                var userTobeKicked = db
                                     .Users
                                     .First(u => u.Username == userName);

                var membership = db
                                 .UserTeams
                                 .First(t => t.TeamId == team.Id && t.UserId == userTobeKicked.Id);

                db.UserTeams.Remove(membership);
                db.SaveChanges();
            }
        }
        public string Excecute(string[] inputArgs)
        {
            string teamName = inputArgs[0];

            using (var db = new TeamBuilderContext())
            {
                Team team = db.Teams.Include(t => t.Creator)
                            .SingleOrDefault(t => t.Name == teamName);

                if (team == null)
                {
                    throw new ArgumentException($"Team {teamName} not found!");
                }

                if (Session.User == null)
                {
                    throw new InvalidOperationException("You should login first!");
                }

                Invitation invite = db.Invitations
                                    .SingleOrDefault(i => i.TeamId == team.Id);

                if (invite == null || invite.IsActive == false)
                {
                    throw new ArgumentException($"Invite from {teamName} is not found!");
                }

                User user = Session.User;

                if (invite.InvitedUserId != user.Id)
                {
                    throw new ArgumentException($"You were not invited!");
                }


                invite.IsActive = false;
                db.SaveChanges();

                return($"Invite from {teamName} declined.");
            }
        }
Example #29
0
        // <eventName>
        public override string Execute(TeamBuilderContext context)
        {
            base.CmdArgsExactLengthValidation(ArgsExactLength);

            var eventName   = this.CmdArgs[0];
            var currentDate = DateTime.Now;
            var @event      = context.Events
                              .Select(e => new
            {
                e.Name,
                e.StartDate,
                e.EndDate,
                e.Description,
                Teams = e.EventTeams.Select(et => et.Team.Name)
            })
                              .Where(e => e.StartDate != null)
                              .OrderByDescending(e => e.StartDate)
                              .FirstOrDefault(e => e.Name.Equals(eventName, StringComparison.OrdinalIgnoreCase));

            if (@event == null)
            {
                throw new ArgumentException(string.Format(EventNotFoundExceptionMessage, eventName));
            }

            var sb = new StringBuilder();

            sb.AppendLine($"{@event.Name} {@event.StartDate} {@event?.EndDate}");

            if (@event.Description != null)
            {
                sb.AppendLine(@event.Description);
            }

            sb.AppendLine("Teams:");
            foreach (var name in @event.Teams)
            {
                sb.AppendLine($"-{name}");
            }

            return(sb.ToString().TrimEnd());
        }
Example #30
0
        //[no args]
        public static string Execute(string[] data)
        {
            Check.CheckLenght(0, data);

            //if there is no logged user = exception
            AuthenticationManager.Autorized();

            var currentUser = AuthenticationManager.GetCurrentUser();

            using (var db = new TeamBuilderContext())
            {
                var user = db.Users.SingleOrDefault(c => c.Username == currentUser.Username);

                user.IsDeleted = true;
                db.SaveChanges();

                AuthenticationManager.Logout();
            }

            return($"User {currentUser.Username} was deleted successfully!");
        }