Mercurial > altnet-hispano
view 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 |
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 IPersonaRepository _personaRepository; private readonly IPublicador _publicador; public Agenda(IPublicador publicador, IEventoRepository eventosRepository, IPersonaRepository personaRepository) { _publicador = publicador; _personaRepository = personaRepository; _eventosRepository = eventosRepository; } public Evento GetEvento(Guid eventoId) { Evento evento =_eventosRepository.Get(eventoId); if (evento == null) throw new EventoNotFoundException(eventoId); return evento; } public IList<Evento> GetEventosPropuestos() { return _eventosRepository.GetEventosSinFecha() ?? new List<Evento>(); } public IList<Evento> GetEventosAgendados() { return _eventosRepository.GetEventosConFecha() ?? new List<Evento>(); } public Resultado ModificarEvento(Guid eventoId, string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion) { Evento evento = GetEvento(eventoId); Persona persona = null; if (!string.IsNullOrWhiteSpace(ponenteNombre)) persona = GetPonente(ponenteNombre); if (evento.Titulo != titulo) evento.CambiarTitulo(titulo); if (evento.Fecha == null && fecha != null) evento.Agendar(persona, fecha, urlInvitacion); else if (evento.Fecha != fecha || evento.Persona != persona || evento.UrlInvitacion != urlInvitacion) evento.Actualizar(persona, fecha, urlInvitacion); Notify(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) { Persona persona = GetPonente(ponenteNombre); var evento = Evento.Proponer(titulo, persona, urlInvitacion); if (string.IsNullOrWhiteSpace(evento.Titulo)) return new Resultado(false); Notify(evento); _eventosRepository.Save(evento); _personaRepository.Save(persona); 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); Persona persona = GetPonente(ponenteNombre); Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo); if (evento == null) evento = Evento.Agendar(titulo, persona, fecha.Value, urlInvitacion); else evento.Agendar(persona, fecha, urlInvitacion); Notify(evento); _eventosRepository.Save(evento); _personaRepository.Save(persona); return new Resultado(true); } public Resultado Confirmar(Guid eventoId) { Evento evento = GetEvento(eventoId); evento.Confirmar(); Notify(evento); _eventosRepository.Save(evento); return new Resultado(true); } public Resultado Publicar(Guid eventoId) { Evento evento = GetEvento(eventoId); evento.Publicar(); Notify(evento); _eventosRepository.Save(evento); return new Resultado(true); } private void Notify(Evento evento) { var tracks = evento.GetTrackNews(); if (_publicador != null) _publicador.Publicar(tracks); } public void RegistrarPonente(string nombre, string mail, string twitter, string blog) { var ponente = new Persona(nombre, mail, twitter, blog); _personaRepository.Save(ponente); } private Persona GetPonente(string nombre) { Persona persona = _personaRepository.GetByNombre(nombre) ?? new Persona(nombre); _personaRepository.Save(persona); return persona; } } }