Example #1
0
        public void RespondToRequest(long requestID, string status)
        {
            var request = _context.Requests.FirstOrDefault(r => r.RequestId == requestID);

            request.Status = status;
            _context.Requests.Update(request);

            var SenderAccount    = _context.Accounts.Include(a => a.Circle).FirstOrDefault(s => request.SenderId == s.AccountId);
            var RecipientAccount = _context.Accounts.Include(a => a.Circle).FirstOrDefault(rec => request.RecepientId == rec.AccountId);


            if (request.Status == "Accepted")
            {
                var SenderCircleMember = new CircleMember
                {
                    CircleId  = RecipientAccount.Circle.CircleId,
                    AccountId = SenderAccount.AccountId
                };

                var RecipientCircleMember = new CircleMember
                {
                    CircleId  = SenderAccount.Circle.CircleId,
                    AccountId = RecipientAccount.AccountId
                };

                _context.Add(SenderCircleMember);
                _context.Add(RecipientCircleMember);
            }
            _context.SaveChanges();
        }
Example #2
0
        public Circle AddCircle(Circle circleToAdd)
        {
            var sql1 = @"
                        insert into [MessageBoard](BoardName, BoardDescription)
                        output inserted.*
                        values(@BoardName, @BoardDescription);
                      ";

            var sql2 = @"
                        insert into [Circle](UserId, CircleName, CircleDescription, BoardId)
                        output inserted.*
                        values(@UserId, @CircleName, @CircleDescription, @BoardId)
                        ";

            using (var db = new SqlConnection(connectionString))
            {
                var parameters1 = new { BoardName = circleToAdd.CircleName, BoardDescription = circleToAdd.CircleDescription };
                var result1     = db.QueryFirstOrDefault <MessageBoard>(sql1, parameters1);

                var parameters2 = new
                {
                    UserId            = circleToAdd.UserId,
                    CircleName        = circleToAdd.CircleName,
                    CircleDescription = circleToAdd.CircleDescription,
                    BoardId           = result1.MessageBoardId
                };
                var result2 = db.QueryFirstOrDefault <Circle>(sql2, parameters2);

                var newMember = new CircleMember {
                    UserId = circleToAdd.UserId, CircleId = result2.CircleId
                };
                AddMember(newMember);
                return(result2);
            }
        }
Example #3
0
        private void Seed()
        {
            using (var context = new InnerCircleDataContext(ContextOptions))
            {
                context.Database.EnsureDeleted();
                context.Database.EnsureCreated();

                // Create 3 accounts
                for (int i = 0; i < 3; i++)
                {
                    var account1 = new Account
                    {
                        Email = new Email
                        {
                            Value = $"Account{i}@email.com",
                        },
                        Username = new Username
                        {
                            Value = $"Account{i}Username"
                        },
                        Password = new Password
                        {
                            Value = "Password"
                        }
                    };

                    context.Add(account1);
                }
                context.SaveChanges();


                // Make accounts 1 and 2 members of circle
                var CircleMember = new CircleMember()
                {
                    CircleId = 1, AccountId = 2
                };
                var CircleMember2 = new CircleMember()
                {
                    CircleId = 2, AccountId = 2
                };
                context.Add(CircleMember2);
                context.Add(CircleMember);

                context.SaveChanges();

                for (int i = 0; i < 3; i++)
                {
                    var post = new Post()
                    {
                        AccountId   = 3,
                        Description = $"Post number {i} ",
                        MediaUrl    = $"url{i}",
                        Username    = $"Account3Username"
                    };
                    context.Add(post);
                    context.SaveChanges();
                }
            }
        }
        public async Task <ActionResult> ApproveCircleRequest([FromBody] CircleRequest model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var loggedInUser = await GetLoggedInUserAsync();

            if (loggedInUser == null)
            {
                return(Unauthorized());
            }
            if (!await _repo.IsOwner(loggedInUser.Id, model.CircleId))
            {
                return(Unauthorized());
            }
            var circleRequestFromRepo = await _repo.GetCircleRequest((int)model.AppUserId, model.CircleId);

            if (circleRequestFromRepo == null)
            {
                return(NotFound("リクエストが見つかりません"));
            }

            _repo.Delete(circleRequestFromRepo);
            //If already member, just remove request and create nothing
            if (await _repo.IsMember(model.AppUserId, model.CircleId))
            {
                await _repo.SaveAll();

                return(Ok());
            }

            var newCircleMember = new CircleMember()
            {
                AppUserId      = (int)model.AppUserId,
                Circle         = circleRequestFromRepo.Circle,
                CircleId       = model.CircleId,
                Role           = CircleRoleEnum.MEMBER,
                DateJoined     = DateTime.Now,
                DateLastActive = DateTime.Now
            };

            _repo.Add(newCircleMember);
            await _repo.SaveAll();

            await _notificationRepo.AddNotification(NotificationEnum.CircleRequestAccepted, model.AppUserId, newCircleMember);

            await _repo.SaveAll();

            return(CreatedAtRoute("GetCircleMember", new { userId = model.AppUserId, circleId = model.CircleId }, _mapper.Map <CircleMemberForReturnDto>(await _repo.GetCircleMember(model.AppUserId, model.CircleId))));
        }
Example #5
0
        public CircleMember AddMember(CircleMember circleMemberToAdd)
        {
            var sql = @"
                        insert into [CircleMember](UserId, CircleId)
                        output inserted.*
                        values(@UserId,@CircleId);
                      ";

            using (var db = new SqlConnection(connectionString))
            {
                var parameters = new { UserId = circleMemberToAdd.UserId, CircleId = circleMemberToAdd.CircleId };
                var result     = db.QueryFirstOrDefault <CircleMember>(sql, parameters);
                return(result);
            }
        }
        private async Task AddCircleRequestAcceptedNotification(int appUserId, CircleMember circleMember)
        {
            // var circleMember = record as CircleMember;
            if (circleMember == null)
            {
                return;
            }

            await AddNotificationIfNotExist(new Notification()
            {
                AppUserId         = (int)circleMember.AppUserId,
                NotificationType  = NotificationEnum.CircleRequestAccepted,
                RecordType        = "Circle",
                RecordId          = circleMember.CircleId,
                TargetRecordTitle = circleMember.Circle.Name,
//                Message = "コミュニティ『" + circleMember.Circle.Name + "』への参加が承認されました"
            });
        }
Example #7
0
        private void DeleteMemberAsync(Contact contact, ServiceName serviceName, RoleLists list, DeleteMemberCompletedEventHandler callback)
        {
            if (NSMessageHandler.MSNTicket == MSNTicket.Empty || AddressBook == null)
            {
                OnServiceOperationFailed(this, new ServiceOperationFailedEventArgs("DeleteMember", new MSNPSharpException("You don't have access right on this action anymore.")));
                return;
            }

            // check whether the update is necessary
            if (!contact.HasLists(list))
            {
                return;
            }

            RoleId memberRole = ContactList.GetMemberRole(list);

            if (memberRole == RoleId.None)
            {
                return;
            }

            Service service = AddressBook.SelectTargetService(serviceName);

            if (service == null)
            {
                AddServiceAsync(serviceName,
                                delegate
                {
                    // RESURSIVE CALL
                    DeleteMemberAsync(contact, serviceName, list, callback);
                });
                return;
            }


            DeleteMemberRequestType deleteMemberRequest = new DeleteMemberRequestType();

            deleteMemberRequest.serviceHandle      = new HandleType();
            deleteMemberRequest.serviceHandle.Id   = service.Id.ToString();
            deleteMemberRequest.serviceHandle.Type = serviceName;

            Membership memberShip = new Membership();

            memberShip.MemberRole = memberRole;

            BaseMember deleteMember = null; // BaseMember is an abstract type, so we cannot create a new instance.
            // If we have a MembershipId different from 0, just use it. Otherwise, use email or phone number.
            BaseMember baseMember   = AddressBook.SelectBaseMember(serviceName, contact.Account, contact.ClientType, memberRole);
            int        membershipId = (baseMember == null) ? 0 : baseMember.MembershipId;

            switch (contact.ClientType)
            {
            case IMAddressInfoType.WindowsLive:

                deleteMember       = new PassportMember();
                deleteMember.Type  = (baseMember == null) ? MembershipType.Passport : baseMember.Type;
                deleteMember.State = (baseMember == null) ? MemberState.Accepted : baseMember.State;
                if (membershipId == 0)
                {
                    (deleteMember as PassportMember).PassportName = contact.Account;
                }
                else
                {
                    deleteMember.MembershipId          = membershipId;
                    deleteMember.MembershipIdSpecified = true;
                }
                break;

            case IMAddressInfoType.Yahoo:
            case IMAddressInfoType.OfficeCommunicator:

                deleteMember       = new EmailMember();
                deleteMember.Type  = MembershipType.Email;
                deleteMember.State = (baseMember == null) ? MemberState.Accepted : baseMember.State;
                if (membershipId == 0)
                {
                    (deleteMember as EmailMember).Email = contact.Account;
                }
                else
                {
                    deleteMember.MembershipId          = membershipId;
                    deleteMember.MembershipIdSpecified = true;
                }
                break;

            case IMAddressInfoType.Telephone:

                deleteMember       = new PhoneMember();
                deleteMember.Type  = MembershipType.Phone;
                deleteMember.State = (baseMember == null) ? MemberState.Accepted : baseMember.State;
                if (membershipId == 0)
                {
                    (deleteMember as PhoneMember).PhoneNumber = contact.Account;
                }
                else
                {
                    deleteMember.MembershipId          = membershipId;
                    deleteMember.MembershipIdSpecified = true;
                }
                break;

            case IMAddressInfoType.Circle:
                deleteMember       = new CircleMember();
                deleteMember.Type  = MembershipType.Circle;
                deleteMember.State = (baseMember == null) ? MemberState.Accepted : baseMember.State;
                (deleteMember as CircleMember).CircleId = contact.AddressBookId.ToString("D").ToLowerInvariant();
                break;
            }

            memberShip.Members = new BaseMember[] { deleteMember };
            deleteMemberRequest.memberships = new Membership[] { memberShip };

            MsnServiceState       DeleteMemberObject = new MsnServiceState(PartnerScenario.ContactMsgrAPI, "DeleteMember", true);
            SharingServiceBinding sharingService     = (SharingServiceBinding)CreateService(MsnServiceType.Sharing, DeleteMemberObject);

            sharingService.DeleteMemberCompleted += delegate(object srv, DeleteMemberCompletedEventArgs e)
            {
                OnAfterCompleted(new ServiceOperationEventArgs(sharingService, MsnServiceType.Sharing, e));

                if (e.Cancelled || NSMessageHandler.MSNTicket == MSNTicket.Empty)
                {
                    return;
                }

                // Update AB
                AddressBook.RemoveMemberhip(serviceName, contact.Account, contact.ClientType, memberRole);

                if (callback != null)
                {
                    callback(srv, e);
                }
            };

            RunAsyncMethod(new BeforeRunAsyncMethodEventArgs(sharingService, MsnServiceType.Sharing, DeleteMemberObject, deleteMemberRequest));
        }
Example #8
0
        private void AddMemberAsync(Contact contact, ServiceName serviceName, RoleLists list, AddMemberCompletedEventHandler callback)
        {
            if (NSMessageHandler.MSNTicket == MSNTicket.Empty || AddressBook == null)
            {
                OnServiceOperationFailed(this, new ServiceOperationFailedEventArgs("AddMember", new MSNPSharpException("You don't have access right on this action anymore.")));
                return;
            }

            // check whether the update is necessary
            if (contact.HasLists(list))
            {
                return;
            }

            RoleId memberRole = ContactList.GetMemberRole(list);

            if (memberRole == RoleId.None)
            {
                return;
            }

            Service service = AddressBook.SelectTargetService(serviceName);

            if (service == null)
            {
                AddServiceAsync(serviceName,
                                delegate
                {
                    // RESURSIVE CALL
                    AddMemberAsync(contact, serviceName, list, callback);
                });
                return;
            }


            AddMemberRequestType addMemberRequest = new AddMemberRequestType();

            addMemberRequest.serviceHandle      = new HandleType();
            addMemberRequest.serviceHandle.Id   = service.Id.ToString();
            addMemberRequest.serviceHandle.Type = serviceName;

            Membership memberShip = new Membership();

            memberShip.MemberRole = memberRole;
            BaseMember member = null; // Abstract

            if (contact.ClientType == IMAddressInfoType.WindowsLive)
            {
                member = new PassportMember();
                PassportMember passportMember = member as PassportMember;
                passportMember.PassportName = contact.Account;
                passportMember.State        = MemberState.Accepted;
                passportMember.Type         = MembershipType.Passport;
            }
            else if (contact.ClientType == IMAddressInfoType.Yahoo ||
                     contact.ClientType == IMAddressInfoType.OfficeCommunicator)
            {
                member = new EmailMember();
                EmailMember emailMember = member as EmailMember;
                emailMember.State                = MemberState.Accepted;
                emailMember.Type                 = MembershipType.Email;
                emailMember.Email                = contact.Account;
                emailMember.Annotations          = new Annotation[] { new Annotation() };
                emailMember.Annotations[0].Name  = AnnotationNames.MSN_IM_BuddyType;
                emailMember.Annotations[0].Value = (contact.ClientType == IMAddressInfoType.Yahoo) ?
                                                   "32:" : "02:";
            }
            else if (contact.ClientType == IMAddressInfoType.Telephone)
            {
                member = new PhoneMember();
                PhoneMember phoneMember = member as PhoneMember;
                phoneMember.State       = MemberState.Accepted;
                phoneMember.Type        = MembershipType.Phone;
                phoneMember.PhoneNumber = contact.Account;
            }
            else if (contact.ClientType == IMAddressInfoType.Circle)
            {
                member = new CircleMember();
                CircleMember circleMember = member as CircleMember;
                circleMember.Type     = MembershipType.Circle;
                circleMember.State    = MemberState.Accepted;
                circleMember.CircleId = contact.AddressBookId.ToString("D").ToLowerInvariant();
            }

            if (member == null)
            {
                return;
            }

            memberShip.Members           = new BaseMember[] { member };
            addMemberRequest.memberships = new Membership[] { memberShip };

            MsnServiceState       AddMemberObject = new MsnServiceState(PartnerScenario.ContactMsgrAPI, "AddMember", true);
            SharingServiceBinding sharingService  = (SharingServiceBinding)CreateService(MsnServiceType.Sharing, AddMemberObject);

            sharingService.AddMemberCompleted += delegate(object srv, AddMemberCompletedEventArgs e)
            {
                OnAfterCompleted(new ServiceOperationEventArgs(sharingService, MsnServiceType.Sharing, e));

                if (e.Cancelled || NSMessageHandler.MSNTicket == MSNTicket.Empty)
                {
                    return;
                }

                // Update AB
                AddressBook.AddMemberhip(serviceName, contact.Account, contact.ClientType, memberRole, member);

                if (callback != null)
                {
                    callback(srv, e);
                }
            };

            RunAsyncMethod(new BeforeRunAsyncMethodEventArgs(sharingService, MsnServiceType.Sharing, AddMemberObject, addMemberRequest));
        }
        public IActionResult AddNewMemberToCircle(CircleMember circleMemberToAdd)
        {
            var member = _circlesRepository.AddMember(circleMemberToAdd);

            return(Created("", member));
        }
Example #10
0
        /// <summary>
        /// 建立成員角色資訊
        /// </summary>
        /// <param name="account"></param>
        /// <param name="circleKey"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public bool InsertMutipleCircleMemberRole(CircleMemberRoleRequest data)
        {
            var db           = _uow.DbContext;
            var tokenService = new TokenService();
            var tokenInfo    = tokenService.GetTokenInfo(data.Token).Result;

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

            var learningCircleInfo = db.LearningCircle.FirstOrDefault(t => t.LearningOuterKey == data.CircleKey);

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

            foreach (var account in data.Accounts)
            {
                var memberService = new MemberService();
                var memberInfo    = memberService.AccountToMember(account.ToLower(), learningCircleInfo.OrgId.Value);

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

                //判斷是否已存在關聯
                var checkData = GetCircleMemberRoleInfo(memberInfo.Id, learningCircleInfo.Id, data.RoleId.Value);

                //已存在就不新增
                if (checkData != null)
                {
                    continue;
                }

                var entity = new Infrastructure.Entity.CircleMemberRoleplay()
                {
                    Enable   = true,
                    CircleId = learningCircleInfo.Id,
                    MemberId = memberInfo.Id,
                    RoleId   = data.RoleId.Value
                };

                var circlememberEntity = new CircleMember()
                {
                    MemberId   = memberInfo.Id,
                    CircleId   = learningCircleInfo.Id,
                    Enabled    = true,
                    Created    = TimeData.Create(DateTime.UtcNow),
                    Deleted    = TimeData.Create(null),
                    Updated    = TimeData.Create(null),
                    CreateUser = tokenInfo.MemberId
                };
                db.CircleMemberRoleplay.Add(entity);
                db.CircleMember.Add(circlememberEntity);
            }
            db.SaveChanges();
            return(true);
        }
Example #11
0
        /// <summary>
        /// 根據InviteCode 建立成員角色資訊 - 邀請碼加入
        /// </summary>
        /// <param name="requestData"></param>
        /// <returns></returns>
        public InviteResponseData InsertCircleMemberRoleByInvite(CircleMemberRoleRequest requestData)
        {
            var db = _uow.DbContext;

            var inviteData   = db.MemberInvite.FirstOrDefault(t => t.Code.ToLower() == requestData.InviteCode.ToLower());
            var responseData = new InviteResponseData()
            {
                InviteStatus = InviteStatusEnum.inviteError
            };

            if (inviteData == null)
            {
                return(responseData);
            }

            var learningCircleInfo = db.LearningCircle.FirstOrDefault(t => t.LearningOuterKey == inviteData.CircleKey.ToLower());

            if (learningCircleInfo == null || learningCircleInfo.InviteEnable == false || learningCircleInfo.Enable == false)
            {
                responseData.InviteStatus = InviteStatusEnum.EndInvite;
                return(responseData);
            }
            responseData.CircleName = learningCircleInfo.Name;

            if (inviteData.Enable == false)
            {
                responseData.InviteStatus = InviteStatusEnum.inviteError;
                return(responseData);
            }

            var memberService = new MemberService();
            var memberInfo    = memberService.TokenToMember(requestData.Token).Result;

            if (memberInfo == null || memberInfo.OrgId != learningCircleInfo.OrgId.Value)
            {
                responseData.InviteStatus = InviteStatusEnum.AccountNotAllow;
                return(responseData);
            }
            var organizationInfo = _uow.DbContext.Organizations.FirstOrDefault(t => t.Id == memberInfo.OrgId);

            if (organizationInfo == null)
            {
                responseData.InviteStatus = InviteStatusEnum.AccountNotAllow;
                return(responseData);
            }
            responseData.OrgName = organizationInfo.Name;

            //查出學生角色資訊
            var learningRoleInfo = db.LearningRole.FirstOrDefault(t => t.Level == 3 && t.LearningId == learningCircleInfo.Id && t.IsFixed == false);

            if (learningRoleInfo == null)
            {
                responseData.InviteStatus = InviteStatusEnum.EndInvite;
                return(responseData);
            }

            //判斷要加的管理者是否跟Token帳號一致
            var checkAddAccountIsSuccess = requestData.Accounts.FirstOrDefault(t => t.ToString().ToLower() == memberInfo.Account.ToLower());

            if (checkAddAccountIsSuccess == null)
            {
                responseData.InviteStatus = InviteStatusEnum.inviteError;
                return(responseData);
            }
            //將驗證碼失效
            var getOldInviteData = _uow.DbContext.MemberInvite.FirstOrDefault
                                       (t => t.CircleKey.ToLower() == inviteData.CircleKey.ToLower() &&
                                       t.Enable == true &&
                                       t.Type == 0 &&
                                       t.Code.ToLower() == requestData.InviteCode.ToLower());

            if (getOldInviteData != null && getOldInviteData.IsCourseCode == false)
            {
                getOldInviteData.Enable = false;
            }
            else if (getOldInviteData.IsCourseCode == false)
            {
                responseData.InviteStatus = InviteStatusEnum.inviteError;
                return(responseData);
            }
            var checkJoined = db.CircleMemberRoleplay.FirstOrDefault(t => t.MemberId == memberInfo.Id && t.RoleId == learningRoleInfo.Id && t.CircleId == learningCircleInfo.Id);

            if (checkJoined == null)
            {
                var entity = new CircleMemberRoleplay()
                {
                    CircleId = learningCircleInfo.Id,
                    Enable   = true,
                    MemberId = memberInfo.Id,
                    ResType  = requestData.ResType,
                    RoleId   = learningRoleInfo.Id
                };
                db.CircleMemberRoleplay.Add(entity);
                var circleMemberEntity = new CircleMember()
                {
                    CircleId = learningCircleInfo.Id,
                    Enabled  = true,
                    MemberId = memberInfo.Id,
                    Created  = TimeData.Create(DateTime.UtcNow),
                    Deleted  = TimeData.Create(null),
                    Updated  = TimeData.Create(null)
                };
                db.CircleMember.Add(circleMemberEntity);
                db.CircleMemberRoleplay.Add(entity);
            }
            else
            {
                checkJoined.Enable = true;
            }
            db.SaveChanges();
            responseData.InviteStatus = InviteStatusEnum.success;
            return(responseData);
        }