Exemplo n.º 1
0
        public async Task <IActionResult> Save([FromBody] TeamSaveModel model)
        {
            try
            {
                if (!model.id.HasValue)
                {
                    model.SetAddedByUserId(GetCurrentUserId());
                }

                model.SetAssignedByUserId(GetCurrentUserId());

                return(Ok(await _teamsMethods.Save(model)));
            }
            catch (ClientException ex)
            {
                return(BadRequest(new { message = ex.Message }));
            }
            catch (Exception ex)
            {
                return(StatusCode(500, new { message = ex.Message }));
            }
        }
Exemplo n.º 2
0
        //public Superviser GetTeamSupervisorLogs(TeamSaveModel model)
        //{

        //}

        public async Task <Team> Save(TeamSaveModel model)
        {
            string supervisorId  = model.supervisorId;
            string assignedById  = model.GetAssignedByUserId();
            string addedByUserId = model.GetAddedByUserId();

            if (supervisorId == null || assignedById == null)
            {
                throw new Exception("supervisor and assigned by user are required");
            }

            if (model.userIds == null || model.userIds.Count == 0)
            {
                throw new ClientException("at least one team member is required");
            }

            if (model.id.HasValue)
            {
                // check if name already exist
                bool nameExist = _context.Teams.Any(k => k.ID != model.id.Value && k.Name == model.name);

                if (nameExist)
                {
                    throw new ClientException($"team exist under name {model.name}");
                }

                // # save team #

                // get team

                var dbTeam = _context.Teams.FirstOrDefault(k => k.ID == model.id.Value);

                if (dbTeam == null)
                {
                    throw new ClientException("record not found");
                }

                if (dbTeam.SupervisorId != supervisorId)
                {
                    // supervisor has changed
                    string removedSupervisorId = dbTeam.SupervisorId;
                    string addedSupervisorId   = supervisorId;

                    // end session and notify removed supervisor
                    await observerHub.Clients.User(removedSupervisorId).SendAsync("SessionEnd", $"You have been removed from supervising a team");

                    await notificationMethods.Send(assignedById, removedSupervisorId, $"You have been removed from supervising team \"{dbTeam.Name}\"", NotificationType.Important);

                    var dbRemovedSupervisor = _context.Users.First(k => k.Id == removedSupervisorId);

                    dbRemovedSupervisor.NotificationFlag = true;
                    dbRemovedSupervisor.SecurityStamp    = Guid.NewGuid().ToString("D");

                    // end session and notify new supervisor
                    await observerHub.Clients.User(addedSupervisorId).SendAsync("SessionEnd", "You have been assigned as a supervisor to a team");

                    await notificationMethods.Send(assignedById, addedSupervisorId, $"You have been assigned as a supervisor to team \"{dbTeam.Name}\"", NotificationType.Important);

                    var dbNewSupervisor = _context.Users.First(k => k.Id == addedSupervisorId);

                    dbNewSupervisor.NotificationFlag = true;
                    dbNewSupervisor.SecurityStamp    = Guid.NewGuid().ToString("D");

                    // move current to logs
                    _context.SupervisorLogs.Add(new DataSets.SupervisorLog()
                    {
                        TeamId           = dbTeam.ID,
                        UserId           = dbTeam.SupervisorId,
                        DateAssigned     = dbTeam.DateAssigned,
                        AssignedByUserId = dbTeam.AssignedByUserId,
                    });

                    // set new values
                    dbTeam.SupervisorId     = supervisorId;
                    dbTeam.DateAssigned     = DateTime.Now;
                    dbTeam.AssignedByUserId = assignedById;
                }

                // set model values
                dbTeam.Name = model.name;

                // add/remove team members
                await AddRemoveTeamsUsersFromContext(dbTeam, model.userIds, assignedById);


                // save changes
                _context.SaveChanges();

                // return the record
                return(GetById(dbTeam.ID));
            }
            else
            {
                // # new team #

                // check if name already exist
                bool nameExist = _context.Teams.Any(k => k.Name == model.name);

                // validation
                if (nameExist)
                {
                    throw new ClientException($"team exist under name {model.name}");
                }

                if (addedByUserId == null)
                {
                    throw new Exception("added user claim was not provided");
                }

                DataSets.Team dbTeam = new DataSets.Team()
                {
                    Name             = model.name,
                    AddedByUserId    = addedByUserId,
                    AssignedByUserId = assignedById,
                    DateAssigned     = DateTime.Now,
                    DateAdded        = DateTime.Now,
                    SupervisorId     = supervisorId,
                };

                // end session and notify new supervisor
                await observerHub.Clients.User(supervisorId).SendAsync("SessionEnd", "You have been assigned as a supervisor to a team");

                await notificationMethods.Send(addedByUserId, supervisorId, $"You have been assigned as a supervisor to team \"{dbTeam.Name}\"", NotificationType.Important);


                var dbSupervisor = _context.Users.First(k => k.Id == supervisorId);

                dbSupervisor.NotificationFlag = true;
                dbSupervisor.SecurityStamp    = Guid.NewGuid().ToString("D");

                // add the team
                _context.Teams.Add(dbTeam);

                // save changes
                _context.SaveChanges();

                // set team members
                await AddRemoveTeamsUsersFromContext(dbTeam, model.userIds, addedByUserId);

                // save changes on teamsteams
                _context.SaveChanges();

                return(GetById(dbTeam.ID));
            }
        }