Пример #1
0
        public User(DTO.User user)
        {
            using (var db = new PeerDb())
            {
                if (string.IsNullOrEmpty(user.Name))
                {
                    throw new NullReferenceException(user.Name);
                }
                if (string.IsNullOrEmpty(user.Password))
                {
                    throw new NullReferenceException(user.Password);
                }
                if (db.Users.Any(u => u.Name == user.Name))
                {
                    throw new Exception($"User with name {user.Name} already exists.");
                }
                if (user.ReferralId.HasValue && !db.Users.Any(u => u.Id == user.ReferralId))
                {
                    throw new Exception($"User with id {user.Id} does not exist.");
                }
            }

            Id           = Guid.NewGuid();
            Name         = user.Name;
            ReferralId   = user.ReferralId;
            RegisteredOn = DateTime.Now;
            Password     = user.Password;
        }
Пример #2
0
        private static void OnTimedEvent(Object source, ElapsedEventArgs e)
        {
            if (isRunning)
            {
                return;
            }
            isRunning = true;
            var checkDate = DateTime.Now;

            using (var db = new PeerDb())
            {
                var bindings = db.ArticleToUserBindings.Where(b =>
                                                              b.Deadline <= checkDate && !b.Accepted.HasValue);
                if (bindings.Count() != 0)
                {
                    var uIds = bindings.Select(b => b.UserId).ToList();
                    bindings.Set(b => b.Accepted, false).Update();
                    var users = db.Users.Where(u => uIds.Contains(u.Id)).ToList();
                    foreach (var user in users)
                    {
                        user.Rating -= 1;
                        db.Update(user);
                    }
                }
            }
        }
Пример #3
0
        public IActionResult Categories([FromBody] List <string> categories)
        {
            using (var db = new PeerDb())
            {
                var name = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name)?.Value;
                var user = db.Users
                           .FirstOrDefault(u => u.Name == name);
                var boCategories = new List <Category>();
                foreach (var category in categories)
                {
                    var c = db.Categories.FirstOrDefault(cat => cat.Name == category);
                    if (c != null)
                    {
                        boCategories.Add(c);
                    }
                    else
                    {
                        BadRequest($"Category {category} doesn't exist");
                    }
                }

                db.CategoryToUserBindings.Where(c => c.UserId == user.Id).Delete();
                foreach (var category in boCategories)
                {
                    db.Insert(new CategoryToUserBinding(user.Id, category.Id));
                }

                return(Ok());
            }
        }
Пример #4
0
        public IActionResult Article([FromBody] Article article)
        {
            if (string.IsNullOrEmpty(article.Title))
            {
                return(BadRequest("Title must be set"));
            }
            if (string.IsNullOrEmpty(article.Text))
            {
                return(BadRequest("Text must be set"));
            }
            using (var db = new PeerDb())
            {
                var name = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name)?.Value;
                var user = db.Users
                           .FirstOrDefault(u => u.Name == name);
                article.AuthorId   = user.Id;
                article.IsAccepted = null;
                var boArticle = new BO.Article(article);
                db.Insert(boArticle);
                var specialistIds = db.CategoryToUserBindings
                                    .Where(ctub => ctub.CategoryId == article.CategoryId && ctub.UserId != user.Id)
                                    .Select(x => x.UserId).ToList();
                var random         = new Random();
                var reviewersCount = Math.Min(random.Next(1, 5), specialistIds.Count);
                if (reviewersCount != 0)
                {
                    var deadLine         = DateTime.Now.AddDays(1);
                    var addedSpecialists = new List <Guid>();
                    while (addedSpecialists.Count != reviewersCount)
                    {
                        var index        = random.Next(0, specialistIds.Count);
                        var specialistId = specialistIds[index];
                        addedSpecialists.Add(specialistId);
                        specialistIds.Remove(specialistId);
                    }

                    foreach (var sId in addedSpecialists)
                    {
                        db.Insert(new ArticleToUserBinding(sId, boArticle.Id, deadLine));
                    }
                }
                else
                {
                    boArticle.IsAccepted = true;
                    db.Update(boArticle);
                }

                return(Ok($"{boArticle.Id}"));
            }
        }
Пример #5
0
        public string Login(DTO.User user)
        {
            User person;

            using (var db = new PeerDb())
            {
                person = db.Users.FirstOrDefault(x => x.Name == user.Name && x.Password == user.Password);
            }

            if (person != null)
            {
                return(GenerateToken(person));
            }

            return(null);
        }
Пример #6
0
        public IActionResult Register([FromBody] User user)
        {
            try
            {
                using (var db = new PeerDb())
                {
                    db.Insert(new BO.User(user));
                }
            }
            catch (Exception e)
            {
                return BadRequest($"{e.Message}");
            }

            var jwtSecurity = new JwtSecurity.JwtSecurity();
            return Ok(jwtSecurity.Login(user));
        }
Пример #7
0
 public static User ToDto(this BO.User user)
 {
     using (var db = new PeerDb())
     {
         return(new User
         {
             Id = user.Id,
             Name = user.Name,
             ReferralId = user.ReferralId,
             Articles = db.Articles
                        .Where(a => a.UserId == user.Id)
                        .Select(x => x.ToDto()).ToList(),
             RegisteredOn = user.RegisteredOn.ToString("dd/MM/yyyy"),
             Rating = user.Rating,
             Reviews = db.Reviews
                       .Where(a => a.UserId == user.Id)
                       .Select(x => x.ToDto()).ToList(),
         });
     }
 }
Пример #8
0
        public IActionResult RejectReview([FromRoute] Guid id)
        {
            try
            {
                using (var db = new PeerDb())
                {
                    var name = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name)?.Value;
                    var user = db.Users
                               .FirstOrDefault(u => u.Name == name);

                    var atb = db.ArticleToUserBindings
                              .Where(a => a.ArticleId == id && a.UserId == user.Id);
                    if (!atb.Any())
                    {
                        return(BadRequest("You have not access"));
                    }
                    atb.Set(a => a.Accepted, false)
                    .Update();
                    var article   = db.Articles.Single(a => a.Id == id);
                    var reviewers = db.ArticleToUserBindings.Where(a => a.ArticleId == id && a.UserId != user.Id)
                                    .Select(r => r.UserId).ToList();
                    var newReviewer = db.CategoryToUserBindings
                                      .FirstOrDefault(b =>
                                                      b.CategoryId == article.CategoryId && b.UserId != user.Id &&
                                                      !reviewers.Contains(b.UserId) && article.UserId != b.UserId);
                    if (newReviewer != null)
                    {
                        db.Insert(new ArticleToUserBinding(newReviewer.UserId, article.Id,
                                                           DateTime.Now.AddDays(1)));
                    }
                }

                return(Ok());
            }
            catch (Exception)
            {
                return(BadRequest("Smth is wrong"));
            }
        }
Пример #9
0
        public IActionResult ApproveReview([FromRoute] Guid id, int mark)
        {
            if (mark < 1 && mark > 5)
            {
                return(BadRequest("mark can be from 1 to 5"));
            }
            try
            {
                using (var db = new PeerDb())
                {
                    var name = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name)?.Value;
                    var user = db.Users
                               .FirstOrDefault(u => u.Name == name);

                    var atb = db.ArticleToUserBindings
                              .Where(a => a.ArticleId == id && a.UserId == user.Id);
                    if (!atb.Any())
                    {
                        return(BadRequest("You have not access"));
                    }
                    atb.Set(a => a.Accepted, true)
                    .Update();
                    db.Insert(new Review(user.Id, mark, id));
                    if (db.ArticleToUserBindings.Where(a => a.ArticleId == id).All(a => a.Accepted == true))
                    {
                        db.Articles.Where(a => a.Id == id).Set(a => a.IsAccepted, true).Update();
                    }
                    user.Rating += 1;
                    db.Update(user);
                }

                return(Ok());
            }
            catch (Exception)
            {
                return(BadRequest("Smth is wrong"));
            }
        }