/// <summary>
        /// Récupère une offre via son id.
        /// </summary>
        /// <param name="idOffer">int idOffer</param>
        /// <returns>Offer</returns>
        public static Entities.Offer GetOffer(int idOffer)
        {
            DataRow drOffer = DAL.OfferDataProvider.GetOffer(idOffer);
            Entities.Offer offer = new Entities.Offer();

            if (drOffer != null)
            {
                offer.idOffer = (int)drOffer["idOffer"];
                offer.idHosting = HostingManager.GetHosting((int)drOffer["idHosting"]);
                offer.nameOffer = drOffer["nameOffer"].ToString();
                offer.descriptionOffer = drOffer["descriptionOffer"].ToString();
                offer.cpu = drOffer["cpu"].Equals(DBNull.Value) ? null : drOffer["cpu"].ToString();
                offer.ram = drOffer["ram"].Equals(DBNull.Value) ? 0 : (int)drOffer["ram"];
                offer.hdd = drOffer["hdd"].Equals(DBNull.Value) ? null : drOffer["hdd"].ToString();
                offer.spaceDisk = drOffer["spaceDisk"].Equals(DBNull.Value) ? 0 : (int)drOffer["spaceDisk"];
                offer.raid = drOffer["raid"].Equals(DBNull.Value) ? null : drOffer["raid"].ToString();
                offer.bandWidth = drOffer["bandwidth"].Equals(DBNull.Value) ? 0 : (int)drOffer["bandwidth"];
                offer.trafic = drOffer["trafic"].Equals(DBNull.Value) ? 0 : (int)drOffer["trafic"];
                offer.price = (decimal)drOffer["price"];

                return offer;
            }
            else
                return null;
        }
        public async Task <IActionResult> UpdateOffer([FromBody] Entities.Offer offer)
        {
            this.PublishEvent("update", "company.offer", offer: offer);
            this.PublishEvent("update", "customer.offer", offer: offer);
            this.PublishEvent("update", "demand.offer", offer: offer);

            return(Ok(await _repository.Update(offer)));
        }
        public async Task <ActionResult <Entities.Offer> > CreateOffer([FromBody] Entities.Offer offer)
        {
            await _repository.Create(offer);

            this.PublishEvent("create", "company.offer", offer: offer);
            this.PublishEvent("create", "customer.offer", offer: offer);
            this.PublishEvent("create", "demand.offer", offer: offer);

            return(CreatedAtAction("GetOffers", new { offer.Id }, offer));
        }
        private void PublishEvent(string eventString, string topicString, Entities.Offer offer = null, string id = null)
        {
            Dictionary <string, object> headers = new Dictionary <string, object>();

            headers.Add("Action", eventString);
            headers.Add("Class", "Offer");
            if (offer != null)
            {
                publisher.Publish(JsonConvert.SerializeObject(offer), topicString, headers);
            }
            else
            {
                publisher.Publish(JsonConvert.SerializeObject(id ?? ""), topicString, headers);
            }
            return;
        }
        public async Task <bool> Update(Entities.Offer offer)
        {
            var updated = await _context.Offers.ReplaceOneAsync(filter : item => item.Id == offer.Id, replacement : offer);

            return(updated.IsAcknowledged && updated.ModifiedCount > 0);
        }
 public async Task Create(Entities.Offer offer)
 {
     await _context.Offers.InsertOneAsync(offer);
 }