Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 82:c8897b1c6f49
Manejo de excepciones en sitio web
author | nelopauselli |
---|---|
date | Tue, 24 May 2011 19:31:10 -0300 |
parents | c76661cff260 |
children | 26d0513a8410 |
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; |
11 private readonly IPonenteRepository _ponenteRepository; | |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
12 private readonly IPublicador _publicador; |
1 | 13 private readonly IRecordador _recordador; |
2 | 14 |
54 | 15 public Agenda(IPublicador publicador, IRecordador recordador, IEventoRepository eventosRepository, |
16 IPonenteRepository ponenteRepository) | |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
17 { |
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
18 _publicador = publicador; |
24 | 19 _ponenteRepository = ponenteRepository; |
15 | 20 _eventosRepository = eventosRepository; |
1 | 21 _recordador = recordador; |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
22 } |
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
23 |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
24 public Evento GetEvento(Guid eventoId) |
54 | 25 { |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
26 Evento evento =_eventosRepository.Get(eventoId); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
27 if (evento == null) |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
28 throw new EventoNotFoundException(eventoId); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
29 return evento; |
54 | 30 } |
3 | 31 |
54 | 32 public IList<Evento> GetEventosPropuestos() |
33 { | |
34 return _eventosRepository.GetEventosSinFecha() ?? new List<Evento>(); | |
35 } | |
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
|
36 |
75 | 37 public IList<Evento> GetEventosAgendados() |
54 | 38 { |
39 return _eventosRepository.GetEventosConFecha() ?? new List<Evento>(); | |
40 } | |
1 | 41 |
82 | 42 public Resultado ModificarEvento(Guid eventoId, string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion) |
54 | 43 { |
82 | 44 Evento evento = GetEvento(eventoId); |
39 | 45 |
75 | 46 Ponente ponente = null; |
59 | 47 if (!string.IsNullOrWhiteSpace(ponenteNombre)) |
48 ponente = GetPonente(ponenteNombre); | |
54 | 49 |
50 if (evento.Titulo != titulo) | |
51 evento.CambiarTitulo(titulo); | |
53
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
52 |
75 | 53 if (evento.Fecha == null && fecha != null) |
54 evento.Agendar(ponente, fecha, urlInvitacion); | |
79
8df9db937434
Url de invitación en la UI: validación y persistencia
nelopauselli
parents:
75
diff
changeset
|
55 else if (evento.Fecha != fecha || evento.Ponente != ponente || evento.UrlInvitacion != urlInvitacion) |
8df9db937434
Url de invitación en la UI: validación y persistencia
nelopauselli
parents:
75
diff
changeset
|
56 evento.Actualizar(ponente, fecha, urlInvitacion); |
54 | 57 |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
58 Notify(evento); |
4 | 59 |
54 | 60 return new Resultado(true); |
61 } | |
62 | |
75 | 63 public Resultado ModificarPropuesta(Guid id, string titulo, string ponenteNombre, string urlInvitacion) |
1 | 64 { |
75 | 65 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
|
66 } |
4 | 67 |
75 | 68 public Resultado Proponer(string titulo, string ponenteNombre, string urlInvitacion) |
4 | 69 { |
54 | 70 Ponente ponente = GetPonente(ponenteNombre); |
75 | 71 var evento = Evento.Proponer(titulo, ponente, urlInvitacion); |
21
43360bf09b1a
unificando criterio de parámetros en Agenda
nelo@MTEySS.neluz.int
parents:
18
diff
changeset
|
72 |
12 | 73 if (string.IsNullOrWhiteSpace(evento.Titulo)) |
53
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
74 return new Resultado(false); |
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
75 |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
76 Notify(evento); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
77 |
15 | 78 _eventosRepository.Save(evento); |
26 | 79 _ponenteRepository.Save(ponente); |
53
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
80 |
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
81 return new Resultado(true); |
4 | 82 } |
83 | |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
84 public Resultado Agendar(string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion) |
14 | 85 { |
57 | 86 if (!fecha.HasValue) |
87 return new Resultado(false); | |
88 if (string.IsNullOrWhiteSpace(ponenteNombre)) | |
89 return new Resultado(false); | |
90 | |
54 | 91 Ponente ponente = GetPonente(ponenteNombre); |
24 | 92 |
57 | 93 Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo); |
94 if (evento == null) | |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
95 evento = Evento.Agendar(titulo, ponente, fecha.Value, urlInvitacion); |
57 | 96 else |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
97 evento.Agendar(ponente, fecha, urlInvitacion); |
38
3c5657d99727
Cambio de setters de las propiedades a private
nelo@MTEySS.neluz.int
parents:
37
diff
changeset
|
98 |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
99 Notify(evento); |
39 | 100 |
54 | 101 _eventosRepository.Save(evento); |
102 _ponenteRepository.Save(ponente); | |
53
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
103 |
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
104 return new Resultado(true); |
14 | 105 } |
11
9d6b28a696d1
corrección en método que verifica la autenticación del usuario
nelo@MTEySS.neluz.int
parents:
9
diff
changeset
|
106 |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
107 public Resultado Confirmar(Guid 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 evento = GetEvento(eventoId); |
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 evento.Confirmar(); |
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 Notify(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 _eventosRepository.Save(evento); |
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 return new Resultado(true); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
118 } |
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 public Resultado Publicar(Guid 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 evento = GetEvento(eventoId); |
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 evento.Publicar(); |
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 Notify(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 _eventosRepository.Save(evento); |
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 return new Resultado(true); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
131 } |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
132 |
54 | 133 public void Recordar(Guid eventoId) |
134 { | |
135 Evento evento = _eventosRepository.Get(eventoId); | |
136 if (_recordador != null) | |
137 _recordador.Recordar(evento); | |
14 | 138 } |
24 | 139 |
81
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
140 private void Notify(Evento evento) |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
141 { |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
142 if (_publicador != null) |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
143 _publicador.Publicar(evento); |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
144 } |
c76661cff260
Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents:
79
diff
changeset
|
145 |
24 | 146 public void RegistrarPonente(string nombre, string mail, string twitter, string blog) |
147 { | |
54 | 148 var ponente = new Ponente(nombre, mail, twitter, blog); |
24 | 149 _ponenteRepository.Save(ponente); |
150 } | |
151 | |
152 private Ponente GetPonente(string nombre) | |
153 { | |
54 | 154 Ponente ponente = _ponenteRepository.GetByNombre(nombre) ?? new Ponente(nombre); |
155 _ponenteRepository.Save(ponente); | |
156 return ponente; | |
24 | 157 } |
14 | 158 } |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
159 } |