public IList<Conversation> Get(Family family)
 {
     return _repo.Query<Conversation>().Where(c => c.WhichFam == family).ToList();
 }
        public HttpResponseMessage Post(Family family)
        {
            if (family.FamilyUserName == "") {
                return Request.CreateResponse(HttpStatusCode.BadRequest, "You did not enter a Family Name.");
            }
            var currUser = _repo.Query<ApplicationUser>().Where(a => a.UserName == User.Identity.Name).Single();
            Family dbFam = _repo.Find<Family>(family.Key);
            if (dbFam == null) {
                try {
                    dbFam = _repo.Query<Family>().Where(f => f.FamilyUserName == family.FamilyUserName).Include(f => f.MemberList).FirstOrDefault();

                    Family returnFam;
                    if (dbFam == null) {

                        //Family does not exists -- add family
                        dbFam = new Family {
                            CreatedBy = currUser,
                            MemberList = new List<FamilyUser> { new FamilyUser { User = currUser } },
                            OrgName = family.FamilyUserName,
                            FamilyUserName = family.FamilyUserName,
                            ConversationList = new List<Conversation>()
                        };
                        _service.SetFamilyKey(dbFam);
                        _repo.Add<Family>(dbFam);

                        returnFam = dbFam;

                    } else if (dbFam.MemberList.Any(f => f.UserId == currUser.Id)) {
                        // Family exists and you are already a member.
                        return Request.CreateResponse(HttpStatusCode.BadRequest, "You are already a member of this family.");

                    } else {
                        // Family exists but is owned by someone else.  Add current user and include all existing conversations and messages.
                        dbFam.MemberList.Add(new FamilyUser { FamilyKey = dbFam.Key, UserId = currUser.Id });
                        returnFam = dbFam;
                        List<Conversation> dbConvos = _repo.Query<Conversation>().Where(c => c.WhichFam.Key == dbFam.Key).Include(c => c.CreatedBy).ToList();
                        if (dbConvos != null) {
                            returnFam.ConversationList = dbConvos;
                            foreach (var convo in returnFam.ConversationList) {
                                List<Message> dbMsgs = _repo.Query<Message>().Where(m => m.Conversation.Key == convo.Key).OrderBy(m => m.TimeSubmitted).Include(m => m.Contributor).ToList();
                                if (dbMsgs != null) {
                                    convo.MessageList = dbMsgs;
                                }
                            }
                        }
                    }
                    _repo.SaveChanges();
                    return Request.CreateResponse(HttpStatusCode.Created, returnFam);
                } catch {
                    return Request.CreateResponse(HttpStatusCode.BadRequest, "Database update failed");
                }

            } else {
                try {

                    //OrgName
                    dbFam.OrgName = family.OrgName ?? dbFam.OrgName;

                    //UserName
                    dbFam.FamilyUserName = family.FamilyUserName ?? dbFam.FamilyUserName;

                    //Type
                    dbFam.Type = family.Type ?? dbFam.Type;

                    //Update ConversationList
                    if (dbFam.ConversationList == null) {
                        dbFam.ConversationList = new List<Conversation>();
                    }
                    foreach (var convo in family.ConversationList) {
                        if (!dbFam.ConversationList.Contains(convo)) {
                            dbFam.ConversationList.Add(convo);
                        }
                    }

                    //Update InviteOrPlea
                    if (dbFam.InviteOrPleas == null) {
                        dbFam.InviteOrPleas = new List<InviteOrPlea>();
                    }
                    foreach (var inv in family.InviteOrPleas) {
                        if (!dbFam.InviteOrPleas.Contains(inv)) {
                            dbFam.InviteOrPleas.Add(inv);
                        }
                    }

                    //Add the current user to the MemberList if not already there.
                    if (!(dbFam.MemberList.Any(m => m.UserId == currUser.Id && m.FamilyKey == dbFam.Key))) {
                        dbFam.MemberList.Add(new FamilyUser { FamilyKey = family.Key, UserId = currUser.Id });
                    }

                    //Update MemberList to include members in the model sent in.
                    if (dbFam.MemberList == null) {
                        dbFam.MemberList = new List<FamilyUser>();
                    }

                    foreach (var member in family.MemberList) {
                        if (!dbFam.MemberList.Contains(member)) {
                            dbFam.MemberList.Add(member);
                        }
                    }

                    _repo.SaveChanges();
                    return Request.CreateResponse(HttpStatusCode.OK, dbFam);
                } catch {
                    return Request.CreateResponse(HttpStatusCode.BadRequest, "Database update failed.");
                }
            }
        }
Beispiel #3
0
 public void SetFamilyKey(Family family)
 {
     family.Key = "F" + GetKey();
 }