Mercurial > altnet-hispano
view Agendas/trunk/src/Agendas.Domain/Agenda.cs @ 120:c3573defd18f
Agregado de Fecha, Usuario y Successful en TrackLog
Modificacion de publicador de blog para usar TrackLog
Agregado de TrackLog en el test de crud de eventos
Fix en publicador de twitter para que no twitee si ya se encuentra en TrackLog pero con Successful en true
author | Jorge@Jorge-PC |
---|---|
date | Fri, 24 Jun 2011 21:18:21 -0300 |
parents | 80c22175c9b5 |
children | b74734a1a755 |
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.Ponente != 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, TipoEvento tipo) { Persona persona = GetPonente(ponenteNombre); var evento = Evento.Proponer(titulo, persona, urlInvitacion, tipo); 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, TipoEvento tipo) { 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, tipo); 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, short numeroOrden, string urlWiki) { Evento evento = GetEvento(eventoId); evento.Publicar(numeroOrden, urlWiki); 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; } } }