internal static Frame <IssueData> InternalGetIssues(
            int framePosition,
            int frameSize,
            int?categoryId   = null,
            double?latitude  = null,
            double?longitude = null,
            double?radius    = null)
        {
            using (var db = new Db2019DbContext()) {
                var query = db.Issues.Include(i => i.Tags);
                if (categoryId.HasValue)
                {
                    query = query.Where(i => i.CategoryId == categoryId.Value);
                }
                if (latitude.HasValue &&
                    longitude.HasValue &&
                    radius.HasValue)
                {
                    query = query.Where(
                        i => i.Latitude >= latitude - radius && i.Latitude <= latitude + radius &&
                        i.Longitude >= longitude - radius && i.Longitude <= longitude + radius);
                }
                query = query.OrderByDescending(i => i.CreatedTime);
                if (frameSize >= 0)
                {
                    query = query.Skip(framePosition).Take(frameSize);
                }

                var issues = query.ToList();
                return(new Frame <IssueData> {
                    Data = issues.Select(Convert).ToList(),
                    TotalCount = query.Count()
                });
            }
        }
예제 #2
0
        /// <summary>
        ///     Получить сессию пользователя по идентификатору устройства
        /// </summary>
        /// <param name="deviceId">Идентификатор устройства</param>
        /// <returns>Сессия пользователя</returns>
        public Guid Get(string deviceId)
        {
            using (var db = new Db2019DbContext())
            {
                var user = db.Users.FirstOrDefault(u => u.DeviceId == deviceId);
                if (user == null)
                {
                    user = new User
                    {
                        DeviceId = deviceId
                    };
                    db.Users.Add(user);
                }

                if (user.SessionId == null)
                {
                    user.SessionId = Guid.NewGuid();
                }

                user.LastLoginTime = DateTime.Now;

                db.SaveChanges();

                return(user.SessionId.GetValueOrDefault());
            }
        }
        public IHttpActionResult Vote(string sessionId, int issueId)
        {
            using (var db = new Db2019DbContext())
            {
                if (Guid.TryParse(sessionId, out var session) == false)
                {
                    return(BadRequest("Invalid session id"));
                }
                var user = db.Users.FirstOrDefault(u => u.SessionId == session);
                if (user == null)
                {
                    return(Unauthorized());
                }
                var issue = db.Issues.Include(i => i.Tags).FirstOrDefault(i => i.Id == issueId);
                if (issue == null)
                {
                    throw new HttpException((int)HttpStatusCode.NotFound, "Issue not found");
                }

                issue.Rating += 1;
                db.SaveChanges();
                return(Ok(
                           new
                {
                    Message = "Ok"
                }));
            }
        }
 internal static IssueData GetById(int issueId)
 {
     using (var db = new Db2019DbContext())
     {
         var issue = db.Issues.Include(i => i.Tags).Include(i => i.Category).FirstOrDefault(i => i.Id == issueId);
         return(Convert(issue));
     }
 }
예제 #5
0
 /// <summary>
 ///     Получить список меток по категории
 /// </summary>
 /// <param name="categoryId">Идентификатор категории</param>
 /// <returns></returns>
 public List <TagData> Get(int categoryId)
 {
     using (var db = new Db2019DbContext())
     {
         var tags = db.Tags.Where(t => t.CategoryId == categoryId).OrderBy(t => t.Id).ToList();
         return(tags.Select(Convert).ToList());
     }
 }
예제 #6
0
 public static List <CategoryData> InternalCategoryList()
 {
     using (var db = new Db2019DbContext())
     {
         var categories = db.Categories.OrderBy(c => c.Id).ToList();
         return(categories.Select(Convert).ToList());
     }
 }
        public HttpResponseMessage GetPhoto(int issueId)
        {
            using (var db = new Db2019DbContext())
            {
                var issue = db.Issues.Include(i => i.Tags).FirstOrDefault(i => i.Id == issueId);
                if (issue == null)
                {
                    throw new HttpException((int)HttpStatusCode.NotFound, "Issue not found");
                }

                var response = new HttpResponseMessage();
                response.Content = issue.Photo?.Length > 0
                    ? new ByteArrayContent(issue.Photo)
                    : GetStubPhotoContent(issueId);
                response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
                return(response);
            }
        }
        public string GetData(string filter)
        {
            List <Appeal> appeals = new List <Appeal>();

            using (var db = new Db2019DbContext())
            {
                var issues = db.Issues.ToList();
                for (var index = 1; index <= issues.Count; index++)
                {
                    var item = issues[index - 1];
                    appeals.Add(new Appeal()
                    {
                        Coordinate  = new Point(item.Latitude, item.Longitude),
                        Hint        = item.Category.Name,
                        Description = string.Format("<p><a href=\"{0}\">№ {1} От: {2}</a><br>Статус:{3}<br>Рейтинг: {4}<br>{5}<br>{6}<br></p>",
                                                    Url.Action("ById", "ShowIssue", new { id = item.Id }),
                                                    item.Id,
                                                    item.CreatedTime.ToString("yyyy.MM.dd"),
                                                    StatusNames[item.Status],
                                                    item.Rating,
                                                    item.Category.Name,
                                                    item.Comment),
                        StateCode = StatusCodes[item.Status] // % 3 == 0 ? "PROC" : index % 3 == 1 ? "NEW" : "PROCESS"
                    });
                }
            }

            var result = appeals;

            if ((!string.IsNullOrEmpty(filter)) && (filter != "ALL"))
            {
                result = result.Where(x => x.StateCode == filter).ToList();
            }

            return(JsonConvert.SerializeObject(result));
        }
        /// <summary>
        ///     Добавить новую заявку
        /// </summary>
        /// <param name="sessionId">Сессия пользователя</param>
        /// <param name="data">Параметры новой заявки</param>
        public IHttpActionResult Post(
            string sessionId,
            [FromBody] NewIssueData data)
        {
            traceLogger.Debug(
                "Post new issue: sessionId = {0}, body = {1}",
                sessionId,
                JsonConvert.SerializeObject(data, Formatting.None));
            if (Guid.TryParse(sessionId, out var session) == false)
            {
                return(BadRequest("Invalid session id"));
            }
            if (data == null)
            {
                return(BadRequest("Invalid issue data"));
            }
            using (var db = new Db2019DbContext())
            {
                var user = db.Users.FirstOrDefault(u => u.SessionId == session);
                if (user == null)
                {
                    return(Unauthorized());
                }
                var category = db.Categories.FirstOrDefault(c => c.Id == data.CategoryId);
                if (category == null)
                {
                    return(BadRequest("Invalid category id"));
                }
                byte[] photo = null;
                try
                {
                    photo = System.Convert.FromBase64String(data.Photo);
                }
                catch
                {
                    return(BadRequest("Invalid photo"));
                }

                var tags = data.Tags?.Count > 0
                    ? db.Tags.Where(t => t.CategoryId == category.Id && data.Tags.Contains(t.Id)).ToList()
                    : null;

                var issue = new Issue
                {
                    User      = user,
                    Category  = category,
                    Latitude  = data.Latitude,
                    Longitude = data.Longitude,
                    Photo     = photo,
                    Comment   = string.IsNullOrWhiteSpace(data.Comment) ? null : data.Comment.Trim()
                };
                if (tags != null)
                {
                    foreach (var tag in tags)
                    {
                        issue.Tags.Add(tag);
                    }
                }

                issue.CreatedTime = DateTime.Now;
                db.Issues.Add(issue);
                db.SaveChanges();

                return(Ok(
                           new
                {
                    Message = "Ok"
                }));
            }
        }