public object Get(GetSolicitud request) { if (logger.IsDebugEnabled) logger.Debug("Request GetSolicitud"); if (request.Id == nullGuid) { if (logger.IsDebugEnabled) logger.Debug("Not Found: " + request.Id.ToString()); throw HttpError.NotFound("No encontrado"); } dbsolicitud = Db.Select<modelSolicitud>(q => q.Id == request.Id); if (dbsolicitud.Count == 0) { if (logger.IsDebugEnabled) logger.Debug("Not Found: "); throw HttpError.NotFound("No encontrado"); } List<Solicitud> payload = BuildPayloadSolicitud(dbsolicitud); SolicitudResponse response = new SolicitudResponse(); response.solicitud = payload.First(); return response; }
public object Post(CreateSolicitud request) { Guid solicitudId; if (request.solicitud == null) throw HttpError.Conflict("Se requieren datos"); Solicitud solicitud = request.solicitud; using (var db = DbFactory.Open()) { if (!db.Exists<modelDmsTaller>(s => s.Id == solicitud.DmsTallerId)) throw HttpError.Conflict("No existe el taller"); if (solicitud.Id != nullGuid) if (db.Exists<modelSolicitud>(s => s.Id == solicitud.Id)) throw HttpError.Conflict("La solicitud ya existe"); modelSolicitud dbsolicitud = new modelSolicitud(); List<modelSolicitudJob> dbsolicitudJob = new List<modelSolicitudJob>(); List<modelSolicitudHora> dbsolicitudHora = new List<modelSolicitudHora>(); dbsolicitud = solicitud.ConvertTo<modelSolicitud>(); dbsolicitudJob = solicitud.solicitudjobs.ConvertAll(x => x.ConvertTo<modelSolicitudJob>()); dbsolicitudHora = solicitud.solicitudhoras.ConvertAll(x => x.ConvertTo<modelSolicitudHora>()); if (dbsolicitud.Id == nullGuid) dbsolicitud.Id = Guid.NewGuid(); solicitudId = dbsolicitud.Id; DateTime now = DateTime.Now; dbsolicitud.CreacionFecha = now; Guid guidOutput; if (!Guid.TryParse(dbsolicitud.CreacionDevice.ToString(), out guidOutput)) { dbsolicitud.CreacionDevice = Guid.NewGuid(); } //if (dbsolicitud.CreacionDevice == nullGuid) dbsolicitud.CreacionDevice = Guid.NewGuid(); Db.Insert(dbsolicitud); if (dbsolicitudJob != null) { foreach (modelSolicitudJob job in dbsolicitudJob) { if (job.Id == nullGuid) job.Id = Guid.NewGuid(); job.SolicitudId = solicitudId; Db.Insert(job); } } if (dbsolicitudJob != null) { foreach (modelSolicitudHora hora in dbsolicitudHora) { if (hora.Id == nullGuid) hora.Id = Guid.NewGuid(); hora.SolicitudId = solicitudId; Db.Insert(hora); } } } // Obtengo la Conexión al ServiceBus que ha sido almacenada en web.config string connectionString = CloudConfigurationManager.GetSetting("CitaTallerAzureBusManager"); // Este el "topic" por el que publicaremos en el service bus. string topicName = "solicitudcitataller"; //string filterName = "DmsTallerId-" + solicitud.DmsTallerId.ToString(); // Verifico la existencia del Topic. Si no existe, lo creo. // Pero, necesito conectarmet como RootManager. Ojo con la connectionString! var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString); if (!namespaceManager.TopicExists(topicName)) { namespaceManager.CreateTopic(topicName); } //// También creo la suscripción "Allmessages" sin filtro. //if (!namespaceManager.SubscriptionExists(topicName, "AllMessages")) //{ // namespaceManager.CreateSubscription(topicName, "AllMessages"); //} //// También creo la suscripción para un taller en concreto //if (!namespaceManager.SubscriptionExists(topicName, filterName)) //{ // SqlFilter DmsTallerIdFilter = new SqlFilter("DmsTallerId = '" + solicitud.DmsTallerId.ToString() + "'"); // namespaceManager.CreateSubscription(topicName, filterName, DmsTallerIdFilter); //} // Creo el mensaje a enviar. // Le añado 2 propiedades: SolicitudID y DmsTallerId BrokeredMessage message = new BrokeredMessage("Solicitud " + solicitudId.ToString()); message.Label = "Solicitud " + solicitudId.ToString(); message.Properties["SolicitudID"] = solicitudId.ToString(); message.Properties["DmsTallerId"] = solicitud.DmsTallerId.ToString().Replace("-", "").Trim().ToUpper(); // Publico el mensaje en el Topic. TopicClient Client = TopicClient.CreateFromConnectionString(connectionString, topicName); Client.Send(message); // Ahora si. Resuelvo la response al cliente Rest diciendo que la Solicitud ha sido grabada. Solicitud payload = BuildPayloadSolicitudId(solicitudId); SolicitudResponse response = new SolicitudResponse(); response.solicitud = payload; return response; }