comparison Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 15:08b9e96132a5

Persistimos los eventos de la agenda
author nelo@MTEySS.neluz.int
date Mon, 14 Mar 2011 00:14:09 -0300
parents ed6d842abf42
children ed29ceb025a9
comparison
equal deleted inserted replaced
14:ed6d842abf42 15:08b9e96132a5
1 using System; 1 using System;
2 using System.Collections.Generic; 2 using System.Collections.Generic;
3 using System.Linq; 3 using System.Linq;
4 using AltNetHispano.Agendas.Domain.Exceptions; 4 using AltNetHispano.Agendas.Domain.Exceptions;
5 using AltNetHispano.Agendas.Domain.Repositories;
5 6
6 namespace AltNetHispano.Agendas.Domain 7 namespace AltNetHispano.Agendas.Domain
7 { 8 {
8 public class Agenda 9 public class Agenda
9 { 10 {
10 private readonly IList<Evento> _eventosPropuestos;
11 private readonly IList<Evento> _eventosPublicados;
12 private readonly IPublicador _publicador; 11 private readonly IPublicador _publicador;
13 private readonly IRecordador _recordador; 12 private readonly IRecordador _recordador;
14 private readonly ISeguridad _seguridad; 13 private readonly ISeguridad _seguridad;
14 private readonly IEventoRepository _eventosRepository;
15 15
16 public Agenda(IPublicador publicador, IRecordador recordador, ISeguridad seguridad) 16 public Agenda(IPublicador publicador, IRecordador recordador, ISeguridad seguridad, IEventoRepository eventosRepository)
17 { 17 {
18 _publicador = publicador; 18 _publicador = publicador;
19 _eventosRepository = eventosRepository;
19 _recordador = recordador; 20 _recordador = recordador;
20 _seguridad = seguridad; 21 _seguridad = seguridad;
21 _eventosPropuestos = new List<Evento>();
22 _eventosPublicados = new List<Evento>();
23 } 22 }
24 23
25 public Guid Id { get; set; } 24 public Guid Id { get; set; }
26 25
27 public void Publicar(string titulo, string ponente, DateTime? fecha) 26 public void Publicar(string titulo, string ponente, DateTime? fecha)
28 { 27 {
29 var evento = new Evento{Titulo=titulo, Ponente = ponente, Fecha = fecha}; 28 var evento = new Evento{Titulo=titulo, Ponente = ponente, Fecha = fecha};
30 29
31 if (!evento.Fecha.HasValue) 30 if (!evento.Fecha.HasValue)
32 throw new ValidationException(); 31 throw new ValidationException();
33 if (_publicador != null)
34 _publicador.Publicar(evento);
35 if (NoEstaAutenticado(_seguridad)) 32 if (NoEstaAutenticado(_seguridad))
36 throw new UsuarioNoAutenticadoException(); 33 throw new UsuarioNoAutenticadoException();
37 if (string.IsNullOrWhiteSpace(evento.Ponente)) 34 if (string.IsNullOrWhiteSpace(evento.Ponente))
38 throw new ValidationException(); 35 throw new ValidationException();
39 36
40 //TODO: persistir el evento! 37 if (_publicador != null)
41 if (evento.Id==Guid.Empty) evento.Id = Guid.NewGuid(); 38 _publicador.Publicar(evento);
42 39 _eventosRepository.Save(evento);
43 _eventosPublicados.Add(evento);
44 } 40 }
45 41
46 public void Recordar(Evento evento) 42 public void Recordar(Evento evento)
47 { 43 {
48 if (_recordador != null) 44 if (_recordador != null)
53 { 49 {
54 if (string.IsNullOrWhiteSpace(evento.Titulo)) 50 if (string.IsNullOrWhiteSpace(evento.Titulo))
55 throw new ValidationException(); 51 throw new ValidationException();
56 if (NoEstaAutenticado(_seguridad)) 52 if (NoEstaAutenticado(_seguridad))
57 throw new ValidationException(); 53 throw new ValidationException();
58 _eventosPropuestos.Add(evento); 54 _eventosRepository.Save(evento);
59 } 55 }
60 56
61 public IList<Evento> GetEventosPropuestos() 57 public IList<Evento> GetEventosPropuestos()
62 { 58 {
63 return _eventosPropuestos; 59 return _eventosRepository.GetEventosSinFecha() ?? new List<Evento>();
64 } 60 }
65 61
66 public IList<Evento> GetEventosPublicados() 62 public IList<Evento> GetEventosPublicados()
67 { 63 {
68 return _eventosPublicados; 64 return _eventosRepository.GetEventosConFecha() ?? new List<Evento>();
69 } 65 }
70 66
71 private static bool NoEstaAutenticado(ISeguridad seguridad) { 67 private static bool NoEstaAutenticado(ISeguridad seguridad)
68 {
69 return false;
72 return seguridad == null || seguridad.GetPrincipal() == null || seguridad.GetPrincipal().Identity == null 70 return seguridad == null || seguridad.GetPrincipal() == null || seguridad.GetPrincipal().Identity == null
73 || string.IsNullOrWhiteSpace(seguridad.GetPrincipal().Identity.Name); 71 || string.IsNullOrWhiteSpace(seguridad.GetPrincipal().Identity.Name);
74 } 72 }
75 73
76 public void ModificarEvento(Guid id, string titulo, string ponente, DateTime? fecha) 74 public void ModificarEvento(Guid id, string titulo, string ponente, DateTime? fecha)
77 { 75 {
78 var evento = _eventosPublicados.SingleOrDefault(e => e.Id == id); 76 var evento = _eventosRepository.Get(id);
79 if (evento == null) 77 if (evento == null)
80 throw new EventoNotFoundException(); 78 throw new EventoNotFoundException();
81 evento.Titulo = titulo; 79 evento.Titulo = titulo;
82 evento.Ponente = ponente; 80 evento.Ponente = ponente;
83 evento.Fecha = fecha; 81 evento.Fecha = fecha;
84 } 82 }
85 83
86 public Evento GetEventoPublicado(Guid id) 84 public Evento GetEventoPublicado(Guid id)
87 { 85 {
88 return _eventosPublicados.SingleOrDefault(e => e.Id == id); 86 return _eventosRepository.Get(id);
89 } 87 }
90 } 88 }
91 89
92 public class EventoNotFoundException : Exception 90 public class EventoNotFoundException : Exception
93 { 91 {