static public PersistDocument FromPayload(Library.Payloads.Models.Document document) { return(new PersistDocument() { Id = document.Id, Created = document.Created, Modfied = document.Modfied, Content = document.Content }); }
public void Store(Session session, string schema, Library.Payloads.Models.Document document, out Guid newId) { try { var persistDocument = PersistDocument.FromPayload(document); if (persistDocument.Id == Guid.Empty) { persistDocument.Id = Guid.NewGuid(); } if (persistDocument.Created == DateTime.MinValue) { persistDocument.Created = DateTime.UtcNow; } if (persistDocument.Modfied == DateTime.MinValue) { persistDocument.Modfied = DateTime.UtcNow; } using (var txRef = core.Transactions.Begin(session)) { var schemaMeta = core.Schemas.VirtualPathToMeta(txRef.Transaction, schema, LockOperation.Write); if (schemaMeta == null || schemaMeta.Exists == false) { throw new LeafSQLSchemaDoesNotExistException(schema); } string documentCatalogDiskPath = Path.Combine(schemaMeta.DiskPath, Constants.DocumentCatalogFile); var documentCatalog = core.IO.GetJson <PersistDocumentCatalog>(txRef.Transaction, documentCatalogDiskPath, LockOperation.Write); documentCatalog.Add(persistDocument); core.IO.PutJson(txRef.Transaction, documentCatalogDiskPath, documentCatalog); string documentDiskPath = Path.Combine(schemaMeta.DiskPath, Helpers.GetDocumentModFilePath(persistDocument.Id)); core.IO.CreateDirectory(txRef.Transaction, Path.GetDirectoryName(documentDiskPath)); core.IO.PutJson(txRef.Transaction, documentDiskPath, persistDocument); core.Indexes.InsertDocumentIntoIndexes(txRef.Transaction, schemaMeta, persistDocument); newId = document.Id; txRef.Commit(); } } catch (Exception ex) { core.Log.Write(String.Format("Failed to store document for process {0}.", session.ProcessId), ex); throw; } }