public FileSystemRepository(DirectoryInfo folder, FileSystemShardingStrategy sharding, IBuildStuff builder)
 {
     _sharding = sharding;
     _directory = folder;
     _builder = builder;
     _fileCache = new Dictionary<string, FileInfo>();
 }
 public FileSystemAccount(string directoryPath, FileSystemFactory factory, FileSystemShardingStrategy defaultStrategy )
 {
     _factory = factory;
     _defaultStrategy = defaultStrategy;
     _directory = new DirectoryInfo(directoryPath);
     if (!_directory.Exists)
         _directory.Create();
 }
        public FileSystemRepository OperOrCreate(DirectoryInfo directory, FileSystemShardingStrategy defaultShardingStrategy)
        {
            var sharding = defaultShardingStrategy;

            var files = directory.GetFiles().ToList();
            var dataFiles = files.Where(f => !f.Name.StartsWith(Sharding)).ToList();

            if (!files.Any())
            {
                var id = GetId(sharding);
                var path = Path.Combine(directory.FullName, Sharding + id);
                using (new FileInfo(path).Create()) ;
            }
            else
            {
                var factory = files.Single(f => f.Name.StartsWith(Sharding)).Name;

                int spearatorIndex = factory.IndexOf('-');
                var id = factory.Substring(spearatorIndex + 1);
                sharding = BuildShardingStrategy(id);
            }

            return new FileSystemRepository(directory, sharding, _builder);
        }