public async Task <ProfileEnvelope> Handle(Command message, CancellationToken cancellationToken) { var target = await _context.Persons.FirstOrDefaultAsync(x => x.Username == message.Username, cancellationToken); if (target == null) { throw new RestException(HttpStatusCode.NotFound, new { Target = "Target not found." }); } var observer = await _context.Persons.FirstOrDefaultAsync(x => x.Username == _currentUserAccessor.GetCurrentUsername(), cancellationToken); var followedPeople = await _context.FollowedPeople.FirstOrDefaultAsync(x => x.ObserverId == observer.PersonId && x.TargetId == target.PersonId, cancellationToken); if (followedPeople == null) { followedPeople = new FollowedPeople() { Observer = observer, ObserverId = observer.PersonId, Target = target, TargetId = target.PersonId }; await _context.FollowedPeople.AddAsync(followedPeople, cancellationToken); await _context.SaveChangesAsync(cancellationToken); } return(await _profileReader.ReadProfile(message.Username)); }
public async Task <CommentEnvelope> Handle(Command message, CancellationToken cancellationToken) { var Project = await _context.Projects .Include(x => x.Comments) .FirstOrDefaultAsync(x => x.Slug == message.Slug, cancellationToken); if (Project == null) { throw new RestException(HttpStatusCode.NotFound, new { Project = "Project not found." }); } var author = await _context.Persons.FirstAsync(x => x.Username == _currentUserAccessor.GetCurrentUsername(), cancellationToken); var comment = new Comment() { Author = author, Body = message.Comment.Body, CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow }; await _context.Comments.AddAsync(comment, cancellationToken); Project.Comments.Add(comment); await _context.SaveChangesAsync(cancellationToken); return(new CommentEnvelope(comment)); }
public async Task <ComponentEnvelope> Handle(Command message, CancellationToken cancellationToken) { var component = await _context.Components .Where(x => x.Slug == message.Slug) .FirstOrDefaultAsync(cancellationToken); if (component == null) { throw new RestException(HttpStatusCode.NotFound, new { Component = "Component not found." }); } component.ComponentImage = message.Component.ComponentImage ?? component.ComponentImage; component.Description = message.Component.Description ?? component.Description; component.Slug = component.ComponentId.GenerateSlug(); if (_context.ChangeTracker.Entries().First(x => x.Entity == component).State == EntityState.Modified) { component.UpdatedAt = DateTime.UtcNow; } await _context.SaveChangesAsync(cancellationToken); return(new ComponentEnvelope(await _context.Components.GetAllData() .Where(x => x.Slug == component.Slug) .FirstOrDefaultAsync(cancellationToken))); }
public async Task <UserEnvelope> Handle(Command message, CancellationToken cancellationToken) { if (await _context.Persons.Where(x => x.Username == message.User.Username).AnyAsync(cancellationToken)) { throw new RestException(HttpStatusCode.BadRequest, new { User = $"Username {message.User.Username} is already taken." }); } if (await _context.Persons.Where(x => x.Email == message.User.Email).AnyAsync(cancellationToken)) { throw new RestException(HttpStatusCode.BadRequest, new { User = $"E-mail {message.User.Email} is already taken." }); } var salt = Guid.NewGuid().ToByteArray(); var person = new Person { Username = message.User.Username, Email = message.User.Email, Hash = _passwordHasher.Hash(message.User.Password, salt), Salt = salt }; _context.Persons.Add(person); await _context.SaveChangesAsync(cancellationToken); var user = _mapper.Map <Person, User>(person); user.Token = await _jwtTokenGenerator.CreateToken(person.Username); return(new UserEnvelope(user)); }
public async Task <ProjectEnvelope> Handle(Command message, CancellationToken cancellationToken) { var Project = await _context.Projects .Where(x => x.Slug == message.Slug) .FirstOrDefaultAsync(cancellationToken); if (Project == null) { throw new RestException(HttpStatusCode.NotFound, new { Project = "Project not found." }); } Project.Description = message.Project.Description ?? Project.Description; Project.Body = message.Project.Body ?? Project.Body; Project.Title = message.Project.Title ?? Project.Title; Project.ProjectImage = message.Project.ProjectImage ?? Project.ProjectImage; Project.Slug = Project.Title.GenerateSlug(); if (_context.ChangeTracker.Entries().First(x => x.Entity == Project).State == EntityState.Modified) { Project.UpdatedAt = DateTime.UtcNow; } await _context.SaveChangesAsync(cancellationToken); return(new ProjectEnvelope(await _context.Projects.GetAllData() .Where(x => x.Slug == Project.Slug) .FirstOrDefaultAsync(cancellationToken))); }
public async Task <ProjectEnvelope> Handle(Command message, CancellationToken cancellationToken) { var Project = await _context.Projects.FirstOrDefaultAsync(x => x.Slug == message.Slug, cancellationToken); if (Project == null) { throw new RestException(HttpStatusCode.NotFound, new { Project = "Project not found." }); } var person = await _context.Persons.FirstOrDefaultAsync(x => x.Username == _currentUserAccessor.GetCurrentUsername(), cancellationToken); var favorite = await _context.ProjectFavorites.FirstOrDefaultAsync(x => x.ProjectId == Project.ProjectId && x.PersonId == person.PersonId, cancellationToken); if (favorite == null) { favorite = new ProjectFavorite() { Project = Project, ProjectId = Project.ProjectId, Person = person, PersonId = person.PersonId }; await _context.ProjectFavorites.AddAsync(favorite, cancellationToken); await _context.SaveChangesAsync(cancellationToken); } return(new ProjectEnvelope(await _context.Projects.GetAllData() .FirstOrDefaultAsync(x => x.ProjectId == Project.ProjectId, cancellationToken))); }
public async Task <ComponentEnvelope> Handle(Command message, CancellationToken cancellationToken) { var whereToFindIt = new List <WhereToFindIt>(); foreach (var where in (message.Component.WhereToFindItList ?? Enumerable.Empty <string>())) { var w = await _context.WhereToFind.FindAsync(where); if (w == null) { w = new WhereToFindIt() { WhereToFindItId = where }; await _context.WhereToFind.AddAsync(w, cancellationToken); await _context.SaveChangesAsync(cancellationToken); } whereToFindIt.Add(w); } var component = new Component() { ComponentId = message.Component.Name, CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow, Description = message.Component.Description, ComponentImage = string.IsNullOrEmpty(message.Component.ComponentImage) ? ImagePath.ImageNotProvided : message.Component.ComponentImage, Slug = message.Component.Name.GenerateSlug() }; await _context.Components.AddAsync(component, cancellationToken); await _context.ComponentWhereToFindIt.AddRangeAsync(whereToFindIt.Select(x => new ComponentWhereToFindIt() { Component = component, WhereToFindIt = x }), cancellationToken); await _context.SaveChangesAsync(cancellationToken); return(new ComponentEnvelope(component)); }
public async Task Handle(Command message, CancellationToken cancellationToken) { var component = await _context.Components .FirstOrDefaultAsync(x => x.Slug == message.Slug, cancellationToken); if (component == null) { throw new RestException(HttpStatusCode.NotFound, new { Component = "Component not found." }); } _context.Components.Remove(component); await _context.SaveChangesAsync(cancellationToken); }
public async Task <UserEnvelope> Handle(Command message, CancellationToken cancellationToken) { var currentUsername = _currentUserAccessor.GetCurrentUsername(); var person = await _context.Persons.Where(x => x.Username == currentUsername).FirstOrDefaultAsync(cancellationToken); person.Username = message.User.Username ?? person.Username; person.Email = message.User.Email ?? person.Email; person.Bio = message.User.Bio ?? person.Bio; person.Image = message.User.Image ?? person.Image; if (!string.IsNullOrWhiteSpace(message.User.Password)) { var salt = Guid.NewGuid().ToByteArray(); person.Hash = _passwordHasher.Hash(message.User.Password, salt); person.Salt = salt; } await _context.SaveChangesAsync(cancellationToken); return(new UserEnvelope(_mapper.Map <Person, User>(person))); }
public async Task <ProjectEnvelope> Handle(Command message, CancellationToken cancellationToken) { var author = await _context.Persons.FirstAsync(x => x.Username == _currentUserAccessor.GetCurrentUsername(), cancellationToken); var components = new List <Component>(); foreach (var component in (message.Project.ComponentList ?? Enumerable.Empty <string>())) { var c = await _context.Components.FindAsync(component); if (c == null) { c = new Component() { ComponentId = component, CreatedAt = DateTime.Now, UpdatedAt = DateTime.Now, Slug = component.GenerateSlug() }; await _context.Components.AddAsync(c, cancellationToken); await _context.SaveChangesAsync(cancellationToken); } components.Add(c); } var tags = new List <Tag>(); foreach (var tag in (message.Project.TagList ?? Enumerable.Empty <string>())) { var t = await _context.Tags.FindAsync(tag); if (t == null) { t = new Tag() { TagId = tag }; await _context.Tags.AddAsync(t, cancellationToken); await _context.SaveChangesAsync(cancellationToken); } tags.Add(t); } var Project = new Project() { Author = author, Body = message.Project.Body, CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow, Description = message.Project.Description, ProjectImage = string.IsNullOrEmpty(message.Project.ProjectImage) ? ImagePath.ImageNotProvided : message.Project.ProjectImage, Title = message.Project.Title, Slug = message.Project.Title.GenerateSlug() }; await _context.Projects.AddAsync(Project, cancellationToken); await _context.ProjectComponents.AddRangeAsync(components.Select(x => new ProjectComponent() { Project = Project, Component = x }), cancellationToken); await _context.SaveChangesAsync(cancellationToken); await _context.ProjectTags.AddRangeAsync(tags.Select(x => new ProjectTag() { Project = Project, Tag = x }), cancellationToken); await _context.SaveChangesAsync(cancellationToken); return(new ProjectEnvelope(Project)); }