diff Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 81:c76661cff260

Workflow de acciones sobre un evento (camino feliz)
author nelopauselli
date Tue, 24 May 2011 19:21:20 -0300
parents 8df9db937434
children c8897b1c6f49
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Tue May 24 18:25:57 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Tue May 24 19:21:20 2011 -0300
@@ -21,9 +21,12 @@
 			_recordador = recordador;
 		}
 
-		public Evento GetEvento(Guid id)
+		public Evento GetEvento(Guid eventoId)
 		{
-			return _eventosRepository.Get(id);
+			Evento evento =_eventosRepository.Get(eventoId);
+			if (evento == null)
+				throw new EventoNotFoundException(eventoId);
+			return evento;
 		}
 
 		public IList<Evento> GetEventosPropuestos()
@@ -38,9 +41,7 @@
 
 		public Resultado ModificarEvento(Guid id, string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion)
 		{
-			Evento evento = _eventosRepository.Get(id);
-			if (evento == null)
-				throw new EventoNotFoundException(id);
+			Evento evento = GetEvento(id);
 
 			Ponente ponente = null;
 			if (!string.IsNullOrWhiteSpace(ponenteNombre))
@@ -54,8 +55,7 @@
 			else if (evento.Fecha != fecha || evento.Ponente != ponente || evento.UrlInvitacion != urlInvitacion)
 				evento.Actualizar(ponente, fecha, urlInvitacion);
 
-			if (_publicador != null)
-				_publicador.Publicar(evento);
+			Notify(evento);
 
 			return new Resultado(true);
 		}
@@ -73,6 +73,8 @@
 			if (string.IsNullOrWhiteSpace(evento.Titulo))
 				return new Resultado(false);
 
+			Notify(evento);
+
 			_eventosRepository.Save(evento);
 			_ponenteRepository.Save(ponente);
 
@@ -94,8 +96,7 @@
 			else
 				evento.Agendar(ponente, fecha, urlInvitacion);
 
-			if (_publicador != null)
-				_publicador.Publicar(evento);
+			Notify(evento);
 
 			_eventosRepository.Save(evento);
 			_ponenteRepository.Save(ponente);
@@ -103,6 +104,32 @@
 			return new Resultado(true);
 		}
 
+		public Resultado Confirmar(Guid eventoId)
+		{
+			Evento evento = GetEvento(eventoId);
+
+			evento.Confirmar();
+
+			Notify(evento);
+
+			_eventosRepository.Save(evento);
+
+			return new Resultado(true);
+		}
+
+		public Resultado Publicar(Guid eventoId)
+		{
+			Evento evento = GetEvento(eventoId);
+
+			evento.Publicar();
+
+			Notify(evento);
+
+			_eventosRepository.Save(evento);
+
+			return new Resultado(true);
+		}
+
 		public void Recordar(Guid eventoId)
 		{
 			Evento evento = _eventosRepository.Get(eventoId);
@@ -110,6 +137,12 @@
 				_recordador.Recordar(evento);
 		}
 
+		private void Notify(Evento evento)
+		{
+			if (_publicador != null)
+				_publicador.Publicar(evento);
+		}
+
 		public void RegistrarPonente(string nombre, string mail, string twitter, string blog)
 		{
 			var ponente = new Ponente(nombre, mail, twitter, blog);