Mercurial > altnet-hispano
view 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 |
line wrap: on
line source
using System; using System.Collections.Generic; using AltNetHispano.Agendas.Domain.Exceptions; using AltNetHispano.Agendas.Domain.Repositories; namespace AltNetHispano.Agendas.Domain { public class Agenda { private readonly IEventoRepository _eventosRepository; private readonly IPonenteRepository _ponenteRepository; private readonly IPublicador _publicador; private readonly IRecordador _recordador; public Agenda(IPublicador publicador, IRecordador recordador, IEventoRepository eventosRepository, IPonenteRepository ponenteRepository) { _publicador = publicador; _ponenteRepository = ponenteRepository; _eventosRepository = eventosRepository; _recordador = recordador; } public Evento GetEvento(Guid id) { return _eventosRepository.Get(id); } public IList<Evento> GetEventosPropuestos() { return _eventosRepository.GetEventosSinFecha() ?? new List<Evento>(); } public IList<Evento> GetEventosAgendados() { return _eventosRepository.GetEventosConFecha() ?? new List<Evento>(); } public Resultado ModificarEvento(Guid id, string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion) { Evento evento = _eventosRepository.Get(id); if (evento == null) throw new EventoNotFoundException(id); Ponente ponente = null; if (!string.IsNullOrWhiteSpace(ponenteNombre)) ponente = GetPonente(ponenteNombre); if (evento.Titulo != titulo) evento.CambiarTitulo(titulo); if (evento.Fecha == null && fecha != null) evento.Agendar(ponente, fecha, urlInvitacion); else if (evento.Fecha != fecha || evento.Ponente != ponente || evento.UrlInvitacion != urlInvitacion) evento.Actualizar(ponente, fecha, urlInvitacion); if (_publicador != null) _publicador.Publicar(evento); return new Resultado(true); } public Resultado ModificarPropuesta(Guid id, string titulo, string ponenteNombre, string urlInvitacion) { return ModificarEvento(id, titulo, ponenteNombre, null, urlInvitacion); } public Resultado Proponer(string titulo, string ponenteNombre, string urlInvitacion) { Ponente ponente = GetPonente(ponenteNombre); var evento = Evento.Proponer(titulo, ponente, urlInvitacion); if (string.IsNullOrWhiteSpace(evento.Titulo)) return new Resultado(false); _eventosRepository.Save(evento); _ponenteRepository.Save(ponente); return new Resultado(true); } public Resultado Agendar(string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion) { if (!fecha.HasValue) return new Resultado(false); if (string.IsNullOrWhiteSpace(ponenteNombre)) return new Resultado(false); Ponente ponente = GetPonente(ponenteNombre); Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo); if (evento == null) evento = Evento.Agendar(titulo, ponente, fecha.Value, urlInvitacion); else evento.Agendar(ponente, fecha, urlInvitacion); if (_publicador != null) _publicador.Publicar(evento); _eventosRepository.Save(evento); _ponenteRepository.Save(ponente); return new Resultado(true); } public void Recordar(Guid eventoId) { Evento evento = _eventosRepository.Get(eventoId); if (_recordador != null) _recordador.Recordar(evento); } public void RegistrarPonente(string nombre, string mail, string twitter, string blog) { var ponente = new Ponente(nombre, mail, twitter, blog); _ponenteRepository.Save(ponente); } private Ponente GetPonente(string nombre) { Ponente ponente = _ponenteRepository.GetByNombre(nombre) ?? new Ponente(nombre); _ponenteRepository.Save(ponente); return ponente; } } }