コード例 #1
0
        public JsonResult ReportTheFire([FromBody] ReportTheFireParameterDTO param)
        {
            var response = new ReportTheFireResponseDTO
            {
            };

            //check secret user id
            if (checkSecretUserId(param.SecretUserId))
            {
                using (var context = new IsfContext())
                {
                    var added = context.Reports.Add(
                        new Report
                    {
                        SecretUserId  = param.SecretUserId,
                        Longitude     = param.Longitude,
                        Latitude      = param.Latitude,
                        TextOfComment = param.TextOfComment,
                        Timestamp     = DateTime.UtcNow,
                        Distance      = param.Distance
                    }

                        );
                    context.SaveChanges();
                    response.ReportId = added.Entity.ReportId;
                }
            }
            else
            {
                response.Error = $"Unknown secret user id: \"{param.SecretUserId}\"";
            }

            return(new JsonResult(response));
        }
コード例 #2
0
        public IActionResult NasaReports()
        {
            ReportsModel response = new ReportsModel
            {
                UsersReports = new List <GetNearbyFiresResponseDTO>()
            };

            using (var context = new IsfContext())
            {
                var retrievedReports = context.NasaFireReports.ToList();
                foreach (var report in retrievedReports)
                {
                    response.UsersReports.Add(new GetNearbyFiresResponseDTO()
                    {
                        Latitude   = report.Latitude,
                        Longitude  = report.Longitude,
                        PhotoUrl   = getImageUrl("NASA"),
                        IsOwner    = false,
                        IsNasa     = false,
                        Confidence = report.Confidence,
                        Distance   = LatLongDistance(report.Latitude, report.Longitude, 46.481940m, 30.747274m)
                    });
                }
                response.UsersReports = response.UsersReports.OrderBy(x => x.Distance).Take(400).ToList();
            }

            return(View(response));
        }
コード例 #3
0
 private bool checkSecretUserId(string SecretUserId)
 {
     using (var context = new IsfContext())
     {
         var findResult = context.Users.FirstOrDefault(x => x.UserId == SecretUserId);
         return(findResult != null);
     }
 }
コード例 #4
0
        public JsonResult GetReportsList()
        {
            Console.WriteLine("GetReportsList called");

            var result = new List <string>();

            using (var context = new IsfContext())
            {
                foreach (var report in context.Reports)
                {
                    result.Add($"{report.ReportId} - {report.Latitude} - {report.Longitude} - {report.Timestamp}");
                }
            }

            return(new JsonResult(result));
        }
コード例 #5
0
        public JsonResult GetUserList()
        {
            Console.WriteLine("GetUserList called");

            var result = new List <string>();

            using (var context = new IsfContext())
            {
                foreach (var user in context.Users)
                {
                    result.Add($"{user.UserId} - {user.Name} - {user.Phone}");
                }
            }

            return(new JsonResult(result));
        }
コード例 #6
0
        private JsonResult downloadNasaFileAndImportInDb(string path)
        {
            DownloadFilesFromNASAResponseDTO response = new DownloadFilesFromNASAResponseDTO
            {
            };

            if (isLastImportNASAFilesDateIsActual())
            {
                response.Error = "No need to import NASA files.";
                return(new JsonResult(response));
            }

            using (var client = new WebClient())
            {
                try
                {
                    MemoryStream stream = new MemoryStream(client.DownloadData(path));
                    var          result = parseNasaDataCSV(stream);
                    using (var context = new IsfContext())
                    {
                        try
                        {
                            context.NasaFireReports.AddRange(result);
                            context.SaveChanges();
                            response.PathProcessed = path;
                            response.RowsImported  = result.Count;
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.Message);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }



            return(new JsonResult(response));
        }
コード例 #7
0
        public JsonResult GetSecretUserId()
        {
            var userId = Guid.NewGuid().ToString();

            using (var context = new IsfContext())
            {
                context.Users.Add(new User()
                {
                    UserId = userId
                });
                context.SaveChanges();
            }

            var response = new GetSecretUserIdResponseDTO
            {
                SecretUserId = userId
            };

            return(new JsonResult(response));
        }
コード例 #8
0
        public JsonResult UpdateProfile([FromBody] UpdateProfileParameterDTO updateData)
        {
            using (var context = new IsfContext())
            {
                User user = context
                            .Users
                            .Where(q => q.UserId == updateData.SecretUserId)
                            .First();

                user.Phone = updateData.Phone;
                user.Name  = updateData.Name;

                context.SaveChanges();
            }

            var response = new ResponseDTO()
            {
                Error = null
            };

            return(new JsonResult(response));
        }
コード例 #9
0
        public IActionResult Reports()
        {
            ReportsModel response = new ReportsModel
            {
                UsersReports = new List <GetNearbyFiresResponseDTO>()
            };

            using (var context = new IsfContext())
            {
                var retrievedReports = context.Reports.ToList();
                foreach (var report in retrievedReports)
                {
                    response.UsersReports.Add(new GetNearbyFiresResponseDTO()
                    {
                        Latitude   = report.Latitude,
                        Longitude  = report.Longitude,
                        PhotoUrl   = report.ImagePath ?? getImageUrl(report.ImagePath),
                        IsOwner    = false,
                        IsNasa     = false,
                        Confidence = 0.2m,
                        Distance   = LatLongDistance(report.Latitude, report.Longitude, 46.481940m, 30.747274m)
                    });
                }
                response.UsersReports.Add(new GetNearbyFiresResponseDTO()
                {
                    Latitude   = 46.500144m,
                    Longitude  = 30.663893m,
                    PhotoUrl   = getImageUrl("NASA"),
                    IsOwner    = false,
                    IsNasa     = false,
                    Confidence = 0.2m,   // from 0 to 1
                    Distance   = LatLongDistance(46.500144m, 30.663893m, 46.481940m, 30.747274m)
                });
                response.UsersReports = response.UsersReports.OrderBy(x => x.Distance).ToList();
            }

            return(View(response));
        }
コード例 #10
0
        public JsonResult UploadImage()
        {
            string SecretUserId = "";
            string ReportId     = "";
            var    newFileName  = string.Empty;

            var response = new UploadImageResponseDTO()
            {
                TotalUploadedSize = 0
            };

            if (HttpContext.Request.Form.ContainsKey("SecretUserId"))
            {
                SecretUserId = HttpContext.Request.Form["SecretUserId"];
            }

            if (HttpContext.Request.Form.ContainsKey("ReportId"))
            {
                ReportId = HttpContext.Request.Form["ReportId"];
            }

            int parsedReportId = 0;

            bool parseResult = int.TryParse(ReportId, out parsedReportId);

            if (!parseResult)
            {
                response.Error = "Failed to parse ReportId";
                return(new JsonResult(response));
            }

            using (var context = new IsfContext())
            {
                var findResult = context.Reports.FirstOrDefault(x => x.SecretUserId == SecretUserId && x.ReportId == parsedReportId);
                if (findResult == null)
                {
                    response.Error = "No such portfolio binded to specified user.";
                    return(new JsonResult(response));
                }
            }

            if (HttpContext.Request.Form.Files != null)
            {
                var    fileName = string.Empty;
                string PathDB   = string.Empty;

                var files = HttpContext.Request.Form.Files;

                //Assigning Unique Filename (Guid)
                var myUniqueFileName = Convert.ToString(Guid.NewGuid());

                string FileExtension = "";

                using (var fs = new System.IO.MemoryStream())
                {
                    foreach (var file in files)
                    {
                        if (file.Length > 0)
                        {
                            //Getting FileName
                            fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');



                            //Getting file Extension
                            FileExtension = Path.GetExtension(fileName);

                            file.CopyTo(fs);
                        }
                    }

                    newFileName = myUniqueFileName + FileExtension;
                    string pathToImage = System.IO.Path.Combine("./Images/", newFileName);
                    try
                    {
                        using (var fileWrite = new FileStream(pathToImage, FileMode.CreateNew))
                        {
                            var bytes = fs.ToArray();
                            fileWrite.Write(bytes, 0, bytes.Length);
                            fileWrite.Flush();

                            response.TotalUploadedSize  = bytes.Length;
                            response.GeneratedImageName = $"fileName: {pathToImage}, SecretUser: {SecretUserId}, Report: {ReportId}";
                        }

                        using (var context = new IsfContext())
                        {
                            var findResult = context.Reports.FirstOrDefault(x => x.SecretUserId == SecretUserId && x.ReportId == parsedReportId);
                            findResult.ImagePath = newFileName;
                            context.SaveChanges();
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);

                        response.Error = "Failed to save image file";
                        return(new JsonResult(response));
                    }
                }
            }
            return(new JsonResult(response));
        }
コード例 #11
0
        public JsonResult GetNearbyFires([FromBody] GetNearbyFiresParametersDTO parameters)
        {
            var response = new List <GetNearbyFiresResponseDTO>();

            // owner
            response.Add(new GetNearbyFiresResponseDTO()
            {
                Latitude   = 46.484566m,
                Longitude  = 30.737960m,
                PhotoUrl   = null,
                IsOwner    = true,
                IsNasa     = false,
                Confidence = 0.2m,   // from 0 to 1
                Distance   = LatLongDistance(46.484566m, 30.737960m, parameters.Latitude, parameters.Longitude)
            });

            // not owner
            response.Add(new GetNearbyFiresResponseDTO()
            {
                Latitude   = 46.500144m,
                Longitude  = 30.663893m,
                PhotoUrl   = null,
                IsOwner    = false,
                IsNasa     = false,
                Confidence = 0.2m,   // from 0 to 1
                Distance   = LatLongDistance(46.500144m, 30.663893m, parameters.Latitude, parameters.Longitude)
            });

            // nasa
            response.Add(new GetNearbyFiresResponseDTO()
            {
                Latitude   = 46.412424m,
                Longitude  = 30.670665m,
                PhotoUrl   = getImageUrl("NASA.png"),
                IsOwner    = false,
                IsNasa     = true,
                Confidence = 0.65m,   // from 0 to 1
                Distance   = LatLongDistance(46.412424m, 30.670665m, parameters.Latitude, parameters.Longitude)
            });

            decimal longitudeDelta = DistanceToLongitude(parameters.Distance, parameters.Latitude);
            decimal lattitudeDelta = DistanceToLatitude(parameters.Distance);

            using (var context = new IsfContext())
            {
                bool longNormal = true;

                if (longitudeDelta + parameters.Longitude > 180 ||
                    parameters.Longitude - longitudeDelta < -180)
                {
                    longNormal = false;
                }

                decimal minLongitude = NormalizeLongitude(parameters.Longitude - longitudeDelta);
                decimal maxLongitude = NormalizeLongitude(parameters.Longitude + longitudeDelta);

                var reports = context
                              .NasaFireReports
                              .Where(q => q.Latitude <Math.Min(parameters.Latitude + lattitudeDelta, 90) &&
                                                      q.Latitude> Math.Max(parameters.Latitude - lattitudeDelta, -90));

                if (longNormal)
                {
                    reports = reports
                              .Where(q => q.Longitude < parameters.Longitude + longitudeDelta &&
                                     q.Longitude > parameters.Longitude - longitudeDelta);
                }
                else
                {
                    reports = reports
                              .Where(q =>
                                     (q.Longitude <maxLongitude && q.Longitude> -180) ||
                                     (q.Longitude > minLongitude && q.Longitude < 180)
                                     );
                }

                // search nasa db
                foreach (var report in reports)
                {
                    response.Add(new GetNearbyFiresResponseDTO()
                    {
                        Latitude   = report.Latitude,
                        Longitude  = report.Longitude,
                        PhotoUrl   = getImageUrl("NASA.png"),
                        IsOwner    = false,
                        IsNasa     = true,
                        Confidence = report.Confidence, //confidence is already normalized
                        Distance   = LatLongDistance(report.Latitude, report.Longitude, parameters.Latitude, parameters.Longitude)
                    });
                }

                // search reports
                // filter by distance
                var userRerorts = context.Reports
                                  .Where(q => q.Latitude <Math.Min(parameters.Latitude + lattitudeDelta, 90) &&
                                                          q.Latitude> Math.Max(parameters.Latitude - lattitudeDelta, -90));

                if (longNormal)
                {
                    userRerorts = userRerorts
                                  .Where(q => q.Longitude < parameters.Longitude + longitudeDelta &&
                                         q.Longitude > parameters.Longitude - longitudeDelta);
                }
                else
                {
                    userRerorts = userRerorts
                                  .Where(q =>
                                         (q.Longitude <maxLongitude && q.Longitude> -180) ||
                                         (q.Longitude > minLongitude && q.Longitude < 180)
                                         );
                }

                foreach (var report in userRerorts)
                {
                    response.Add(new GetNearbyFiresResponseDTO()
                    {
                        Latitude   = report.Latitude,
                        Longitude  = report.Longitude,
                        PhotoUrl   = report.ImagePath ?? getImageUrl(report.ImagePath),
                        IsOwner    = false,
                        IsNasa     = false,
                        Confidence = 0.2m,
                        Distance   = LatLongDistance(report.Latitude, report.Longitude, parameters.Latitude, parameters.Longitude)
                    });
                }
            }

            response = response.OrderBy(q => q.Distance).ToList();

            return(new JsonResult(response));
        }