annotate Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 94:db4b1e2cae49

Cambio del nombre de la clase Ponente a Persona Se agrega la clase Cuenta para identificar cada una de las cuentas con que se puede autenticar una persona Alta Automatica de cuentas de twitter creando la persona
author Nelo@Kenia.neluz.int
date Sat, 04 Jun 2011 12:11:17 -0300
parents 26d0513a8410
children 2434c2323f3d
rev   line source
1
6bb4ab4c0611 Tests de Crud para repositorio de Vans
nelopauselli
parents: 0
diff changeset
1 using System;
2
c03560ae4762 Test de Crud para la agenda
nelopauselli
parents: 1
diff changeset
2 using System.Collections.Generic;
4
49b572535156 proponer van
nelopauselli
parents: 3
diff changeset
3 using AltNetHispano.Agendas.Domain.Exceptions;
15
08b9e96132a5 Persistimos los eventos de la agenda
nelo@MTEySS.neluz.int
parents: 14
diff changeset
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
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
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
c03560ae4762 Test de Crud para la agenda
nelopauselli
parents: 1
diff changeset
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
08b9e96132a5 Persistimos los eventos de la agenda
nelo@MTEySS.neluz.int
parents: 14
diff changeset
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
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
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
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
28 }
3
5f007e266509 code cleanup
nelopauselli
parents: 2
diff changeset
29
54
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
30 public IList<Evento> GetEventosPropuestos()
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
31 {
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
32 return _eventosRepository.GetEventosSinFecha() ?? new List<Evento>();
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
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
96d7609f2e08 Agendar evento propuesto
nelopauselli
parents: 74
diff changeset
35 public IList<Evento> GetEventosAgendados()
54
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
36 {
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
37 return _eventosRepository.GetEventosConFecha() ?? new List<Evento>();
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
38 }
1
6bb4ab4c0611 Tests de Crud para repositorio de Vans
nelopauselli
parents: 0
diff changeset
39
82
c8897b1c6f49 Manejo de excepciones en sitio web
nelopauselli
parents: 81
diff changeset
40 public Resultado ModificarEvento(Guid eventoId, string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion)
54
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
41 {
82
c8897b1c6f49 Manejo de excepciones en sitio web
nelopauselli
parents: 81
diff changeset
42 Evento evento = GetEvento(eventoId);
39
e548379cc314 track de cambios en evento
nelo@MTEySS.neluz.int
parents: 38
diff changeset
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
4a4e12e32256 Poder quitar un ponente de un evento propuesto
nelopauselli
parents: 57
diff changeset
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
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
47
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
48 if (evento.Titulo != titulo)
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
49 evento.CambiarTitulo(titulo);
53
d149bfea3892 Tratamos las validaciones como resultados y no como excepciones, dejamos las
nelopauselli
parents: 50
diff changeset
50
75
96d7609f2e08 Agendar evento propuesto
nelopauselli
parents: 74
diff changeset
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);
db4b1e2cae49 Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents: 87
diff changeset
53 else if (evento.Fecha != fecha || evento.Persona != persona || evento.UrlInvitacion != urlInvitacion)
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
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
55
81
c76661cff260 Workflow de acciones sobre un evento (camino feliz)
nelopauselli
parents: 79
diff changeset
56 Notify(evento);
4
49b572535156 proponer van
nelopauselli
parents: 3
diff changeset
57
54
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
58 return new Resultado(true);
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
59 }
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
60
75
96d7609f2e08 Agendar evento propuesto
nelopauselli
parents: 74
diff changeset
61 public Resultado ModificarPropuesta(Guid id, string titulo, string ponenteNombre, string urlInvitacion)
1
6bb4ab4c0611 Tests de Crud para repositorio de Vans
nelopauselli
parents: 0
diff changeset
62 {
75
96d7609f2e08 Agendar evento propuesto
nelopauselli
parents: 74
diff changeset
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
49b572535156 proponer van
nelopauselli
parents: 3
diff changeset
65
75
96d7609f2e08 Agendar evento propuesto
nelopauselli
parents: 74
diff changeset
66 public Resultado Proponer(string titulo, string ponenteNombre, string urlInvitacion)
4
49b572535156 proponer van
nelopauselli
parents: 3
diff changeset
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
05996fa19e04 Unificamos Van y Cafe en Evento
nelo@MTEySS.neluz.int
parents: 11
diff changeset
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
08b9e96132a5 Persistimos los eventos de la agenda
nelo@MTEySS.neluz.int
parents: 14
diff changeset
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
49b572535156 proponer van
nelopauselli
parents: 3
diff changeset
80 }
49b572535156 proponer van
nelopauselli
parents: 3
diff changeset
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
ed6d842abf42 Modificar evento
nelo@MTEySS.neluz.int
parents: 12
diff changeset
83 {
57
3d9e6d56d903 Refactoring del track de cambios de un evento
nelopauselli
parents: 54
diff changeset
84 if (!fecha.HasValue)
3d9e6d56d903 Refactoring del track de cambios de un evento
nelopauselli
parents: 54
diff changeset
85 return new Resultado(false);
3d9e6d56d903 Refactoring del track de cambios de un evento
nelopauselli
parents: 54
diff changeset
86 if (string.IsNullOrWhiteSpace(ponenteNombre))
3d9e6d56d903 Refactoring del track de cambios de un evento
nelopauselli
parents: 54
diff changeset
87 return new Resultado(false);
3d9e6d56d903 Refactoring del track de cambios de un evento
nelopauselli
parents: 54
diff changeset
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
41b283d27e3e Ponentes como entidad
nelo@MTEySS.neluz.int
parents: 21
diff changeset
90
57
3d9e6d56d903 Refactoring del track de cambios de un evento
nelopauselli
parents: 54
diff changeset
91 Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo);
3d9e6d56d903 Refactoring del track de cambios de un evento
nelopauselli
parents: 54
diff changeset
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
3d9e6d56d903 Refactoring del track de cambios de un evento
nelopauselli
parents: 54
diff changeset
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
e548379cc314 track de cambios en evento
nelo@MTEySS.neluz.int
parents: 38
diff changeset
98
54
3059a5f8930f Code cleanup
nelopauselli
parents: 53
diff changeset
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
ed6d842abf42 Modificar evento
nelo@MTEySS.neluz.int
parents: 12
diff changeset
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
41b283d27e3e Ponentes como entidad
nelo@MTEySS.neluz.int
parents: 21
diff changeset
138 public void RegistrarPonente(string nombre, string mail, string twitter, string blog)
41b283d27e3e Ponentes como entidad
nelo@MTEySS.neluz.int
parents: 21
diff changeset
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
41b283d27e3e Ponentes como entidad
nelo@MTEySS.neluz.int
parents: 21
diff changeset
142 }
41b283d27e3e Ponentes como entidad
nelo@MTEySS.neluz.int
parents: 21
diff changeset
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
41b283d27e3e Ponentes como entidad
nelo@MTEySS.neluz.int
parents: 21
diff changeset
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
41b283d27e3e Ponentes como entidad
nelo@MTEySS.neluz.int
parents: 21
diff changeset
149 }
14
ed6d842abf42 Modificar evento
nelo@MTEySS.neluz.int
parents: 12
diff changeset
150 }
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
151 }