Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 101:9bfdd5bf3ad2
Manejo de estados de los Eventos mediante state pattern (primer version)
author | jorge.rowies |
---|---|
date | Sun, 05 Jun 2011 11:10:32 -0300 |
parents | 2434c2323f3d |
children | 1d820f17fc75 |
rev | line source |
---|---|
1 | 1 using System; |
2 | 2 using System.Collections.Generic; |
4 | 3 using AltNetHispano.Agendas.Domain.Exceptions; |
15 | 4 using AltNetHispano.Agendas.Domain.Repositories; |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
5 |
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
6 namespace AltNetHispano.Agendas.Domain |
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
7 { |
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
8 public class Agenda |
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
9 { |
54 | 10 private readonly IEventoRepository _eventosRepository; |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
11 private readonly IPersonaRepository _personaRepository; |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
12 private readonly IPublicador _publicador; |
2 | 13 |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
82
diff
changeset
|
14 public Agenda(IPublicador publicador, IEventoRepository eventosRepository, |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
15 IPersonaRepository personaRepository) |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
16 { |
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
17 _publicador = publicador; |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
18 _personaRepository = personaRepository; |
15 | 19 _eventosRepository = eventosRepository; |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
20 } |
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
21 |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
22 public Evento GetEvento(Guid eventoId) |
54 | 23 { |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
24 Evento evento =_eventosRepository.Get(eventoId); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
25 if (evento == null) |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
26 throw new EventoNotFoundException(eventoId); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
27 return evento; |
54 | 28 } |
3 | 29 |
54 | 30 public IList<Evento> GetEventosPropuestos() |
31 { | |
32 return _eventosRepository.GetEventosSinFecha() ?? new List<Evento>(); | |
33 } | |
29
016b9b9b8d3a
Cuando se publica una van con el mismo titulo que una propuesta, se utiliza esta
nelo@MTEySS.neluz.int
parents:
26
diff
changeset
|
34 |
75 | 35 public IList<Evento> GetEventosAgendados() |
54 | 36 { |
37 return _eventosRepository.GetEventosConFecha() ?? new List<Evento>(); | |
38 } | |
1 | 39 |
82 | 40 public Resultado ModificarEvento(Guid eventoId, string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion) |
54 | 41 { |
82 | 42 Evento evento = GetEvento(eventoId); |
39 | 43 |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
44 Persona persona = null; |
59 | 45 if (!string.IsNullOrWhiteSpace(ponenteNombre)) |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
46 persona = GetPonente(ponenteNombre); |
54 | 47 |
48 if (evento.Titulo != titulo) | |
49 evento.CambiarTitulo(titulo); | |
53
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
50 |
75 | 51 if (evento.Fecha == null && fecha != null) |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
52 evento.Agendar(persona, fecha, urlInvitacion); |
97
2434c2323f3d
En el evento, volvemos a llamar Ponente a la persona que está a cargo de la presentación
Nelo@Kenia.neluz.int
parents:
94
diff
changeset
|
53 else if (evento.Fecha != fecha || evento.Ponente != persona || evento.UrlInvitacion != urlInvitacion) |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
54 evento.Actualizar(persona, fecha, urlInvitacion); |
54 | 55 |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
56 Notify(evento); |
4 | 57 |
54 | 58 return new Resultado(true); |
59 } | |
60 | |
75 | 61 public Resultado ModificarPropuesta(Guid id, string titulo, string ponenteNombre, string urlInvitacion) |
1 | 62 { |
75 | 63 return ModificarEvento(id, titulo, ponenteNombre, null, urlInvitacion); |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
64 } |
4 | 65 |
75 | 66 public Resultado Proponer(string titulo, string ponenteNombre, string urlInvitacion) |
4 | 67 { |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
68 Persona persona = GetPonente(ponenteNombre); |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
69 var evento = Evento.Proponer(titulo, persona, urlInvitacion); |
21
43360bf09b1a
unificando criterio de parámetros en Agenda
nelo@MTEySS.neluz.int
parents:
18
diff
changeset
|
70 |
12 | 71 if (string.IsNullOrWhiteSpace(evento.Titulo)) |
53
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
72 return new Resultado(false); |
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
73 |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
74 Notify(evento); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
75 |
15 | 76 _eventosRepository.Save(evento); |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
77 _personaRepository.Save(persona); |
53
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
78 |
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
79 return new Resultado(true); |
4 | 80 } |
81 | |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
82 public Resultado Agendar(string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion) |
14 | 83 { |
57 | 84 if (!fecha.HasValue) |
85 return new Resultado(false); | |
86 if (string.IsNullOrWhiteSpace(ponenteNombre)) | |
87 return new Resultado(false); | |
88 | |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
89 Persona persona = GetPonente(ponenteNombre); |
24 | 90 |
57 | 91 Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo); |
92 if (evento == null) | |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
93 evento = Evento.Agendar(titulo, persona, fecha.Value, urlInvitacion); |
57 | 94 else |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
95 evento.Agendar(persona, fecha, urlInvitacion); |
38
3c5657d99727
Cambio de setters de las propiedades a private
nelo@MTEySS.neluz.int
parents:
37
diff
changeset
|
96 |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
97 Notify(evento); |
39 | 98 |
54 | 99 _eventosRepository.Save(evento); |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
100 _personaRepository.Save(persona); |
53
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
101 |
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
102 return new Resultado(true); |
14 | 103 } |
11
9d6b28a696d1
corrección en método que verifica la autenticación del usuario
nelo@MTEySS.neluz.int
parents:
9
diff
changeset
|
104 |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
105 public Resultado Confirmar(Guid eventoId) |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
106 { |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
107 Evento evento = GetEvento(eventoId); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
108 |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
109 evento.Confirmar(); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
110 |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
111 Notify(evento); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
112 |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
113 _eventosRepository.Save(evento); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
114 |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
115 return new Resultado(true); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
116 } |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
117 |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
118 public Resultado Publicar(Guid eventoId) |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
119 { |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
120 Evento evento = GetEvento(eventoId); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
121 |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
122 evento.Publicar(); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
123 |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
124 Notify(evento); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
125 |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
126 _eventosRepository.Save(evento); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
127 |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
128 return new Resultado(true); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
129 } |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
130 |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
131 private void Notify(Evento evento) |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
132 { |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
82
diff
changeset
|
133 var tracks = evento.GetTrackNews(); |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
134 if (_publicador != null) |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
82
diff
changeset
|
135 _publicador.Publicar(tracks); |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
136 } |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
137 |
24 | 138 public void RegistrarPonente(string nombre, string mail, string twitter, string blog) |
139 { | |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
140 var ponente = new Persona(nombre, mail, twitter, blog); |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
141 _personaRepository.Save(ponente); |
24 | 142 } |
143 | |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
144 private Persona GetPonente(string nombre) |
24 | 145 { |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
146 Persona persona = _personaRepository.GetByNombre(nombre) ?? new Persona(nombre); |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
147 _personaRepository.Save(persona); |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
87
diff
changeset
|
148 return persona; |
24 | 149 } |
14 | 150 } |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
151 } |