Пример #1
0
        public async Task <IActionResult> CreateChannel(CreateChannelViewModel model)
        {
            //check if the channel name is already taken
            var workspace = await _context.Workspace
                            .Where(ws => ws.Name == model.WorkspaceName).SingleOrDefaultAsync();

            List <Channel> workspaceChannels = await _context.Channel
                                               .Where(ch => ch.Workspace.ID == workspace.ID).ToListAsync();

            foreach (Channel ch in workspaceChannels)
            {
                if (ch.Name.Equals(model.Name))
                {
                    return(Json(new { result = "That name is already taken." }));
                }
            }

            //create channel, add current user to it and redirect to the new channel
            var channel = new Channel {
                Name = model.Name, General = false, OwnerID = model.OwnerID, Type = model.Type, Workspace = workspace
            };

            _context.Add(channel);
            var channelMembership = new ChannelMembership {
                JoinDate = DateTime.Now, Channel = channel, ChannelID = channel.ID, ApplicationUserID = model.OwnerID
            };

            _context.Add(channelMembership);
            await _context.SaveChangesAsync();

            return(Json(new { result = "Redirect", url = Url.Action("Messages/" + model.WorkspaceName + "/" + channel.Name, "Workspaces") }));
        }
Пример #2
0
        public async Task <IActionResult> InviteUser(ChannelInviteViewModel model)
        {
            //check if the user is already a member of the channel
            var channel = await _context.Channel.
                          Where(ch => ch.Name == model.ChannelName && ch.Workspace.Name == model.WorkspaceName).SingleOrDefaultAsync();

            var channelMembership = await _context.ChannelMembership.
                                    Where(chm => chm.ChannelID == channel.ID && chm.ApplicationUser.UserName == model.InvitedUserName).SingleOrDefaultAsync();

            if (channelMembership != null)
            {
                return(Json(new { result = "That user is already a member of this channel." }));
            }

            //check if the user is a member of the workspace
            var workspaceMembership = await _context.WorkspaceMembership.
                                      Where(wm => wm.Workspace.Name == model.WorkspaceName && wm.ApplicationUser.UserName == model.InvitedUserName).SingleOrDefaultAsync();

            if (workspaceMembership == null)
            {
                return(Json(new { result = "That user isn't a member of this workspace." }));
            }

            //add invited user to the channel
            var users = from u in _context.Users
                        select u;
            var user = (ApplicationUser)users.Where(u => u.UserName.Equals(model.InvitedUserName)).First();

            channelMembership = new ChannelMembership {
                JoinDate = DateTime.Now, Channel = channel, ChannelID = channel.ID, ApplicationUserID = user.Id
            };
            _context.Add(channelMembership);
            await _context.SaveChangesAsync();

            return(Json(new { result = "Redirect", url = Url.Action("Messages/" + model.WorkspaceName + "/" + channel.Name, "Workspaces") }));
        }