Mercurial > altnet-hispano
view Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 29:016b9b9b8d3a
Cuando se publica una van con el mismo titulo que una propuesta, se utiliza esta
última promoviendola a evento publicado.
author | nelo@MTEySS.neluz.int |
---|---|
date | Wed, 16 Mar 2011 08:25:02 -0300 |
parents | 71b02443450a |
children | 65bbf1ab2b24 |
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 IPublicador _publicador; private readonly IRecordador _recordador; private readonly ISeguridad _seguridad; private readonly IEventoRepository _eventosRepository; private readonly IPonenteRepository _ponenteRepository; public Agenda(IPublicador publicador, IRecordador recordador, ISeguridad seguridad, IEventoRepository eventosRepository, IPonenteRepository ponenteRepository) { _publicador = publicador; _ponenteRepository = ponenteRepository; _eventosRepository = eventosRepository; _recordador = recordador; _seguridad = seguridad; } public void Publicar(string titulo, string ponenteNombre, DateTime? fecha) { var ponente = GetPonente(ponenteNombre); var evento = _eventosRepository.GetPropuestaByTitulo(titulo) ?? new Evento {Titulo = titulo}; evento.Ponente = ponente; evento.Fecha = fecha; if (!evento.Fecha.HasValue) throw new ValidationException(); if (NoEstaAutenticado(_seguridad)) throw new UsuarioNoAutenticadoException(); if (string.IsNullOrWhiteSpace(evento.Ponente.Nombre)) throw new ValidationException(); if (_publicador != null) _publicador.Publicar(evento); _eventosRepository.Save(evento); _ponenteRepository.Save(ponente); } public void Recordar(Guid eventoId) { var evento = _eventosRepository.Get(eventoId); if (_recordador != null) _recordador.Recordar(evento); } public void Proponer(string titulo, string ponenteNombre) { var ponente = GetPonente(ponenteNombre); var evento = new Evento {Titulo = titulo, Ponente = ponente}; if (string.IsNullOrWhiteSpace(evento.Titulo)) throw new ValidationException(); if (NoEstaAutenticado(_seguridad)) throw new UsuarioNoAutenticadoException(); _eventosRepository.Save(evento); _ponenteRepository.Save(ponente); } public IList<Evento> GetEventosPropuestos() { return _eventosRepository.GetEventosSinFecha() ?? new List<Evento>(); } public IList<Evento> GetEventosPublicados() { return _eventosRepository.GetEventosConFecha() ?? new List<Evento>(); } private static bool NoEstaAutenticado(ISeguridad seguridad) { return seguridad == null || seguridad.GetPrincipal() == null || seguridad.GetPrincipal().Identity == null || string.IsNullOrWhiteSpace(seguridad.GetPrincipal().Identity.Name); } public void ModificarEvento(Guid id, string titulo, string ponenteNombre, DateTime? fecha) { var evento = _eventosRepository.Get(id); if (evento == null) throw new EventoNotFoundException(); var ponente = GetPonente(ponenteNombre); evento.Titulo = titulo; evento.Ponente = ponente; evento.Fecha = fecha; } public Evento GetEvento(Guid id) { return _eventosRepository.Get(id); } public void RegistrarPonente(string nombre, string mail, string twitter, string blog) { var ponente = new Ponente {Nombre = nombre, Mail = mail, Twitter = twitter, Blog = blog}; _ponenteRepository.Save(ponente); } private Ponente GetPonente(string nombre) { return _ponenteRepository.GetByNombre(nombre) ?? new Ponente { Nombre = nombre }; } public void ModificarPropuesta(Guid id, string titulo, string ponenteNombre) { ModificarEvento(id, titulo, ponenteNombre, null); } } public class EventoNotFoundException : Exception { } public class UsuarioNoAutenticadoException : Exception { } }