Ejemplo n.º 1
0
        public async Task <GroupDto> AddGroup(int userId, GroupDto group)
        {
            if (group == null)
            {
                return(null);
            }
            var newGroup = new Group()
            {
                Name         = group.Name,
                CreatedAt    = DateTime.Now,
                Description  = group.Description,
                GroupCreator = await _unitOfWork.Repository <User>().GetAsync(userId),
                Avatar       = group.Avatar
            };

            foreach (var memberId in group.SelectedMembersId)
            {
                newGroup.Members.Add(await _unitOfWork.Repository <User>().GetAsync(memberId));
            }
            newGroup.Members.Add(newGroup.GroupCreator);

            _unitOfWork.Repository <Group>().Add(newGroup);
            await _unitOfWork.SaveAsync();

            var newGr = _unitOfWork.Repository <Group>().All().LastOrDefault();

            if (newGr.Avatar != "")
            {
                string folderPath = HttpContext.Current.Server.MapPath("~/App_Data/AttachedFiles/");

                if (!Directory.Exists(folderPath))
                {
                    Directory.CreateDirectory(folderPath);
                }

                var filePath = Directory.EnumerateFiles(folderPath, newGr.Avatar + ".*", SearchOption.AllDirectories)
                               .Where(s => s.EndsWith(".jpg") || s.EndsWith(".png") || s.EndsWith(".bmp") || s.EndsWith(".gif")).FirstOrDefault();

                if (filePath != null)
                {
                    string fileType = filePath.Substring(filePath.LastIndexOf('.') + 1);
                    string destPath = HttpContext.Current.Server.MapPath("~/App_Data/Avatars/") + newGr.Id + "_g_avatar." + fileType;
                    try
                    {
                        File.Delete(destPath);
                        File.Move(filePath, destPath);
                        newGr.Avatar = destPath.Substring(destPath.LastIndexOf('\\') + 1);
                    }
                    catch
                    {
                        ;                         //Do nothing
                    }
                    _unitOfWork.Repository <Group>().Attach(newGr);
                }
            }
            await _unitOfWork.SaveAsync();

            await _chatHubService.AddGroup(userId);

            return(GroupDto.FromModel(newGr));
        }