Ejemplo n.º 1
0
        public async Task <FileDTO> CreateAsync(FileCreateDTO fileCreateDto, int creatorId)
        {
            if ((await _fileRepository.ProjectFilesCount(fileCreateDto.ProjectId)) > _maxFilesInProjectCount)
            {
                throw new TooManyFilesInProjectException(_maxFilesInProjectCount);
            }
            if (GetStringSize(fileCreateDto.Content) > _maxFileSize)
            {
                throw new TooHeavyFileException(_maxFileSize);
            }

            var fileCreate = _mapper.Map <File>(fileCreateDto);

            fileCreate.CreatedAt = DateTime.Now;
            fileCreate.UpdatedAt = DateTime.Now;
            fileCreate.CreatorId = creatorId;
            fileCreate.IsOpen    = false;

            var index     = fileCreate.Name.IndexOf('.') + 1;
            var name      = fileCreate.Name;
            var expantion = name.Substring(index, name.Length - index);

            fileCreate.Language = GetFileLanguage(expantion);
            var createdFile = await _fileRepository.CreateAsync(fileCreate);

            var searchFile = _mapper.Map <FileSearch>(createdFile);
            await _fileSearchRepository.IndexAsync(searchFile);

            var comment     = $"File {createdFile.Name} was created";
            var fileHistory = await initializeNewFileHistoryDTO(createdFile, string.Empty, comment, creatorId);

            await _fileHistoryService.CreateAsync(fileHistory);

            return(await GetByIdAsync(createdFile.Id));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> CreateAsync([FromBody] FileCreateDTO fileCreateDTO)
        {
            var creatorId   = this.GetUserIdFromToken();
            var createdFile = await _fileService.CreateAsync(fileCreateDTO, creatorId);

            _logger.LogInformation(LoggingEvents.InsertItem, $"Created file {createdFile.Id}");
            return(CreatedAtAction(nameof(GetByIdAsync), new { id = createdFile.Id }, createdFile));
        }
        private async Task GetFilesRecursive(string sourseDir, FileStructureDTO fileStructureRoot, int userId, int projectId)
        {
            try
            {
                foreach (string directory in Directory.GetDirectories(sourseDir))
                {
                    var dirName = directory.Substring(directory.LastIndexOf('\\') + 1);

                    var nestedFileStructure = new FileStructureDTO()
                    {
                        Type = TreeNodeType.Folder,
                        Name = dirName,
                        Id   = Guid.NewGuid().ToString()
                    };
                    fileStructureRoot.NestedFiles.Add(nestedFileStructure);
                    await GetFilesRecursive(directory, nestedFileStructure, userId, projectId);
                }
                foreach (var file in Directory.GetFiles(sourseDir))
                {
                    var fileName = file.Substring(file.LastIndexOf('\\') + 1);
                    var dirName  = sourseDir.Substring(sourseDir.LastIndexOf('\\') + 1);

                    Debug.WriteLine(dirName);

                    var fileCreateDto = new FileCreateDTO();
                    fileCreateDto.Folder    = dirName;
                    fileCreateDto.Name      = fileName;
                    fileCreateDto.ProjectId = projectId;
                    fileCreateDto.Content   = await GetFileContent(file);

                    var fileCreated = await _fileService.CreateAsync(fileCreateDto, userId);

                    var nestedFileStructure = new FileStructureDTO()
                    {
                        Type = TreeNodeType.File,
                        Name = fileName,
                        Id   = fileCreated.Id,
                        Size = Encoding.Unicode.GetByteCount(fileCreated.Content)
                    };
                    fileStructureRoot.NestedFiles.Add(nestedFileStructure);
                }
            }
            catch (Exception e)
            {
                if (e is TooHeavyFileException || e is TooManyFilesInProjectException)
                {
                    throw e;
                }
                Debug.WriteLine(e.Message);
            }
        }
Ejemplo n.º 4
0
        public async Task <Response <ResourceDTO> > CreateFileResource(Guid userId, FileGroup @group, FileCreateDTO dto)
        {
            var resource = await CreateFileResource(userId, group.ToString().ToLower(), dto);

            var viewModel = new ResourceViewModel(resource);
            var result    = _mapper.Map <ResourceViewModel, ResourceDTO>(viewModel);

            return(new Response <ResourceDTO>
            {
                Data = result
            });
        }
Ejemplo n.º 5
0
        private async Task <ResourceModel> CreateFileResource(Guid userId, string group, FileCreateDTO dto)
        {
            var fileName = Guid.NewGuid().ToString("N");

            var resourceEntity = new ResourceModel
            {
                UserId           = userId,
                Group            = group,
                FileName         = fileName,
                ContentType      = dto.ContentType,
                CreatedDate      = DateTime.UtcNow,
                IsWithResolution = false
            };

            var resource = await _repository.Create(resourceEntity);

            await _filesService.UploadFile(group, fileName, dto.Stream);

            await dto.Stream.DisposeAsync();

            return(resource);
        }
        private async Task GetFilesRecursiveForGit(string sourseDir, FileStructureDTO fileStructureRoot, int userId, int projectId, bool isClone)
        {
            try
            {
                foreach (string directory in Directory.GetDirectories(sourseDir))
                {
                    var dirName = directory.Substring(directory.LastIndexOf('\\') + 1);

                    var tempDir = fileStructureRoot.NestedFiles.SingleOrDefault(n => n.Name == dirName);

                    //get temp libgit2sharp`s folder
                    string ff = "nothing";

                    if (isClone)
                    {
                        ff = Directory.GetDirectories(sourseDir)
                             .SingleOrDefault(d => d.Contains("_git2_"))
                             .Substring(directory.LastIndexOf('\\') + 1);
                    }

                    //Add directory to projectStructure
                    if (tempDir == null && dirName != ".git" && dirName != ff)
                    {
                        var nestedFileStructure = new FileStructureDTO()
                        {
                            Type = TreeNodeType.Folder,
                            Name = dirName,
                            Id   = Guid.NewGuid().ToString()
                        };

                        fileStructureRoot.NestedFiles.Add(nestedFileStructure);
                        await GetFilesRecursiveForGit(directory, nestedFileStructure, userId, projectId, isClone);
                    }
                }
                foreach (var file in Directory.GetFiles(sourseDir))
                {
                    var fileName = file.Substring(file.LastIndexOf('\\') + 1);
                    var dirName  = sourseDir.Substring(sourseDir.LastIndexOf('\\') + 1);

                    Debug.WriteLine(dirName);

                    var tempFile = fileStructureRoot.NestedFiles.SingleOrDefault(n => n.Name == fileName);

                    if (tempFile == null && dirName != ".git")
                    {
                        var fileCreateDto = new FileCreateDTO();
                        fileCreateDto.Folder    = dirName;
                        fileCreateDto.Name      = fileName;
                        fileCreateDto.ProjectId = projectId;
                        fileCreateDto.Content   = await GetFileContent(file);

                        var fileCreated = await _fileService.CreateAsync(fileCreateDto, userId);

                        var nestedFileStructure = new FileStructureDTO()
                        {
                            Type = TreeNodeType.File,
                            Name = fileName,
                            Id   = fileCreated.Id,
                            Size = Encoding.Unicode.GetByteCount(fileCreated.Content)
                        };
                        fileStructureRoot.NestedFiles.Add(nestedFileStructure);
                    }
                    else if (tempFile != null && dirName != ".git")
                    {
                        var targetFile = await _fileService.GetByIdAsync(tempFile.Id);

                        targetFile.Content = await GetFileContent(file);

                        targetFile.UpdatedAt = DateTime.Now;
                        targetFile.UpdaterId = userId;

                        await _fileService.UpdateAsync(_mapper.Map <FileUpdateDTO>(targetFile), userId);
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }