Ejemplo n.º 1
0
        public async Task <IHttpActionResult> AddContact([FromBody] ContactDto contact)
        {
            var userId = GetCurrentUserId();

            if (userId == contact.ContactId)
            {
                return(InternalServerError());
            }
            var user = await _unitOfWork.Repository <User>().GetAsync(userId);

            if (user == null)
            {
                return(NotFound());
            }
            var contactUser = await _unitOfWork.Repository <User>().GetAsync(contact.ContactId);

            if (contactUser == null)
            {
                return(NotFound());
            }
            // first send
            if (user.Contacts.FirstOrDefault(t => t.ContactUser.Id == contactUser.Id) == null)
            {
                user.Contacts.Add(new Contact()
                {
                    User        = user,
                    ContactUser = contactUser,
                    State       = DbAccess.Entities.ContactState.Sent,
                });
                contactUser.Contacts.Add(new Contact()
                {
                    User        = contactUser,
                    ContactUser = user,
                    State       = DbAccess.Entities.ContactState.New,
                });
            }
            // retry when user decline offer
            else
            {
                user.Contacts.FirstOrDefault(t => t.ContactUser.Id == contactUser.Id).State = DbAccess.Entities.ContactState.Sent;
                contactUser.Contacts.FirstOrDefault(t => t.ContactUser.Id == userId).State  = DbAccess.Entities.ContactState.New;
            }

            await _unitOfWork.SaveAsync();

            await _chatHubService.RunContactAction(userId, contact.ContactId, ContactState.New);

            return(Ok());
        }