diff Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 24:41b283d27e3e

Ponentes como entidad Agenda no es una entidad persistente (por ahora)
author nelo@MTEySS.neluz.int
date Tue, 15 Mar 2011 07:49:53 -0300
parents 43360bf09b1a
children 71b02443450a
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Tue Mar 15 06:57:58 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Tue Mar 15 07:49:53 2011 -0300
@@ -11,31 +11,34 @@
 		private readonly IRecordador _recordador;
         private readonly ISeguridad _seguridad;
 		private readonly IEventoRepository _eventosRepository;
+		private readonly IPonenteRepository _ponenteRepository;
 
-		public Agenda(IPublicador publicador, IRecordador recordador, ISeguridad seguridad, IEventoRepository eventosRepository)
+		public Agenda(IPublicador publicador, IRecordador recordador, ISeguridad seguridad, IEventoRepository eventosRepository, IPonenteRepository ponenteRepository)
 		{
 			_publicador = publicador;
+			_ponenteRepository = ponenteRepository;
 			_eventosRepository = eventosRepository;
 			_recordador = recordador;
             _seguridad = seguridad;
 		}
 
-		public Guid Id { get; set; }
+        public void Publicar(string titulo, string ponenteNombre, DateTime? fecha)
+        {
+        	var ponente = GetPonente(ponenteNombre);
 
-        public void Publicar(string titulo, string ponente, DateTime? fecha)
-		{
             var evento = new Evento{Titulo=titulo, Ponente = ponente, Fecha = fecha};
 
 			if (!evento.Fecha.HasValue)
 				throw new ValidationException();
             if (NoEstaAutenticado(_seguridad))
                 throw new UsuarioNoAutenticadoException();
-            if (string.IsNullOrWhiteSpace(evento.Ponente))
+            if (string.IsNullOrWhiteSpace(evento.Ponente.Nombre))
                 throw new ValidationException();
 
 			if (_publicador != null)
 				_publicador.Publicar(evento);
 			_eventosRepository.Save(evento);
+			_ponenteRepository.Save(ponente);
 		}
 
 		public void Recordar(Guid eventoId)
@@ -72,11 +75,14 @@
                 || string.IsNullOrWhiteSpace(seguridad.GetPrincipal().Identity.Name);
         }
 
-		public void ModificarEvento(Guid id, string titulo, string ponente, DateTime? fecha)
+		public void ModificarEvento(Guid id, string titulo, string ponenteNombre, DateTime? fecha)
 		{
 			var evento = _eventosRepository.Get(id);
 			if (evento == null)
 				throw new EventoNotFoundException();
+
+			var ponente = GetPonente(ponenteNombre);
+
 			evento.Titulo = titulo;
 			evento.Ponente = ponente;
 			evento.Fecha = fecha;
@@ -86,6 +92,18 @@
 		{
 			return _eventosRepository.Get(id);
 		}
+
+		public void RegistrarPonente(string nombre, string mail, string twitter, string blog)
+		{
+			var ponente = new Ponente {Nombre = nombre, Mail = mail, Twitter = twitter, Blog = blog};
+			_ponenteRepository.Save(ponente);
+		}
+
+		private Ponente GetPonente(string nombre)
+		{
+			return _ponenteRepository.GetByNombre(nombre) ?? new Ponente { Nombre = nombre };
+		}
+
 	}
 
 	public class EventoNotFoundException : Exception