Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 39:e548379cc314
track de cambios en evento
author | nelo@MTEySS.neluz.int |
---|---|
date | Fri, 18 Mar 2011 00:10:21 -0300 |
parents | 3c5657d99727 |
children | 07c47ea2ac00 |
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 { |
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
10 private readonly IPublicador _publicador; |
1 | 11 private readonly IRecordador _recordador; |
8
cae27d7eb697
Se agregó ISeguridad para validar autenticaciones de usuarios.
juanjose.montesdeocaarbos
parents:
7
diff
changeset
|
12 private readonly ISeguridad _seguridad; |
15 | 13 private readonly IEventoRepository _eventosRepository; |
24 | 14 private readonly IPonenteRepository _ponenteRepository; |
2 | 15 |
24 | 16 public Agenda(IPublicador publicador, IRecordador recordador, ISeguridad seguridad, IEventoRepository eventosRepository, 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; |
8
cae27d7eb697
Se agregó ISeguridad para validar autenticaciones de usuarios.
juanjose.montesdeocaarbos
parents:
7
diff
changeset
|
22 _seguridad = seguridad; |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
23 } |
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
24 |
24 | 25 public void Publicar(string titulo, string ponenteNombre, DateTime? fecha) |
26 { | |
27 var ponente = GetPonente(ponenteNombre); | |
3 | 28 |
38
3c5657d99727
Cambio de setters de las propiedades a private
nelo@MTEySS.neluz.int
parents:
37
diff
changeset
|
29 var evento = _eventosRepository.GetPropuestaByTitulo(titulo) ?? new Evento (titulo); |
3c5657d99727
Cambio de setters de las propiedades a private
nelo@MTEySS.neluz.int
parents:
37
diff
changeset
|
30 evento.Actualizar(ponente, fecha); |
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
|
31 |
016b9b9b8d3a
Cuando se publica una van con el mismo titulo que una propuesta, se utiliza esta
nelo@MTEySS.neluz.int
parents:
26
diff
changeset
|
32 if (!evento.Fecha.HasValue) |
016b9b9b8d3a
Cuando se publica una van con el mismo titulo que una propuesta, se utiliza esta
nelo@MTEySS.neluz.int
parents:
26
diff
changeset
|
33 throw new ValidationException(); |
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 if (NoEstaAutenticado(_seguridad)) |
016b9b9b8d3a
Cuando se publica una van con el mismo titulo que una propuesta, se utiliza esta
nelo@MTEySS.neluz.int
parents:
26
diff
changeset
|
35 throw new UsuarioNoAutenticadoException(); |
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 if (string.IsNullOrWhiteSpace(evento.Ponente.Nombre)) |
016b9b9b8d3a
Cuando se publica una van con el mismo titulo que una propuesta, se utiliza esta
nelo@MTEySS.neluz.int
parents:
26
diff
changeset
|
37 throw new ValidationException(); |
1 | 38 |
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
|
39 if (_publicador != null) |
016b9b9b8d3a
Cuando se publica una van con el mismo titulo que una propuesta, se utiliza esta
nelo@MTEySS.neluz.int
parents:
26
diff
changeset
|
40 _publicador.Publicar(evento); |
39 | 41 |
42 evento.AddTracks(new Track(Accion.Publicar)); | |
43 | |
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
|
44 _eventosRepository.Save(evento); |
016b9b9b8d3a
Cuando se publica una van con el mismo titulo que una propuesta, se utiliza esta
nelo@MTEySS.neluz.int
parents:
26
diff
changeset
|
45 _ponenteRepository.Save(ponente); |
016b9b9b8d3a
Cuando se publica una van con el mismo titulo que una propuesta, se utiliza esta
nelo@MTEySS.neluz.int
parents:
26
diff
changeset
|
46 } |
4 | 47 |
21
43360bf09b1a
unificando criterio de parámetros en Agenda
nelo@MTEySS.neluz.int
parents:
18
diff
changeset
|
48 public void Recordar(Guid eventoId) |
1 | 49 { |
21
43360bf09b1a
unificando criterio de parámetros en Agenda
nelo@MTEySS.neluz.int
parents:
18
diff
changeset
|
50 var evento = _eventosRepository.Get(eventoId); |
1 | 51 if (_recordador != null) |
52 _recordador.Recordar(evento); | |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
53 } |
4 | 54 |
26 | 55 public void Proponer(string titulo, string ponenteNombre) |
4 | 56 { |
26 | 57 var ponente = GetPonente(ponenteNombre); |
38
3c5657d99727
Cambio de setters de las propiedades a private
nelo@MTEySS.neluz.int
parents:
37
diff
changeset
|
58 var evento = new Evento (titulo); |
3c5657d99727
Cambio de setters de las propiedades a private
nelo@MTEySS.neluz.int
parents:
37
diff
changeset
|
59 evento.Actualizar(ponente); |
21
43360bf09b1a
unificando criterio de parámetros en Agenda
nelo@MTEySS.neluz.int
parents:
18
diff
changeset
|
60 |
12 | 61 if (string.IsNullOrWhiteSpace(evento.Titulo)) |
4 | 62 throw new ValidationException(); |
11
9d6b28a696d1
corrección en método que verifica la autenticación del usuario
nelo@MTEySS.neluz.int
parents:
9
diff
changeset
|
63 if (NoEstaAutenticado(_seguridad)) |
18
8ed4a806ebe0
corrección de excepeción lanzada si no hay usuario autenticado al proponer un evento
nelo@MTEySS.neluz.int
parents:
16
diff
changeset
|
64 throw new UsuarioNoAutenticadoException(); |
15 | 65 _eventosRepository.Save(evento); |
26 | 66 _ponenteRepository.Save(ponente); |
4 | 67 } |
68 | |
6
2912c1dd0e6b
Se verificó mediante un test que las propuestas y las publicaciones se estaban mezclando. Se corrigió el bug.
juanjose.montesdeocaarbos
parents:
4
diff
changeset
|
69 public IList<Evento> GetEventosPropuestos() |
2912c1dd0e6b
Se verificó mediante un test que las propuestas y las publicaciones se estaban mezclando. Se corrigió el bug.
juanjose.montesdeocaarbos
parents:
4
diff
changeset
|
70 { |
15 | 71 return _eventosRepository.GetEventosSinFecha() ?? new List<Evento>(); |
6
2912c1dd0e6b
Se verificó mediante un test que las propuestas y las publicaciones se estaban mezclando. Se corrigió el bug.
juanjose.montesdeocaarbos
parents:
4
diff
changeset
|
72 } |
2912c1dd0e6b
Se verificó mediante un test que las propuestas y las publicaciones se estaban mezclando. Se corrigió el bug.
juanjose.montesdeocaarbos
parents:
4
diff
changeset
|
73 |
2912c1dd0e6b
Se verificó mediante un test que las propuestas y las publicaciones se estaban mezclando. Se corrigió el bug.
juanjose.montesdeocaarbos
parents:
4
diff
changeset
|
74 public IList<Evento> GetEventosPublicados() |
2912c1dd0e6b
Se verificó mediante un test que las propuestas y las publicaciones se estaban mezclando. Se corrigió el bug.
juanjose.montesdeocaarbos
parents:
4
diff
changeset
|
75 { |
15 | 76 return _eventosRepository.GetEventosConFecha() ?? new List<Evento>(); |
6
2912c1dd0e6b
Se verificó mediante un test que las propuestas y las publicaciones se estaban mezclando. Se corrigió el bug.
juanjose.montesdeocaarbos
parents:
4
diff
changeset
|
77 } |
9
c90492faf268
Se implementa seguridad a través del constructor y no como parámetro
juanjose.montesdeocaarbos
parents:
8
diff
changeset
|
78 |
15 | 79 private static bool NoEstaAutenticado(ISeguridad seguridad) |
80 { | |
37
90f0cab1febc
Sugerencia de resharper sobre optimización
nelo@MTEySS.neluz.int
parents:
36
diff
changeset
|
81 return seguridad == null || seguridad.GetPrincipal() == null |
11
9d6b28a696d1
corrección en método que verifica la autenticación del usuario
nelo@MTEySS.neluz.int
parents:
9
diff
changeset
|
82 || string.IsNullOrWhiteSpace(seguridad.GetPrincipal().Identity.Name); |
9
c90492faf268
Se implementa seguridad a través del constructor y no como parámetro
juanjose.montesdeocaarbos
parents:
8
diff
changeset
|
83 } |
14 | 84 |
24 | 85 public void ModificarEvento(Guid id, string titulo, string ponenteNombre, DateTime? fecha) |
14 | 86 { |
15 | 87 var evento = _eventosRepository.Get(id); |
14 | 88 if (evento == null) |
89 throw new EventoNotFoundException(); | |
24 | 90 |
91 var ponente = GetPonente(ponenteNombre); | |
92 | |
38
3c5657d99727
Cambio de setters de las propiedades a private
nelo@MTEySS.neluz.int
parents:
37
diff
changeset
|
93 if (evento.Titulo != titulo) |
39 | 94 { |
95 evento.CambiarTitulo(titulo); | |
96 evento.AddTracks(new Track(Accion.CambiarTitulo)); | |
97 } | |
38
3c5657d99727
Cambio de setters de las propiedades a private
nelo@MTEySS.neluz.int
parents:
37
diff
changeset
|
98 |
39 | 99 if (evento.Fecha != fecha || evento.Ponente != ponente) |
100 { | |
101 evento.Actualizar(ponente, fecha); | |
102 evento.AddTracks(new Track(Accion.Modificar)); | |
103 } | |
36
65bbf1ab2b24
cuando se modifica un evento, también debe ser publicada dicha modificación
nelo@MTEySS.neluz.int
parents:
29
diff
changeset
|
104 |
39 | 105 |
106 if (_publicador != null) | |
36
65bbf1ab2b24
cuando se modifica un evento, también debe ser publicada dicha modificación
nelo@MTEySS.neluz.int
parents:
29
diff
changeset
|
107 _publicador.Publicar(evento); |
14 | 108 } |
11
9d6b28a696d1
corrección en método que verifica la autenticación del usuario
nelo@MTEySS.neluz.int
parents:
9
diff
changeset
|
109 |
26 | 110 public Evento GetEvento(Guid id) |
14 | 111 { |
15 | 112 return _eventosRepository.Get(id); |
14 | 113 } |
24 | 114 |
115 public void RegistrarPonente(string nombre, string mail, string twitter, string blog) | |
116 { | |
38
3c5657d99727
Cambio de setters de las propiedades a private
nelo@MTEySS.neluz.int
parents:
37
diff
changeset
|
117 var ponente = new Ponente(nombre, mail, twitter, blog); |
24 | 118 _ponenteRepository.Save(ponente); |
119 } | |
120 | |
121 private Ponente GetPonente(string nombre) | |
122 { | |
39 | 123 var ponente=_ponenteRepository.GetByNombre(nombre) ?? new Ponente(nombre); |
124 _ponenteRepository.Save(ponente); | |
125 return ponente; | |
24 | 126 } |
127 | |
26 | 128 public void ModificarPropuesta(Guid id, string titulo, string ponenteNombre) |
129 { | |
130 ModificarEvento(id, titulo, ponenteNombre, null); | |
131 } | |
39 | 132 |
133 public void RealizarEvento(Guid eventoId, string sintesis) | |
134 { | |
135 var evento = _eventosRepository.Get(eventoId); | |
136 if (evento != null) | |
137 { | |
138 evento.Realizado(sintesis); | |
139 evento.AddTracks(new Track(Accion.Realizar)); | |
140 } | |
141 } | |
14 | 142 } |
143 | |
144 public class EventoNotFoundException : Exception | |
145 { | |
146 } | |
147 | |
148 public class UsuarioNoAutenticadoException : Exception | |
11
9d6b28a696d1
corrección en método que verifica la autenticación del usuario
nelo@MTEySS.neluz.int
parents:
9
diff
changeset
|
149 { |
9d6b28a696d1
corrección en método que verifica la autenticación del usuario
nelo@MTEySS.neluz.int
parents:
9
diff
changeset
|
150 } |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
151 } |