public async Task <IActionResult> PostContacto([FromBody] ContactoCompleto contacto) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } _context.Contactos.Add(contacto.Contacto); await _context.SaveChangesAsync(); foreach (var telefono in contacto.Telefonos) { telefono.ContactoId = contacto.Contacto.Id; _context.Telefonos.Add(telefono); } foreach (var grupo in contacto.Grupos) { var gc = new GrupoContactos { ContactoId = contacto.Contacto.Id, GrupoId = grupo.Id }; _context.GruposContactos.Add(gc); } await _context.SaveChangesAsync(); return(NoContent()); }
public async Task <IActionResult> PutContacto([FromRoute] int id, [FromBody] ContactoCompleto contacto) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != contacto.Contacto.Id) { return(BadRequest()); } foreach (var telefono in contacto.Telefonos) { telefono.ContactoId = id; if (telefono.Id == 0) { _context.Telefonos.Add(telefono); } else { _context.Entry(telefono).State = EntityState.Modified; } } foreach (var grupo in contacto.Grupos) { var grct = _context.GruposContactos.FirstOrDefault(gr => gr.ContactoId == id && gr.GrupoId == grupo.Id); if (null == grct) { var gc = new GrupoContactos { ContactoId = contacto.Contacto.Id, GrupoId = grupo.Id }; _context.GruposContactos.Add(gc); } } var grcts = _context.GruposContactos.Where(gc => gc.ContactoId == id && contacto.Grupos.All(g => g.Id != gc.GrupoId)); foreach (var grct in grcts) { _context.GruposContactos.Remove(grct); } _context.Entry(contacto.Contacto).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ContactoExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }