Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 80:c2d98fd6593f
Track como objeto identificable y con referencia al evento correspondiente.
Puede que con estos cambios sea necesario borrar las tablas en la db y dejar
que se vuelvan a generar, ya sea en los test o en la aplicación web
author | nelopauselli |
---|---|
date | Tue, 24 May 2011 18:25:57 -0300 |
parents | 8df9db937434 |
children | c76661cff260 |
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 |
75 | 34 public IList<Evento> GetEventosAgendados() |
54 | 35 { |
36 return _eventosRepository.GetEventosConFecha() ?? new List<Evento>(); | |
37 } | |
1 | 38 |
75 | 39 public Resultado ModificarEvento(Guid id, string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion) |
54 | 40 { |
41 Evento evento = _eventosRepository.Get(id); | |
42 if (evento == null) | |
43 throw new EventoNotFoundException(id); | |
39 | 44 |
75 | 45 Ponente ponente = null; |
59 | 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 |
75 | 52 if (evento.Fecha == null && fecha != null) |
53 evento.Agendar(ponente, fecha, urlInvitacion); | |
79
8df9db937434
Url de invitación en la UI: validación y persistencia
nelopauselli
parents:
75
diff
changeset
|
54 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
|
55 evento.Actualizar(ponente, fecha, urlInvitacion); |
54 | 56 |
57 if (_publicador != null) | |
58 _publicador.Publicar(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 |
15 | 76 _eventosRepository.Save(evento); |
26 | 77 _ponenteRepository.Save(ponente); |
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 | |
54 | 89 Ponente ponente = GetPonente(ponenteNombre); |
24 | 90 |
57 | 91 Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo); |
92 if (evento == null) | |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
93 evento = Evento.Agendar(titulo, ponente, fecha.Value, urlInvitacion); |
57 | 94 else |
74
bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
nelopauselli
parents:
73
diff
changeset
|
95 evento.Agendar(ponente, fecha, urlInvitacion); |
38
3c5657d99727
Cambio de setters de las propiedades a private
nelo@MTEySS.neluz.int
parents:
37
diff
changeset
|
96 |
54 | 97 if (_publicador != null) |
98 _publicador.Publicar(evento); | |
39 | 99 |
54 | 100 _eventosRepository.Save(evento); |
101 _ponenteRepository.Save(ponente); | |
53
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
102 |
d149bfea3892
Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents:
50
diff
changeset
|
103 return new Resultado(true); |
14 | 104 } |
11
9d6b28a696d1
corrección en método que verifica la autenticación del usuario
nelo@MTEySS.neluz.int
parents:
9
diff
changeset
|
105 |
54 | 106 public void Recordar(Guid eventoId) |
107 { | |
108 Evento evento = _eventosRepository.Get(eventoId); | |
109 if (_recordador != null) | |
110 _recordador.Recordar(evento); | |
14 | 111 } |
24 | 112 |
113 public void RegistrarPonente(string nombre, string mail, string twitter, string blog) | |
114 { | |
54 | 115 var ponente = new Ponente(nombre, mail, twitter, blog); |
24 | 116 _ponenteRepository.Save(ponente); |
117 } | |
118 | |
119 private Ponente GetPonente(string nombre) | |
120 { | |
54 | 121 Ponente ponente = _ponenteRepository.GetByNombre(nombre) ?? new Ponente(nombre); |
122 _ponenteRepository.Save(ponente); | |
123 return ponente; | |
24 | 124 } |
14 | 125 } |
0
3f7dbb633b71
Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff
changeset
|
126 } |