Пример #1
0
        public async Task <ThreadDto> CreateThreadAsync(string boardId, ThreadCreationDto threadDto)
        {
            throwHelper.ThrowIfNullOrWhiteSpace(boardId, nameof(boardId));
            throwHelper.ThrowIfNull(threadDto, nameof(threadDto));

            if (await context.Boards.FindAsync(boardId) == null)
            {
                throw new KeyNotFoundException($"Board '{boardId}' does not exist.");
            }

            var thread = new ThreadDto {
                Subject = threadDto.Subject, BoardId = boardId
            };

            var post = await posts.CreatePost(thread, threadDto.OpPost);

            return(new ThreadDto
            {
                BoardId = boardId,
                Subject = threadDto.Subject,
                ThreadId = post.ThreadId,
                OpPost = post,
                Replies = Enumerable.Empty <PostDto>()
            });
        }
Пример #2
0
        public ActionResult Put(int id, [FromBody] ThreadDto model)
        {
            var thread = _threadContext.Threads
                         .FirstOrDefault(t => t.Id == id);

            if (thread == null)
            {
                return(NotFound());
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            thread.Subject    = model.Subject;
            thread.AddDate    = model.AddDate;
            thread.UpdateDate = model.UpdateDate;
            thread.Author     = model.Author;
            thread.Content    = model.Content;

            _threadContext.SaveChanges();

            return(NoContent());
        }
Пример #3
0
        public static Thread Converter(ThreadDto threadDto)
        {
            string[] speakersId = threadDto.Speakers.Select(u => u.Id).ToArray();
            string[] messagesId = threadDto.Messages.Select(m => m.Id).ToArray();

            return(new Thread(threadDto.Id, speakersId, messagesId));
        }
Пример #4
0
        public async Task UpdateAsync(ThreadDto thread)
        {
            Thread match = await _unitOfWork.Threads.FindAsync(thread.ThreadId);

            match.Title = thread.Title ?? match.Title;
            await _unitOfWork.CompleteAsync();
        }
Пример #5
0
        public async Task <PostDto> CreatePost(ThreadDto threadDto, PostCreationDto postDto)
        {
            throwHelper.ThrowIfNull(threadDto, nameof(threadDto));
            throwHelper.ThrowIfNull(postDto, nameof(postDto));

            var thread = mapper.Map <Thread>(threadDto);

            if (thread.Id != 0 || context.Threads.Local.Any(t => t.Id == thread.Id))
            {
                context.Attach(thread);
            }

            var post = new Post
            {
                CreationTime = DateTime.UtcNow,
                Message      = postDto.Message,
                Name         = postDto.AuthorName,
                Thread       = thread,
                UserId       = postDto.AuthorId
            };

            if (postDto.Attachment != null)
            {
                post.Image = await CreateImageAsync(postDto.Attachment);
            }

            context.Posts.Add(post);
            await context.SaveChangesAsync();

            return(mapper.Map <PostDto>(post));
        }
Пример #6
0
        private void DoConversion(object threadDto)
        {
            ThreadDto     dto = (ThreadDto)threadDto;
            DirectoryInfo workingDirectory = dto.cueFileInfo.Directory;
            CueSheet      cueSheet         = new CueSheet(dto.cueFileInfo.FullName);
            int           currentSector    = 0;
            StringWriter  gdiOutput        = new StringWriter();

            Invoke((MethodInvoker) delegate { progressBar1.Maximum = cueSheet.Tracks.Length; });
            gdiOutput.WriteLine(cueSheet.Tracks.Length.ToString());
            for (int i = 0; i < cueSheet.Tracks.Length; i++)
            {
                Track  currentTrack        = cueSheet.Tracks[i];
                string inputTrackFilePath  = Path.Combine(workingDirectory.FullName, currentTrack.DataFile.Filename);
                bool   canPerformFullCopy  = currentTrack.Indices.Length == 1;
                string outputTrackFileName = string.Format(
                    "track{0}.{1}",
                    currentTrack.TrackNumber,
                    currentTrack.TrackDataType == DataType.AUDIO ? "raw" : "bin");
                string outputTrackFilePath = Path.Combine(workingDirectory.FullName, outputTrackFileName);
                int    sectorAmount;
                if (canPerformFullCopy)
                {
                    File.Copy(inputTrackFilePath, outputTrackFilePath);
                    sectorAmount = (int)(new FileInfo(inputTrackFilePath).Length / 2352);
                }
                else
                {
                    int gapOffset = CountIndexFrames(currentTrack.Indices[1]);
                    sectorAmount   = CopyFileWithGapOffset(inputTrackFilePath, outputTrackFilePath, gapOffset);
                    currentSector += gapOffset;
                }

                int gap = 0;

                gdiOutput.WriteLine("{0} {1} {2} 2352 {3} {4}",
                                    currentTrack.TrackNumber,
                                    currentSector,
                                    currentTrack.TrackDataType == DataType.AUDIO ? "0" : "4",
                                    outputTrackFileName,
                                    gap);

                Invoke((MethodInvoker) delegate { progressBar1.Value++; });
                currentSector += sectorAmount;

                if (currentTrack.Comments.Contains("HIGH-DENSITY AREA"))
                {
                    if (currentSector < 45000)
                    {
                        currentSector = 45000;
                    }
                }
            }

            string gdiOutputPath = Path.Combine(workingDirectory.FullName, "disc.gdi");

            File.WriteAllText(gdiOutputPath, gdiOutput.ToString());
            inProgress = false;
        }
Пример #7
0
        public async Task EditAsync(ThreadDto dto)
        {
            var existingEntity = await _context.Threads.FirstOrDefaultAsync(e => e.Id == dto.Id);

            MapDtoToExistingEntity(dto, existingEntity);
            existingEntity.Category = _context.GetLocalOrAttach <Category>(dto.CategoryId);
            await _context.SaveChangesAsync();
        }
Пример #8
0
 private bool AreEquivalent(ThreadDto threadDto, ConvThread thread)
 {
     return(threadDto.Id == thread.Id &&
            threadDto.AvatarPath == thread.AvatarPath &&
            threadDto.Description == thread.Description &&
            threadDto.ModeratorId == thread.ModeratorId &&
            threadDto.Name == thread.Name &&
            threadDto.Topic == thread.Topic);
 }
Пример #9
0
 private void ValidateThread(ThreadDto thread)
 {
     if (thread == null)
     {
         throw new ArgumentNullException();
     }
     if (thread.Id == 0)
     {
         throw new IdNotSpecifiedException();
     }
 }
Пример #10
0
        //TODO in DAL layer implement Data integrity constraints (using attributes)
        //TODO probably, I'd better get some instances by name (login for User, name for Thread etc) rather than Id to provide good links

        public async Task <ActionResult> Thread(int id)
        {
            ThreadDto threadDto = await Task.Run(() => _serviceFacade.ThreadService.Get.ById(id));

            if (threadDto == null)
            {
                return(HttpNotFound("Такого треда не существует"));
            }

            return(View(threadDto.MapToVm()));
        }
Пример #11
0
        public async Task RemoveAsync(ThreadDto threadDto)
        {
            if (threadDto == null)
            {
                throw new ArgumentNullException("threadDto", "Argument is null");
            }

            var thread = Mapper.Map <ThreadDto, Thread>(threadDto);

            UnitOfWork.Threads.Remove(thread);
            await UnitOfWork.SaveChangesAsync();
        }
Пример #12
0
        public ActionResult Post([FromBody] ThreadDto model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var thread = _mapper.Map <Thread>(model);

            _threadContext.Threads.Add(thread);
            _threadContext.SaveChanges();

            var key = thread.Id;

            //var tmp = _threadContext.Threads.Last<Thread>().Id;
            //var key = tmp + 1;

            return(Created("api/thread/" + key, null));
        }
Пример #13
0
        public async Task <IActionResult> Edit([FromBody] ThreadDto payload)
        {
            if (payload == null)
            {
                return(BadRequest());
            }
            if (payload.Posts[0] == null)
            {
                return(BadRequest());
            }

            var thread = _threadService.FindWithTags(payload.Id);

            if (thread == null)
            {
                return(BadRequest());
            }
            if (thread.CreatedById != CurrentUserId)
            {
                return(BadRequest());
            }

            thread.Title        = payload.Title;
            thread.DateModified = DateTime.Now;
            thread.ThreadTags.Clear();

            var payloadPost = payload.Posts[0];
            var post        = _postService.FindById(payloadPost.Id);

            post.Content = payloadPost.Content;

            await _unitOfWork.SaveChangesAsync();

            payload.Tags.ForEach(t => thread.ThreadTags.Add(new ThreadTag {
                TagId = t.Id
            }));

            await _unitOfWork.SaveChangesAsync();

            return(Ok());
        }
Пример #14
0
        private void Form1_DragDrop(object sender, DragEventArgs e)
        {
            object insert = e.Data.GetData(DataFormats.FileDrop);

            string[] filenames = (string[])insert;
            string   filename  = filenames[0];

            progressBar1.Maximum = 99;
            progressBar1.Value   = 0;
            animationFrame       = 0;
            inProgress           = true;

            ThreadDto threadData = new ThreadDto();

            threadData.cueFileInfo = new FileInfo(filename);

            convertThread          = new Thread(DoConversion);
            convertThread.Priority = ThreadPriority.Lowest;
            convertThread.Name     = "Converter";
            convertThread.Start(threadData);
        }
Пример #15
0
        public async Task <IActionResult> Create([FromBody] ThreadDto payload)
        {
            var thread = _mapper.Map <Thread>(payload);

            if (thread == null)
            {
                return(BadRequest());
            }
            if (thread.TopicId == null)
            {
                return(BadRequest());
            }
            if (thread.Posts[0] == null)
            {
                return(BadRequest());
            }

            thread.Title                = thread.Title.Trim();
            thread.CreatedById          = CurrentUserId;
            thread.Posts[0].CreatedById = CurrentUserId;
            thread.LastActivity         = DateTime.Now;
            thread.NumberOfPosts        = 1;
            thread.ThreadTags           = new List <ThreadTag>();
            payload.Tags.ForEach(t => thread.ThreadTags.Add(new ThreadTag {
                TagId = t.Id
            }));

            var createdBy = _userService.FindById(CurrentUserId);

            if (createdBy.Role == Role.Administrator || createdBy.Role == Role.Moderator)
            {
                SetApprovalStatus(thread, ApprovalStatus.Approved);
            }

            await _threadService.AddAsync(thread);

            await _unitOfWork.SaveChangesAsync();

            return(StatusCode(StatusCodes.Status201Created, thread));
        }
Пример #16
0
        public async Task ViewThreadAsync_CorrectId_ExpctingRedirectToAction()
        {
            // Arrange
            var threadModel      = new ThreadDto();
            var threadId         = Guid.NewGuid();
            var userModel        = new UserDto();
            var threadViewModel  = new ThreadViewModel();
            var mockThredService = new Mock <IThreadService>();

            mockThredService.Setup(service => service.FindThreadWithRelatedDataAsync(It.IsAny <Guid>(), It.IsAny <int>(), It.IsAny <int>())).ReturnsAsync(threadModel);
            var mockUserService = new Mock <IUserService>();

            mockUserService.Setup(service => service.FindUserAsync(It.IsAny <string>())).ReturnsAsync(userModel);
            var mockAutoMapper = new Mock <IMapper>();

            mockAutoMapper.Setup(mapper => mapper.Map <ThreadViewModel>(threadModel)).Returns(threadViewModel);
            var threadController = new ThreadController(mockThredService.Object, mockUserService.Object, mockAutoMapper.Object)
            {
                ControllerContext = new ControllerContext
                {
                    HttpContext = new DefaultHttpContext
                    {
                        User = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
                        {
                            new Claim(ClaimTypes.Name, "username")
                        }, "someAuthTypeName"))
                    }
                }
            };

            // Act
            var result = await threadController.ViewThreadAsync(threadId);

            // Assert
            var viewResult = Assert.IsAssignableFrom <ViewResult>(result);

            Assert.IsAssignableFrom <ThreadViewModel>(viewResult.ViewData.Model);
        }
Пример #17
0
        public async Task <IActionResult> Post([FromBody] ThreadDto thread)
        {
            if (!ModelState.IsValid || thread.TagId == default)
            {
                return(BadRequest());
            }

            var toDb = new Thread()
            {
                Title     = thread.Title,
                Content   = thread.Content,
                UserId    = thread.User.Id,
                DateAdded = DateTime.Now,
                TagId     = thread.TagId
            };

            await _forumContext.Threads.AddAsync(toDb);

            await _forumContext.SaveChangesAsync();

            thread.Id = toDb.Id;

            return(CreatedAtAction(nameof(Get), new { id = toDb.Id }, thread));
        }
Пример #18
0
 /// <summary>
 /// Map using Automapper
 /// </summary>
 public static ThreadVm MapToVm(this ThreadDto ThreadDto)
 {
     return(Mapper.Map <ThreadDto, ThreadVm>(ThreadDto));
 }
Пример #19
0
        // GET: Thread
        public async Task <ActionResult> Index(int id)
        {
            ThreadDto threadDto = await Task.Run(() => _serviceFacade.ThreadService.Get.ById(id));

            return(View(threadDto.MapToVm()));
        }
Пример #20
0
 /// <summary>
 /// Map using Automapper
 /// </summary>
 public static ConvThread MapToDbEntity(this ThreadDto Thread)
 {
     return(Mapper.Map <ThreadDto, ConvThread>(Thread));
 }
Пример #21
0
        public List <PostDto> ByThread(ThreadDto thread)
        {
            ValidateThread(thread);

            return(ExecuteSelectQuery(uow => uow.PostRepository.GetByThread(thread.MapToDbEntity())));
        }
Пример #22
0
        public async Task <PagedList <ThreadDto> > GetThreadList(int requestorId, ThreadListParams listParams)
        {
            var threads = await _context.Threads
                          .Where(x => x.ThreadParticipants.Where(y => y.ParticipantId == requestorId).FirstOrDefault() != null)
                          .OrderByDescending(x => x.LastModified)
                          .Include(x => x.ThreadParticipants)
                          .Skip((listParams.PageNumber - 1) * listParams.PageSize)
                          .Take(listParams.PageSize)
                          .ToListAsync();

            var threadDtos = new List <ThreadDto>();

            var threadsNumber = await _context.Threads
                                .Where(x => x.ThreadParticipants.Where(y => y.ParticipantId == requestorId).FirstOrDefault() != null)
                                .OrderByDescending(x => x.LastModified)
                                .CountAsync();

            if (threadsNumber == 0)
            {
                return(null);
            }

            foreach (Thread thread in threads)
            {
                var user = await _context.ThreadParticipants
                           .Where(x => x.ThreadId == thread.Id)
                           .Where(x => x.ParticipantId != requestorId)
                           .Include(x => x.Participant)
                           .FirstOrDefaultAsync();

                var message = await _context.Messages
                              .Where(x => x.ThreadId == thread.Id)
                              .OrderByDescending(x => x.MessageSent)
                              .FirstOrDefaultAsync();

                var lastMesageIsMine = true;
                if (message.SenderId != requestorId)
                {
                    lastMesageIsMine = false;
                }

                var isRead = true;
                if (!message.IsRead)
                {
                    isRead = false;
                }

                var threadDto = new ThreadDto()
                {
                    UserOneId         = requestorId,
                    UserTwoId         = user.ParticipantId,
                    UserTwoName       = user.Participant.Name,
                    UserTwoSurname    = user.Participant.Surname,
                    UserTwoPhotoUrl   = user.Participant.PhotoUrl,
                    LastModified      = thread.LastModified,
                    Content           = message.Content,
                    LastMessageIsMine = lastMesageIsMine,
                    IsRead            = isRead
                };

                threadDtos.Add(threadDto);
            }



            return(new PagedList <ThreadDto>(threadDtos, threadsNumber, listParams.PageNumber, listParams.PageSize));
        }