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."); } } }
public void SetFamilyKey(Family family) { family.Key = "F" + GetKey(); }