public async Task <ResultDto> ExecuteAsync(RequestAddNewMessageDto request)
        {
            return(await Task.Run(async() =>
            {
                try
                {
                    var chatroom = await _context.Chatrooms
                                   .FirstOrDefaultAsync(c => c.Guid == request.Guid);

                    var user = await _context.Users.FindAsync(request.UserId);

                    #region --Validation--
                    if (user == null || chatroom == null)
                    {
                        return new ResultDto()
                        {
                            Status = Common.Enums.ServiceStatus.NotFound,
                        };
                    }

                    if (!_context.UserInChatrooms.Any(u => u.ChatroomId == chatroom.Id && u.UserId == request.UserId))
                    {
                        return new ResultDto()
                        {
                            Status = Common.Enums.ServiceStatus.AccessDenied,
                        };
                    }

                    #endregion


                    Message message = new Message()
                    {
                        Chatroom = chatroom,
                        ChatroomID = chatroom.Id,
                        SendDate = DateTime.Now,
                        Sender = user,
                        SenderId = request.UserId,
                        Text = request.Text,
                        MessageType = MessageType.Massage
                    };

                    await _context.Messages.AddAsync(message);

                    await _context.SaveChangesAsync();

                    return new ResultDto()
                    {
                        Status = Common.Enums.ServiceStatus.Success
                    };
                }
                catch (Exception)
                {
                    return new ResultDto()
                    {
                        Status = Common.Enums.ServiceStatus.SystemError,
                    };
                }
            }));
        }
        public async Task <ResultDto <Guid> > ExecuteAsync(long MyUserId, Guid ChatroomGuid)
        {
            return(await Task.Run(async() =>
            {
                try
                {
                    var chatroom = await _context.Chatrooms
                                   .FirstOrDefaultAsync(c => c.Guid == ChatroomGuid);
                    #region validation
                    if (chatroom == null || chatroom.ChatroomType == Common.Enums.ChatroomType.PV)
                    {
                        return new ResultDto <Guid>()
                        {
                            Status = Common.Enums.ServiceStatus.NotFound,
                        };
                    }

                    if ((!_context.AdminInChatrooms.Any(a => a.UserId == MyUserId && a.ChatroomId == chatroom.Id)) && chatroom.CreatorId != MyUserId)
                    {
                        return new ResultDto <Guid>()
                        {
                            Status = Common.Enums.ServiceStatus.AccessDenied,
                        };
                    }
                    #endregion


                    chatroom.JoinLinkGuid = Guid.NewGuid();

                    await _context.SaveChangesAsync();

                    return new ResultDto <Guid>()
                    {
                        Data = chatroom.JoinLinkGuid,
                        Status = Common.Enums.ServiceStatus.Success,
                    };
                }
                catch (Exception)
                {
                    return new ResultDto <Guid>()
                    {
                        Status = Common.Enums.ServiceStatus.SystemError,
                    };
                }
            }));
        }
Exemplo n.º 3
0
        public async Task <ResultDto <ResultUserSignup> > Execute(RequestUserSignupDto request)
        {
            return(await Task.Run(async() =>
            {
                if (_context.Users.Any(u => u.MobileNumber == request.MobileNumber))
                {
                    return new ResultDto <ResultUserSignup>()
                    {
                        Status = ServiceStatus.Error,
                        Message = "این شماره قبلا ثبت شده است!!"
                    };
                }


                try
                {
                    User newUser = new User()
                    {
                        MobileNumber = request.MobileNumber,
                        Name = request.Name,
                        Password = await request.Password.ToHashedAsync(),
                        InsertTime = DateTime.Now,
                        LastOnline = DateTime.Now,
                        UserInRole = UserInRole.User,
                        HashKey = await Guid.NewGuid().ToString().ToHashedAsync()
                    };

                    await _context.Users.AddAsync(newUser);

                    #region --Save Image--
                    if (request.ImageFile != null)
                    {
                        var upResult = await request.ImageFile.UploadFileAsync("Images/UserImages/", _environment);
                        if (upResult.Status)
                        {
                            var newImage = new UserImage()
                            {
                                ImageName = upResult.FileNameAddress,
                                User = newUser,
                                UserId = newUser.Id,
                                InsertTime = DateTime.Now,
                            };

                            await _context.UserImages.AddAsync(newImage);
                        }
                        else
                        {
                            return new ResultDto <ResultUserSignup>()
                            {
                                Status = ServiceStatus.SaveFileError,
                            };
                        }
                    }
                    #endregion



                    await _context.SaveChangesAsync();

                    return new ResultDto <ResultUserSignup>()
                    {
                        Data = new ResultUserSignup()
                        {
                            UserId = newUser.Id,
                        },
                        Status = ServiceStatus.Success
                    };
                }
                catch (Exception)
                {
                    return new ResultDto <ResultUserSignup>()
                    {
                        Status = ServiceStatus.SystemError
                    };
                }
            }));
        }
        public async Task <ResultDto> ExecuteAsync(RequestCreateNewGroupService request)
        {
            return(await Task.Run(async() =>
            {
                try
                {
                    #region Find User
                    var Creator = await _context.Users.FindAsync(request.UserId);
                    #endregion

                    #region Validate
                    if (Creator == null)
                    {
                        return new ResultDto()
                        {
                            Status = Common.Enums.ServiceStatus.NotFound
                        };
                    }

                    if (String.IsNullOrWhiteSpace(request.GroupName))
                    {
                        return new ResultDto()
                        {
                            Status = Common.Enums.ServiceStatus.Error,
                            Message = "نام وارد شده اشتباه اسنت"
                        };
                    }

                    #endregion

                    #region --Create Chatroom--
                    Chatroom newChatroom = new Chatroom
                    {
                        Name = request.GroupName,
                        ChatroomType = Common.Enums.ChatroomType.Group,
                        CreatorId = request.UserId,
                        Creator = Creator,
                        Guid = Guid.NewGuid(),
                        InsertTime = DateTime.Now,
                    };
                    await _context.Chatrooms.AddAsync(newChatroom);

                    Message info = new Message()
                    {
                        Chatroom = newChatroom,
                        ChatroomID = newChatroom.Id,
                        MessageType = MessageType.Info,
                        SendDate = DateTime.Now,
                        Text = $"گروه {newChatroom.Name} ایجاد شد"
                    };

                    await _context.Messages.AddAsync(info);
                    #endregion

                    #region --add image to group--
                    if (request.ImageFile != null)
                    {
                        var upRes = await request.ImageFile.UploadFileAsync("Images/ChatoomImage/", _environment);
                        if (!upRes.Status)
                        {
                            return new ResultDto()
                            {
                                Status = Common.Enums.ServiceStatus.SaveFileError,
                            };
                        }

                        ChatroomImage chatroomImage = new ChatroomImage()
                        {
                            Chatroom = newChatroom,
                            ChatroomId = newChatroom.Id,
                            ImageName = upRes.FileNameAddress,
                            InsertTime = DateTime.Now,
                        };

                        await _context.ChatroomImages.AddAsync(chatroomImage);
                    }
                    #endregion

                    #region --Add Creator To Group--

                    UserInChatroom userInChatroom = new UserInChatroom()
                    {
                        Chatroom = newChatroom,
                        ChatroomId = newChatroom.Id,
                        User = Creator,
                        UserId = request.UserId,
                    };

                    await _context.UserInChatrooms.AddAsync(userInChatroom);

                    #endregion

                    await _context.SaveChangesAsync();

                    return new ResultDto()
                    {
                        Status = Common.Enums.ServiceStatus.Success,
                    };
                }
                catch (Exception)
                {
                    return new ResultDto()
                    {
                        Status = Common.Enums.ServiceStatus.SystemError,
                    };
                }
            }));
        }
Exemplo n.º 5
0
        public async Task <ResultDto <Guid> > ExecuteAsync(long MyUserId, string TargetUsername)
        {
            return(await Task.Run(async() =>
            {
                try
                {
                    var targetUser = await _context.Users
                                     .FirstOrDefaultAsync(u => u.Username.ToLower() == TargetUsername.ToLower());

                    var myUser = await _context.Users.FindAsync(MyUserId);

                    if (targetUser == null || myUser == null)
                    {
                        return new ResultDto <Guid>()
                        {
                            Status = Common.Enums.ServiceStatus.NotFound,
                        };
                    }

                    Chatroom oldChatroom = await _context.Chatrooms
                                           .Include(c => c.UserInChatrooms)
                                           .Where(c => c.ChatroomType == Common.Enums.ChatroomType.PV)
                                           .FirstOrDefaultAsync(c => c.UserInChatrooms.Any(u => u.UserId == targetUser.Id) && c.UserInChatrooms.Any(u => u.UserId == MyUserId));


                    Guid Data = new Guid();
                    if (oldChatroom != null)
                    {
                        Data = oldChatroom.Guid;
                    }
                    else
                    {
                        Chatroom newChatroom = new Chatroom()
                        {
                            ChatroomType = Common.Enums.ChatroomType.PV,
                            Guid = Guid.NewGuid(),
                            InsertTime = DateTime.Now,
                        };
                        await _context.Chatrooms.AddAsync(newChatroom);
                        //await _context.SaveChangesAsync();

                        UserInChatroom myUserInChatroom = new UserInChatroom()
                        {
                            Chatroom = newChatroom,
                            ChatroomId = newChatroom.Id,
                            User = myUser,
                            UserId = myUser.Id
                        };

                        UserInChatroom targetUserInChatroom = new UserInChatroom()
                        {
                            Chatroom = newChatroom,
                            ChatroomId = newChatroom.Id,
                            User = targetUser,
                            UserId = targetUser.Id
                        };

                        await _context.UserInChatrooms.AddAsync(myUserInChatroom);
                        await _context.UserInChatrooms.AddAsync(targetUserInChatroom);


                        await _context.SaveChangesAsync();

                        Data = newChatroom.Guid;
                    }


                    return new ResultDto <Guid>()
                    {
                        Data = Data,
                        Status = Common.Enums.ServiceStatus.Success,
                    };
                }
                catch (Exception)
                {
                    return new ResultDto <Guid>()
                    {
                        Status = Common.Enums.ServiceStatus.SystemError,
                    };
                }
            }));
        }
        public async Task <ResultDto <JoinedChatDetailDto> > ExecuteAsync(long MyUserId, Guid ChatroomJoinGuid)
        {
            return(await Task.Run(async() =>
            {
                try
                {
                    var chatroom = await _context.Chatrooms
                                   .FirstOrDefaultAsync(c => c.JoinLinkGuid == ChatroomJoinGuid);

                    var user = await _context.Users.FindAsync(MyUserId);

                    #region validation
                    if (chatroom == null || chatroom.ChatroomType == Common.Enums.ChatroomType.PV || user == null)
                    {
                        return new ResultDto <JoinedChatDetailDto>()
                        {
                            Status = Common.Enums.ServiceStatus.NotFound,
                        };
                    }

                    if (_context.UserInChatrooms.Any(u => u.UserId == MyUserId && u.ChatroomId == chatroom.Id))
                    {
                        return new ResultDto <JoinedChatDetailDto>()
                        {
                            Status = Common.Enums.ServiceStatus.AccessDenied,
                        };
                    }
                    #endregion


                    UserInChatroom newUserInChatroom = new UserInChatroom()
                    {
                        Chatroom = chatroom,
                        ChatroomId = chatroom.Id,
                        User = user,
                        UserId = MyUserId
                    };

                    await _context.UserInChatrooms.AddAsync(newUserInChatroom);

                    Message info = new Message()
                    {
                        Chatroom = chatroom,
                        ChatroomID = chatroom.Id,
                        MessageType = MessageType.Info,
                        SendDate = DateTime.Now,
                        Text = $" {user.Name} به گروه پیوست",
                    };

                    await _context.Messages.AddAsync(info);

                    await _context.SaveChangesAsync();


                    JoinedChatDetailDto Data = new JoinedChatDetailDto()
                    {
                        ChatroomName = chatroom.Name,
                        Guid = chatroom.Guid,
                    };

                    #region find image

                    var chatroomImage = await _context.ChatroomImages
                                        .FirstOrDefaultAsync(c => c.ChatroomId == chatroom.Id);

                    string chatroomImageName = "Images/ChatroomImages/Defaut.png";
                    if (chatroomImage != null)
                    {
                        chatroomImageName = chatroomImage.ImageName;
                    }
                    #endregion

                    Data.ImageName = chatroomImageName;

                    #region find last message

                    var lastmessage = await _context.Messages
                                      .Where(m => m.ChatroomID == chatroom.Id)
                                      .OrderBy(m => m.SendDate)
                                      .LastOrDefaultAsync();



                    #endregion
                    Data.LastMessage = lastmessage?.Text;
                    Data.LastMessageTime = lastmessage?.SendDate;

                    return new ResultDto <JoinedChatDetailDto>()
                    {
                        Status = Common.Enums.ServiceStatus.Success,
                        Data = Data,
                    };
                }
                catch (Exception)
                {
                    return new ResultDto <JoinedChatDetailDto>()
                    {
                        Status = Common.Enums.ServiceStatus.SystemError,
                    };
                }
            }));
        }