Mercurial > altnet-hispano
view Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs @ 266:dba5d41bc7bf
BUG: Guardar persona con twitter ya existente genera error.
author | juanjose.montesdeocaarbos |
---|---|
date | Tue, 25 Oct 2011 23:22:10 -0300 |
parents | e6c041d8e1bf |
children |
line wrap: on
line source
using System; using System.Collections.Generic; using System.Linq; using AltNetHispano.Agendas.Domain.Repositories; namespace AltNetHispano.Agendas.Domain.Services { public class PersonaService { private readonly IPersonaRepository _personaRepository; private readonly IEventoRepository _eventoRepository; public PersonaService(IPersonaRepository personaRepository, IEventoRepository eventoRepository) { _personaRepository = personaRepository; _eventoRepository = eventoRepository; } public bool CreateIfNotExist(IdentityProviderEnum identityProvider, string username, string nombre) { var cuenta = _personaRepository.GetCuenta(identityProvider, username); if (cuenta == null) { Persona persona = null; if (identityProvider == IdentityProviderEnum.Twitter) persona = _personaRepository.GetByTwitter(username); if(persona==null) persona = IdentityContext.IsAuthenticated() ? IdentityContext.GetUsuario() : new Persona(nombre); persona.AddCuenta(new Cuenta(identityProvider, username)); if (identityProvider == IdentityProviderEnum.Twitter) persona.Twitter = username; SetDefaultGroups(persona); _personaRepository.Save(persona); } return true; } private static void SetDefaultGroups(Persona persona) { #if DEBUG var administradores = new[] {"nelopauselli", "alabras", "jjmoa", "jrowies"}; #else var administradores = new[] {"nelopauselli", "alabras", "jrowies", "jorgegamba"}; #endif if (administradores.Contains(persona.Twitter)) { persona.Roles.Add(Roles.Usuario); persona.Roles.Add(Roles.Administrador); } } public void AddCuenta(IdentityProviderEnum identityProvider, string username) { var persona = IdentityContext.GetUsuario(); persona.AddCuenta(new Cuenta(identityProvider, username)); if (identityProvider == IdentityProviderEnum.Twitter) persona.Twitter = username; } public void RemoveCuenta(IdentityProviderEnum identityProvider, string username) { var persona = IdentityContext.GetUsuario(); var cuenta = persona.Cuentas.FirstOrDefault(c => c.IdentityProvider == identityProvider && c.LogonName == username); if (cuenta != null) persona.RemoveCuenta(cuenta); } public IEnumerable<Persona> GetAll() { return _personaRepository.GetAll(); } public Persona GetById(Guid id) { return _personaRepository.Get(id); } public ResultadoAdd Add(string nombre, string twitter, string mail, string blog, IEnumerable<string> roles) { if (twitter.StartsWith("@")) return new ResultadoAdd("No debe ingresar el arroba al escribir la cuenta de twitter."); var persona = _personaRepository.GetByNombre(nombre); if (persona!=null) return new ResultadoAdd("Ya existe una persona con el nombre " + nombre); persona = _personaRepository.GetByTwitter(twitter); if (persona != null) return new ResultadoAdd("Ya existe una persona con el twitter " + twitter); persona = new Persona(nombre) {Twitter = twitter, Mail = mail, Blog = blog}; if (!string.IsNullOrWhiteSpace(twitter)) persona.AddCuenta(new Cuenta(IdentityProviderEnum.Twitter, twitter)); SetDefaultGroups(persona); if (roles != null) { persona.Roles.Clear(); foreach (var rol in roles) { persona.Roles.Add(rol); } } _personaRepository.Save(persona); return new ResultadoAdd(true, "Persona Agregada", persona.Id, persona.Nombre); } public Resultado Update(Guid id, string nombre, string twitter, string mail, string blog, IEnumerable<string> roles) { var persona = _personaRepository.Get(id); if (persona == null) return new Resultado(false, string.Format("No se pudo encontrar la persona cuyo Id sea {0}", id)); if (twitter.StartsWith("@")) return new ResultadoAdd("No debe ingresar el arroba al escribir la cuenta de twitter."); persona = _personaRepository.GetByTwitter(twitter); if (persona != null && !persona.Id.Equals(id)) return new Resultado(false, string.Format("Ya existe una persona con el twitter {0}", twitter)); persona.Nombre = nombre; persona.Twitter = twitter; persona.Mail = mail; persona.Blog = blog; //TODO: ¿que hacemos con la cuenta de twitter asociada? if (roles!=null) { persona.Roles.Clear(); foreach (var rol in roles) { persona.Roles.Add(rol); } } return new Resultado(true, "Datos actualizados"); } public Resultado Delete(Guid id) { var persona = _personaRepository.Get(id); if (persona == null) return new Resultado(false, string.Format("No se pudo encontrar la persona cuyo Id sea {0}", id)); var existeEnEvento = _eventoRepository.ExistePonente(persona); if (existeEnEvento) return new Resultado(false, string.Format( "La persona {0} está asociada a un Evento por lo que es imposible eliminarla.", persona.Nombre)); _personaRepository.Delete(persona); return new Resultado(true, ""); } } }