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; }
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); } } } }
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()); } }
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}")); } }
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); }
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)); }
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(), }); } }
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")); } }
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")); } }