Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 74:bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
(https://www.assembla.com/spaces/altnet-hispano/wiki/Estados_de_un_evento)
author | nelopauselli |
---|---|
date | Mon, 23 May 2011 20:13:37 -0300 |
parents | 76567a0d1e44 |
children | 96d7609f2e08 |
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 |
54 | 24 public Evento GetEvento(Guid id) |
25 { | |
26 return _eventosRepository.Get(id); | |
27 } | |
3 | 28 |
54 | 29 public IList<Evento> GetEventosPropuestos() |
30 { | |
31 return _eventosRepository.GetEventosSinFecha() ?? new List<Evento>(); | |
32 } | |
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
|
33 |
54 | 34 public IList<Evento> GetEventosPublicados() |
35 { | |
36 return _eventosRepository.GetEventosConFecha() ?? new List<Evento>(); | |
37 } | |
1 | 38 |
54 | 39 public Resultado ModificarEvento(Guid id, string titulo, string ponenteNombre, DateTime? fecha) |
40 { | |
41 Evento evento = _eventosRepository.Get(id); | |
42 if (evento == null) | |
43 throw new EventoNotFoundException(id); | |
39 | 44 |
59 | 45 Ponente ponente=null; |
46 if (!string.IsNullOrWhiteSpace(ponenteNombre)) | |
47 ponente = GetPonente(ponenteNombre); | |
54 | 48 |
49 if (evento.Titulo != titulo) | |
50 evento.CambiarTitulo(titulo); | |
53
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
51 |
54 | 52 if (evento.Fecha != fecha || evento.Ponente != ponente) |
53 evento.Actualizar(ponente, fecha); | |
54 | |
55 if (_publicador != null) | |
56 _publicador.Publicar(evento); | |
4 | 57 |
54 | 58 return new Resultado(true); |
59 } | |
60 | |
61 public Resultado ModificarPropuesta(Guid id, string titulo, string ponenteNombre) | |
1 | 62 { |
54 | 63 return ModificarEvento(id, titulo, ponenteNombre, null); |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
64 } |
4 | 65 |
53
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
66 public Resultado Proponer(string titulo, string ponenteNombre) |
4 | 67 { |
54 | 68 Ponente ponente = GetPonente(ponenteNombre); |
57 | 69 var evento = Evento.Proponer(titulo, ponente); |
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 |
15 | 74 _eventosRepository.Save(evento); |
26 | 75 _ponenteRepository.Save(ponente); |
53
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
76 |
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
77 return new Resultado(true); |
4 | 78 } |
79 | |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
80 public Resultado Agendar(string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion) |
14 | 81 { |
57 | 82 if (!fecha.HasValue) |
83 return new Resultado(false); | |
84 if (string.IsNullOrWhiteSpace(ponenteNombre)) | |
85 return new Resultado(false); | |
86 | |
54 | 87 Ponente ponente = GetPonente(ponenteNombre); |
24 | 88 |
57 | 89 Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo); |
90 if (evento == null) | |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
91 evento = Evento.Agendar(titulo, ponente, fecha.Value, urlInvitacion); |
57 | 92 else |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
93 evento.Agendar(ponente, fecha, urlInvitacion); |
38
3c5657d99727
Cambio de setters de las propiedades a private
nelo@MTEySS.neluz.int
parents:
37
diff
changeset
|
94 |
54 | 95 if (_publicador != null) |
96 _publicador.Publicar(evento); | |
39 | 97 |
54 | 98 _eventosRepository.Save(evento); |
99 _ponenteRepository.Save(ponente); | |
53
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
100 |
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
101 return new Resultado(true); |
14 | 102 } |
11
9d6b28a696d1
corrección en método que verifica la autenticación del usuario
nelo@MTEySS.neluz.int
parents:
9
diff
changeset
|
103 |
54 | 104 public void Recordar(Guid eventoId) |
105 { | |
106 Evento evento = _eventosRepository.Get(eventoId); | |
107 if (_recordador != null) | |
108 _recordador.Recordar(evento); | |
14 | 109 } |
24 | 110 |
111 public void RegistrarPonente(string nombre, string mail, string twitter, string blog) | |
112 { | |
54 | 113 var ponente = new Ponente(nombre, mail, twitter, blog); |
24 | 114 _ponenteRepository.Save(ponente); |
115 } | |
116 | |
117 private Ponente GetPonente(string nombre) | |
118 { | |
54 | 119 Ponente ponente = _ponenteRepository.GetByNombre(nombre) ?? new Ponente(nombre); |
120 _ponenteRepository.Save(ponente); | |
121 return ponente; | |
24 | 122 } |
14 | 123 } |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
124 } |