public Task <IEnumerable <PhilatelicItem> > GetPhilatelicItemsAsync(UserIdentity collector, IEnumerable <Guid> itemsToInsure)
        {
            var path = $"{webRoot}{PersistencePathCreator.GetCollectionSummaryPersistencePath(collector)}";

            return(Task.Run(() =>
            {
                if (!File.Exists(path))
                {
                    return new List <PhilatelicItem>() as IEnumerable <PhilatelicItem>;
                }

                var result = new List <PhilatelicItem>();
                CollectionsSummary summary;
                using (var streamReader = new StreamReader(new FileStream(path, FileMode.Open)))
                {
                    summary = JsonConvert.DeserializeObject <CollectionsSummary>(streamReader.ReadToEnd());
                };

                foreach (var coll in summary.Collections)
                {
                    var persistedCollection = GetCollectionAsync(collector, coll.Id).Result;
                    result.AddRange(persistedCollection.Items.Where(i => itemsToInsure.Contains(i.Id)));
                }

                return result;
            }));
        }
        public Task <IEnumerable <ICollectableCollection> > GetCollectionNamesAsync(UserIdentity collector)
        {
            var path = $"{webRoot}{PersistencePathCreator.GetCollectionSummaryPersistencePath(collector)}";

            return(Task.Run(() =>
            {
                if (!File.Exists(path))
                {
                    return (new List <IPhilatelicCollection>() as IEnumerable <ICollectableCollection>);
                }

                using (var streamReader = new StreamReader(new FileStream(path, FileMode.Open)))
                {
                    var summary = JsonConvert.DeserializeObject <CollectionsSummary>(streamReader.ReadToEnd());
                    var result = new List <IPhilatelicCollection>();

                    foreach (var coll in summary.Collections)
                    {
                        result.Add(new PhilatelicCollection {
                            Id = coll.Id, Title = coll.Title, CollectorId = collector.Id
                        });
                    }

                    return result;
                }
            }));
        }
        public Task CreateCollectionAsync(UserIdentity collector, string newCollection)
        {
            var collection = new PhilatelicCollection {
                Id = Guid.NewGuid(), CollectorId = collector.Id, Title = newCollection, Items = new List <PhilatelicItem>()
            };
            var jsonDocument = JsonConvert.SerializeObject(collection);

            var documentName = $"{collection.Id}.json";
            var paths        = PersistencePathCreator.CreateCollectionDocumentPath(collector, collection.Id, documentName);

            var collectionSummaryPath = $"{webRoot}{PersistencePathCreator.GetCollectionSummaryPersistencePath(collector)}";

            var directory = $"{webRoot}{paths.DirectoryPath}";

            return(Task.Run(() =>
            {
                if (!Directory.Exists(directory))
                {
                    Directory.CreateDirectory(directory);
                }

                using (var streamWriter = new StreamWriter(File.Create($"{webRoot}{paths.FilestreamPath}")))
                {
                    streamWriter.Write(jsonDocument);
                }

                // update colletions summary
                CollectionsSummary summary;
                if (File.Exists(collectionSummaryPath))
                {
                    using (var streamReader = new StreamReader(new FileStream(collectionSummaryPath, FileMode.Open)))
                    {
                        summary = JsonConvert.DeserializeObject <CollectionsSummary>(streamReader.ReadToEnd());
                        summary.Collections.Add(new ColletionSummary {
                            Id = collection.Id, Title = collection.Title
                        });
                    }
                }
                else
                {
                    summary = new CollectionsSummary
                    {
                        Collector = collector,
                        Collections = new List <ColletionSummary>
                        {
                            new ColletionSummary {
                                Id = collection.Id, Title = collection.Title
                            }
                        }
                    };
                }

                using (var streamWriter = new StreamWriter(File.Create(collectionSummaryPath)))
                {
                    streamWriter.Write(JsonConvert.SerializeObject(summary));
                }
            }));
        }
        public Task SavePhilatelicItemAsync(UserIdentity collector, Guid collectionId, PhilatelicItem philatelicItem)
        {
            var path = $"{webRoot}{PersistencePathCreator.GetCollectionPersistencePath(collector, collectionId)}";

            PhilatelicCollection collection;

            return(Task.Run(() => {
                if (!File.Exists(path))
                {
                    throw new Exception("could not find required collection");
                }

                using (var streamReader = new StreamReader(new FileStream(path, FileMode.Open)))
                {
                    collection = JsonConvert.DeserializeObject <PhilatelicCollection>(streamReader.ReadToEnd());
                }

                var item = collection.Items.SingleOrDefault(itm => itm.Id == philatelicItem.Id);

                if (item == null)
                {
                    // add new item
                    collection.Items.Add(philatelicItem);
                }
                else
                {
                    // keep previous scans if no new scans provided
                    if (!philatelicItem.Scans.Any())
                    {
                        philatelicItem.Scans = item.Scans;
                    }
                    else
                    {
                        foreach (var scan in item.Scans)
                        {
                            scanRepository.RemoveScan(collector, collectionId, scan.Image);
                        }
                    }

                    // update existing item
                    var index = collection.Items.IndexOf(item);
                    collection.Items.RemoveAt(index);
                    collection.Items.Insert(index, philatelicItem);
                }

                using (var streamWriter = new StreamWriter(File.Create(path)))
                {
                    streamWriter.Write(JsonConvert.SerializeObject(collection));
                }
            }));
        }
        public Task <IPhilatelicCollection> GetCollectionAsync(UserIdentity collector, Guid collectionId)
        {
            var path = $"{webRoot}{PersistencePathCreator.GetCollectionPersistencePath(collector, collectionId)}";

            return(Task.Run(() =>
            {
                if (!File.Exists(path))
                {
                    throw new Exception("could not find required collection");
                }

                using (var streamReader = new StreamReader(new FileStream(path, FileMode.Open)))
                {
                    return JsonConvert.DeserializeObject <PhilatelicCollection>(streamReader.ReadToEnd()) as IPhilatelicCollection;
                }
            }));
        }
        public Task RemovePhilatelicItemAsync(UserIdentity collector, Guid collectionId, Guid itemId)
        {
            var path = $"{webRoot}{PersistencePathCreator.GetCollectionPersistencePath(collector, collectionId)}";

            PhilatelicCollection collection;

            return(Task.Run(() => {
                if (!File.Exists(path))
                {
                    throw new Exception("could not find required collection");
                }

                using (var streamReader = new StreamReader(new FileStream(path, FileMode.Open)))
                {
                    collection = JsonConvert.DeserializeObject <PhilatelicCollection>(streamReader.ReadToEnd());
                }

                var item = collection.Items.SingleOrDefault(itm => itm.Id == itemId);

                if (item == null)
                {
                    return;
                }

                foreach (var scan in item.Scans)
                {
                    scanRepository.RemoveScan(collector, collectionId, scan.Image);
                }

                var index = collection.Items.IndexOf(item);
                collection.Items.RemoveAt(index);

                using (var streamWriter = new StreamWriter(File.Create(path)))
                {
                    streamWriter.Write(JsonConvert.SerializeObject(collection));
                }
            }));
        }
Пример #7
0
        public async Task <ScanPath> SaveCollectableScan(UserIdentity collector, Guid collectionId, IFormFile scan)
        {
            var filename = $"{Guid.NewGuid()}.jpg";              //TODO: do not assume file will be a jpg

            var paths    = PersistencePathCreator.CreateCollectableScanPath(collector, collectionId, filename);
            var scanPath = new ScanPath {
                Path = paths.PathToPersist
            };

            var directory = $"{webRoot}{paths.DirectoryPath}";

            if (!Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }

            using (var stream = new FileStream($"{webRoot}{paths.FilestreamPath}", FileMode.Create))
            {
                await scan.CopyToAsync(stream);
            };

            return(scanPath);
        }