view Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs @ 143:2dbb15f4510f

Asociar Twitter a Persona existente
author Nelo@Guinea.neluz.int
date Mon, 01 Aug 2011 09:41:29 -0300
parents 7a2eeb9e9bf9
children a2b14da4902f
line wrap: on
line source

using System.Linq;
using AltNetHispano.Agendas.Domain.Repositories;

namespace AltNetHispano.Agendas.Domain.Services
{
	public class PersonaService
	{
		private readonly IPersonaRepository _personaRepository;

		public PersonaService(IPersonaRepository personaRepository)
		{
			_personaRepository = personaRepository;
		}

		public bool Validate(IdentityProviderEnum identityProvider, string username)
		{
			var cuenta = _personaRepository.GetCuenta(identityProvider, username);
			return cuenta != null;
		}

		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;

                _personaRepository.Save(persona);
            }
		    return true;
		}

		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);
		}
	}
}