public async void ResourceAllocationAsync(VerifiedDisasterMessage request)
        {
            var copier = new ClassValueCopier();
            VerifiedDisasterReport newReport = copier.ConvertAndCopy <VerifiedDisasterReport, VerifiedDisasterMessage>(request);

            newReport.AssignedOfficers = new List <string>();
            // select the team count based on count
            int count = request.ScaleOfDisaster switch
            {
                "low" => 2,
                "Medium" => 4,
                "High" => 6,
                _ => 2,
            };


            // Fetch the assigning officer details
            List <OfficerDetails> officersList = new List <OfficerDetails>();

            officersList.AddRange((request.MedicalAssistanceRequired) ? await _officerDetailsCollection.GetOfficerDetails("Medical", count) : new List <OfficerDetails>());
            officersList.AddRange((request.TrafficPoliceAssistanceRequired) ? await _officerDetailsCollection.GetOfficerDetails("Traffic", count) : new List <OfficerDetails>());
            officersList.AddRange((request.FireBrigadeAssistanceRequired) ? await _officerDetailsCollection.GetOfficerDetails("FireBrigade", count) : new List <OfficerDetails>());
            officersList.AddRange(await _officerDetailsCollection.GetOfficerDetails("Law", count));



            foreach (OfficerDetails officer in officersList)
            {
                try
                {
                    // add the assign
                    newReport.AssignedOfficers.Add(officer.ReferenceCode);
                    officer.IsOfficerAssigned = true;
                    bool updateResult = await _officerDetailsCollection.UpdateAsync(officer);

                    //send notification introducing a pipeline or direct
                }
                catch (NullReferenceException)
                {
                    continue;
                }
            }
            bool result = await _verifiedDisasterReportCollection.AddAsync(newReport);
        }
        public async Task <bool> UpdateDocumentAsync(object request = null)
        {
            VerifiedDisasterRequest request_    = (VerifiedDisasterRequest)request;
            ReportedDisaster        oldDisaster = await _disasterCollection.GetAsync(request_.ReferenceCode);

            var copier = new ClassValueCopier();
            ReportedDisaster newDisaster = copier.ConvertAndCopy(request_, oldDisaster);

            newDisaster.LastUpdatedBy = request_.VerifiedBy;
            newDisaster.IsClosed      = false;
            bool result = await _disasterCollection.UpdateAsync(newDisaster);

            if (result && newDisaster.IsInfoTrue)
            {
                VerifiedDisasterMessage verifiedDisaster = copier.ConvertAndCopy <VerifiedDisasterMessage, ReportedDisaster>(newDisaster);
                string data = JsonConvert.SerializeObject(verifiedDisaster);
                await Mqtt.MqttPublish("RSCD/Message/Disaster/Verified", data);
            }
            return(result);
        }