From 7ed05abdb873b2686810fe2e5f61c91fd17bc704 Mon Sep 17 00:00:00 2001 From: qwsdcvghyu89 <61093706+qwsdcvghyu89@users.noreply.github.com> Date: Mon, 22 Sep 2025 01:51:46 +1000 Subject: [PATCH] refactor: modularize Beam into new projects and interfaces - Introduced modularity by splitting Beam into new projects: Beam.Abstractions, Beam.Models, and Beam.Downloaders. - Refactored existing classes into appropriate namespaces and projects. - Replaced specific implementations with abstractions (e.g., SourceLinkBuilder to LinkBuilder, State to IState, etc.). - Updated interfaces: added ITemplate, IArticleData, IDownloadReport, and others for improved extensibility. - Removed deprecated classes like SourceLinkBuilder and StateChangerFactory. - Enhanced link handling in downloaders by refactoring to use `string` over `SourceLink`. - Consolidated shared logic under Beam.Abstractions. --- Beam.Abstractions/Beam.Abstractions.csproj | 16 + Beam.Abstractions/IArticleData.cs | 10 + Beam.Abstractions/IDataBindings.cs | 27 + Beam.Abstractions/IDataProvider.cs | 14 + Beam.Abstractions/IDocument.cs | 28 + Beam.Abstractions/IDocumentMetaData.cs | 7 + Beam.Abstractions/IDownloadReport.cs | 3 + Beam.Abstractions/ILinkBuilder.cs | 11 + Beam.Abstractions/IOrdered.cs | 6 + Beam.Abstractions/IReadOnlyState.cs | 6 + Beam.Abstractions/IResourceDictionary.cs | 3 + Beam.Abstractions/IRetryReport.cs | 6 + Beam.Abstractions/IState.cs | 8 + Beam.Abstractions/IStateChangeBehaviour.cs | 10 + Beam.Abstractions/IStateChangerFactory.cs | 3 + Beam.Abstractions/ITemplate.cs | 8 + Beam.Abstractions/IUnitDownloader.cs | 7 + {Beam => Beam.Api}/ApiCall.cs | 0 {Beam => Beam.Api}/ApiCallBuilder.cs | 5 +- {Beam => Beam.Api}/ApiCalls.cs | 0 {Beam => Beam.Api}/ApiCallsBuilder.cs | 0 {Beam => Beam.Api}/ApiResponse.cs | 0 Beam.Data/BeamDataContext.cs | 50 + .../LinkBuilder.cs | 42 +- .../ResourceDictionary.cs | 16 +- Beam.Data/Template.cs | 19 + {Beam.Models => Beam.Data}/WebResource.cs | 10 +- {Beam => Beam.Downloaders}/DownloadContext.cs | 32 +- .../DownloadContextBuilder.cs | 23 +- .../SequentialDownloader.cs | 15 +- .../SequentialFragmentDownloader.cs | 7 +- {Beam => Beam.Downloaders}/UnitDownloader.cs | 10 +- .../UnitDownloaderBinary.cs | 11 +- .../UnitFragmentDownloader.cs | 21 +- .../UnitFragmentDownloaderBinary.cs | 15 +- Beam.Dynamic/AnchorCollectionDataProvider.cs | 16 +- Beam.Dynamic/AnchorDataProvider.cs | 13 +- .../Architecture.cs | 10 +- Beam.Dynamic/Beam.Dynamic.csproj | 8 +- {Beam => Beam.Dynamic}/CommonStateChangers.cs | 22 +- Beam.Dynamic/CommonTransformers.cs | 45 + Beam.Dynamic/ConstantStateChanger.cs | 9 + Beam.Dynamic/DataBindings.cs | 365 +++--- .../DataProviderJsonTypeInfoResolver.cs | 37 + Beam.Dynamic/DropDownDataProvider.cs | 13 +- Beam.Dynamic/IDataProvider.cs | 21 - .../MainArchitecture.cs | 6 +- .../NumberedStateChanger.cs | 12 +- Beam.Dynamic/StateChangerFactory.cs | 3 +- .../{OnlineCleaner.cs => StringCleaner.cs} | 2 +- Beam.Exceptions/AssertionException.cs | 14 + Beam.Exceptions/Exceptions.Designer.cs | 116 ++ Beam.Exceptions/Exceptions.resx | 39 + Beam.Exceptions/MapException.cs | 11 + Beam.Exports/Beam.Exports.csproj | 6 +- Beam.Exports/Exporter.cs | 7 +- Beam.Exports/HtmlExporter.cs | 2 + Beam.Fluent/Beam.Fluent.csproj | 9 +- Beam.Fluent/DownloadBuilder.ContextStage.cs | 10 +- Beam.Fluent/DownloadBuilder.DownloadStage.cs | 1 + .../DownloadBuilder.IAlternativeLinkStage.cs | 6 +- ...nloadBuilder.IAlternativeTransformStage.cs | 4 +- Beam.Fluent/DownloadBuilder.IContextStage.cs | 7 +- .../DownloadBuilder.ITransformStage.cs | 1 + Beam.Fluent/DownloadBuilder.LinkStage.cs | 11 +- Beam.Fluent/DownloadBuilder.TransformStage.cs | 4 +- Beam.Fluent/DownloadBuilder.cs | 4 +- Beam.Models/AsyncDownloadFailurePredicate.cs | 3 + Beam.Models/AsyncTransformer.cs | 3 + Beam.Models/Beam.Models.csproj | 9 +- Beam.Models/BeamDataContext.cs | 50 - {Beam => Beam.Models}/ByteDocument.cs | 2 +- {Beam => Beam.Models}/Document.cs | 11 +- {Beam => Beam.Models}/DocumentCache.cs | 8 +- Beam.Models/DownloadReport.cs | 8 + Beam.Models/File.cs | 2 +- {Beam => Beam.Models}/Fragment.cs | 2 +- {Beam => Beam.Models}/ImmutableState.cs | 9 +- Beam.Models/LinkCollection.cs | 13 - Beam.Models/Ordered.cs | 6 + Beam.Models/Public Concrete/ArticleData.cs | 41 + {Beam => Beam.Models}/RetryReport.cs | 6 +- {Beam => Beam.Models}/State.cs | 15 +- {Beam => Beam.Models}/StreamDocument.cs | 2 +- {Beam => Beam.Models}/StringDocument.cs | 8 +- .../TableOfContentsData.cs | 12 +- Beam.Models/Template.cs | 15 - Beam.Models/Tracked.cs | 11 - Beam.Playwright/Beam.Playwright.csproj | 4 +- Beam.Playwright/PlaywrightUnitDownloader.cs | 4 +- .../PlaywrightUnitPageDownloader.cs | 2 + Beam.Stealth/Beam.Stealth.csproj | 4 +- Beam.Stealth/StealthFragmentDownloader.cs | 2 + Beam.Stealth/StealthFragmentPageDownloader.cs | 2 + Beam.Stealth/StealthUnitDownloader.cs | 4 + Beam.Stealth/StealthUnitPageDownloader.cs | 2 + Beam.Temporary.Cli/Beam.Temporary.Cli.csproj | 2 +- Beam.Temporary.Cli/CommonTransformers.cs | 46 - Beam.Temporary.Cli/NovelDefinitionBuilder.cs | 212 ++-- Beam.Temporary.Cli/NovelStatics.cs | 1037 +++++++++-------- Beam.Temporary.Cli/Program.cs | 445 +++---- Beam.Temporary.Cli/QuickAndDirtyJanitor.cs | 51 +- Beam.Temporary.Cli/StateChangerFactory.cs | 34 - .../Templates/Classic/ClassicTemplates.cs | 60 +- Beam.Tests/Beam.Tests.csproj | 1 + Beam.Tests/OnlineCleaner.Tests.cs | 6 +- Beam.Tests/SouceLinkBuilder.Tests.cs | 31 +- Beam.sln | 30 + Beam/ArticleData.cs | 22 - Beam/Beam.csproj | 3 +- Beam/ConstantStateChanger.cs | 13 - Beam/DownloadEnumerable.cs | 1 + Beam/DownloadReport.cs | 6 - Beam/IAsyncEnumeratorExtensions.cs | 4 +- Beam/IDocument.cs | 29 - Beam/IDocumentExtensions.cs | 7 - Beam/IDocumentMetaData.cs | 7 - Beam/IDocumentSourceLinkFactory.cs | 10 +- Beam/IStateChangeBehaviour.cs | 8 - Beam/IUnitDownloader.cs | 6 - Beam/Ordered.cs | 3 - Beam/OrderedLinkGenerator.cs | 63 + Beam/OrderedSourceLinkGenerator.cs | 60 - Beam/S.cs | 22 +- Beam/SourceLink.cs | 37 - Beam/SourceLinkEnumerable.cs | 27 - Beam/StringEnumerable.cs | 22 + aeqw89.Beam/aeqw89.Beam.csproj | 14 +- 128 files changed, 2058 insertions(+), 1804 deletions(-) create mode 100644 Beam.Abstractions/Beam.Abstractions.csproj create mode 100644 Beam.Abstractions/IArticleData.cs create mode 100644 Beam.Abstractions/IDataBindings.cs create mode 100644 Beam.Abstractions/IDataProvider.cs create mode 100644 Beam.Abstractions/IDocument.cs create mode 100644 Beam.Abstractions/IDocumentMetaData.cs create mode 100644 Beam.Abstractions/IDownloadReport.cs create mode 100644 Beam.Abstractions/ILinkBuilder.cs create mode 100644 Beam.Abstractions/IOrdered.cs create mode 100644 Beam.Abstractions/IReadOnlyState.cs create mode 100644 Beam.Abstractions/IResourceDictionary.cs create mode 100644 Beam.Abstractions/IRetryReport.cs create mode 100644 Beam.Abstractions/IState.cs create mode 100644 Beam.Abstractions/IStateChangeBehaviour.cs create mode 100644 Beam.Abstractions/IStateChangerFactory.cs create mode 100644 Beam.Abstractions/ITemplate.cs create mode 100644 Beam.Abstractions/IUnitDownloader.cs rename {Beam => Beam.Api}/ApiCall.cs (100%) rename {Beam => Beam.Api}/ApiCallBuilder.cs (96%) rename {Beam => Beam.Api}/ApiCalls.cs (100%) rename {Beam => Beam.Api}/ApiCallsBuilder.cs (100%) rename {Beam => Beam.Api}/ApiResponse.cs (100%) create mode 100644 Beam.Data/BeamDataContext.cs rename Beam/SourceLinkBuilder.cs => Beam.Data/LinkBuilder.cs (92%) rename {Beam.Models => Beam.Data}/ResourceDictionary.cs (74%) create mode 100644 Beam.Data/Template.cs rename {Beam.Models => Beam.Data}/WebResource.cs (82%) rename {Beam => Beam.Downloaders}/DownloadContext.cs (74%) rename {Beam => Beam.Downloaders}/DownloadContextBuilder.cs (90%) rename {Beam => Beam.Downloaders}/SequentialDownloader.cs (87%) rename {Beam => Beam.Downloaders}/SequentialFragmentDownloader.cs (98%) rename {Beam => Beam.Downloaders}/UnitDownloader.cs (89%) rename {Beam => Beam.Downloaders}/UnitDownloaderBinary.cs (93%) rename {Beam => Beam.Downloaders}/UnitFragmentDownloader.cs (80%) rename {Beam => Beam.Downloaders}/UnitFragmentDownloaderBinary.cs (91%) rename {Beam.Temporary.Cli => Beam.Dynamic}/Architecture.cs (93%) rename {Beam => Beam.Dynamic}/CommonStateChangers.cs (52%) create mode 100644 Beam.Dynamic/CommonTransformers.cs create mode 100644 Beam.Dynamic/ConstantStateChanger.cs create mode 100644 Beam.Dynamic/DataProviderJsonTypeInfoResolver.cs delete mode 100644 Beam.Dynamic/IDataProvider.cs rename {Beam.Temporary.Cli => Beam.Dynamic}/MainArchitecture.cs (96%) rename {Beam => Beam.Dynamic}/NumberedStateChanger.cs (52%) rename Beam.Dynamic/{OnlineCleaner.cs => StringCleaner.cs} (97%) create mode 100644 Beam.Exceptions/AssertionException.cs create mode 100644 Beam.Exceptions/Exceptions.Designer.cs create mode 100644 Beam.Exceptions/Exceptions.resx create mode 100644 Beam.Exceptions/MapException.cs create mode 100644 Beam.Models/AsyncDownloadFailurePredicate.cs create mode 100644 Beam.Models/AsyncTransformer.cs delete mode 100644 Beam.Models/BeamDataContext.cs rename {Beam => Beam.Models}/ByteDocument.cs (94%) rename {Beam => Beam.Models}/Document.cs (53%) rename {Beam => Beam.Models}/DocumentCache.cs (93%) create mode 100644 Beam.Models/DownloadReport.cs rename {Beam => Beam.Models}/Fragment.cs (98%) rename {Beam => Beam.Models}/ImmutableState.cs (77%) delete mode 100644 Beam.Models/LinkCollection.cs create mode 100644 Beam.Models/Ordered.cs create mode 100644 Beam.Models/Public Concrete/ArticleData.cs rename {Beam => Beam.Models}/RetryReport.cs (65%) rename {Beam => Beam.Models}/State.cs (59%) rename {Beam => Beam.Models}/StreamDocument.cs (95%) rename {Beam => Beam.Models}/StringDocument.cs (73%) rename {Beam.Temporary.Cli => Beam.Models}/TableOfContentsData.cs (54%) delete mode 100644 Beam.Models/Template.cs delete mode 100644 Beam.Models/Tracked.cs delete mode 100644 Beam.Temporary.Cli/CommonTransformers.cs delete mode 100644 Beam.Temporary.Cli/StateChangerFactory.cs delete mode 100644 Beam/ArticleData.cs delete mode 100644 Beam/ConstantStateChanger.cs delete mode 100644 Beam/DownloadReport.cs delete mode 100644 Beam/IDocument.cs delete mode 100644 Beam/IDocumentExtensions.cs delete mode 100644 Beam/IDocumentMetaData.cs delete mode 100644 Beam/IStateChangeBehaviour.cs delete mode 100644 Beam/IUnitDownloader.cs delete mode 100644 Beam/Ordered.cs create mode 100644 Beam/OrderedLinkGenerator.cs delete mode 100644 Beam/OrderedSourceLinkGenerator.cs delete mode 100644 Beam/SourceLink.cs delete mode 100644 Beam/SourceLinkEnumerable.cs create mode 100644 Beam/StringEnumerable.cs diff --git a/Beam.Abstractions/Beam.Abstractions.csproj b/Beam.Abstractions/Beam.Abstractions.csproj new file mode 100644 index 0000000..bea4d88 --- /dev/null +++ b/Beam.Abstractions/Beam.Abstractions.csproj @@ -0,0 +1,16 @@ + + + + net9.0 + enable + enable + Beam.Abstract + + + + + + + + + diff --git a/Beam.Abstractions/IArticleData.cs b/Beam.Abstractions/IArticleData.cs new file mode 100644 index 0000000..b9cc6de --- /dev/null +++ b/Beam.Abstractions/IArticleData.cs @@ -0,0 +1,10 @@ +namespace Beam.Abstractions; + +public interface IArticleData : IDocumentMetaData, IEquatable { + string? Name { get; set; } + string[] Authors { get; set; } + string? Language { get; set; } + string[] Categories { get; set; } + string? Version { get; set; } + string? Description { get; set; } +} \ No newline at end of file diff --git a/Beam.Abstractions/IDataBindings.cs b/Beam.Abstractions/IDataBindings.cs new file mode 100644 index 0000000..1155eee --- /dev/null +++ b/Beam.Abstractions/IDataBindings.cs @@ -0,0 +1,27 @@ +using Beam.Dynamic; + +namespace Beam.Abstractions; + +public interface IDataBindings { + IDataProvider? Title { get; set; } + IDataProvider? Authors { get; set; } + IDataProvider? Description { get; set; } + IDataProvider? Content { get; set; } + IDataProvider? Language { get; set; } + IDataProvider? Tags { get; set; } + IDataProvider? Publisher { get; set; } + IDataProvider? PublicationDate { get; set; } + IDataProvider? ISBN { get; set; } + IDataProvider? PageCount { get; set; } + IDataProvider? CoverImage { get; set; } + IDataProvider? Series { get; set; } + IDataProvider? Edition { get; set; } + IDataProvider? Contributors { get; set; } + IDataProvider? Subjects { get; set; } + IDataProvider? Rights { get; set; } + IDataProvider? TableOfContents { get; set; } + IDataProvider? PagesDropDown { get; set; } + IDataProvider? NextPageButton { get; set; } + IDataProvider? PreviousPageButton { get; set; } + Dictionary Providers { get; set; } +} \ No newline at end of file diff --git a/Beam.Abstractions/IDataProvider.cs b/Beam.Abstractions/IDataProvider.cs new file mode 100644 index 0000000..db87588 --- /dev/null +++ b/Beam.Abstractions/IDataProvider.cs @@ -0,0 +1,14 @@ +using HtmlAgilityPack; +using System.Text.Json.Serialization; + +namespace Beam.Dynamic; + +public interface IDataProvider { + public string GetString(HtmlDocument document) + => (this as IDataProvider)?.Get(document)?.ToString() ?? ""; +} + +public interface IDataProvider : IDataProvider { + public T Get(HtmlDocument document); + //public HtmlNode? GetNode(HtmlDocument document); +} \ No newline at end of file diff --git a/Beam.Abstractions/IDocument.cs b/Beam.Abstractions/IDocument.cs new file mode 100644 index 0000000..0779c99 --- /dev/null +++ b/Beam.Abstractions/IDocument.cs @@ -0,0 +1,28 @@ +using aeqw89.DataKeys; + +namespace Beam.Abstractions; + +public interface IDocument { + /// + /// The file name of the document. Must be valid in both UNIX, + /// WINDOWS, APPLE, and ANDROID file systems. + /// + string Filename { get; } + + /// + /// Additional descriptive data + /// + IDictionary, IDocumentMetaData> MetaData { get; } + + /// + /// Retrieves the binary representation for the + /// + /// Binary representation of the + byte[] ToBytes(); + + /// + /// Retrieves the string representation for the + /// + /// String representation of the + string ToString(); +} \ No newline at end of file diff --git a/Beam.Abstractions/IDocumentMetaData.cs b/Beam.Abstractions/IDocumentMetaData.cs new file mode 100644 index 0000000..21b93df --- /dev/null +++ b/Beam.Abstractions/IDocumentMetaData.cs @@ -0,0 +1,7 @@ +using System.Text.Json; + +namespace Beam.Abstractions; + +public interface IDocumentMetaData { + string AsJson(JsonSerializerOptions? options = null); +} \ No newline at end of file diff --git a/Beam.Abstractions/IDownloadReport.cs b/Beam.Abstractions/IDownloadReport.cs new file mode 100644 index 0000000..615b92f --- /dev/null +++ b/Beam.Abstractions/IDownloadReport.cs @@ -0,0 +1,3 @@ +namespace Beam.Abstractions; + +public interface IDownloadReport { } \ No newline at end of file diff --git a/Beam.Abstractions/ILinkBuilder.cs b/Beam.Abstractions/ILinkBuilder.cs new file mode 100644 index 0000000..3e45db5 --- /dev/null +++ b/Beam.Abstractions/ILinkBuilder.cs @@ -0,0 +1,11 @@ +using Beam.Models; + +namespace Beam.Abstractions; + +public interface ILinkBuilder { + /// + /// Produces a concrete using values from an external object. + /// + /// Object providing positional values. + string Build(IReadOnlyState parameterValues); +} \ No newline at end of file diff --git a/Beam.Abstractions/IOrdered.cs b/Beam.Abstractions/IOrdered.cs new file mode 100644 index 0000000..b94ccba --- /dev/null +++ b/Beam.Abstractions/IOrdered.cs @@ -0,0 +1,6 @@ +namespace Beam.Abstractions; + +public interface IOrdered { + T Data { get; } + int Order { get; } +} \ No newline at end of file diff --git a/Beam.Abstractions/IReadOnlyState.cs b/Beam.Abstractions/IReadOnlyState.cs new file mode 100644 index 0000000..e76be02 --- /dev/null +++ b/Beam.Abstractions/IReadOnlyState.cs @@ -0,0 +1,6 @@ +namespace Beam.Models; + +public interface IReadOnlyState { + public string[] GetState(); + IReadOnlyState Copy(); +} \ No newline at end of file diff --git a/Beam.Abstractions/IResourceDictionary.cs b/Beam.Abstractions/IResourceDictionary.cs new file mode 100644 index 0000000..2e2f24b --- /dev/null +++ b/Beam.Abstractions/IResourceDictionary.cs @@ -0,0 +1,3 @@ +namespace Beam.Abstractions; + +public interface IResourceDictionary { } \ No newline at end of file diff --git a/Beam.Abstractions/IRetryReport.cs b/Beam.Abstractions/IRetryReport.cs new file mode 100644 index 0000000..d44d723 --- /dev/null +++ b/Beam.Abstractions/IRetryReport.cs @@ -0,0 +1,6 @@ +namespace Beam.Abstractions; + +public interface IRetryReport { + int TryNumber { get; } + string Link { get; } +} \ No newline at end of file diff --git a/Beam.Abstractions/IState.cs b/Beam.Abstractions/IState.cs new file mode 100644 index 0000000..1869f50 --- /dev/null +++ b/Beam.Abstractions/IState.cs @@ -0,0 +1,8 @@ +using Beam.Models; + +namespace Beam.Abstractions; + +public interface IState : IReadOnlyState { + void SetState(string[] state); + new IState Copy(); +} \ No newline at end of file diff --git a/Beam.Abstractions/IStateChangeBehaviour.cs b/Beam.Abstractions/IStateChangeBehaviour.cs new file mode 100644 index 0000000..1a5e28b --- /dev/null +++ b/Beam.Abstractions/IStateChangeBehaviour.cs @@ -0,0 +1,10 @@ +using Beam.Models; + +namespace Beam.Abstractions; + +/// +/// Defines how a url template should should be updated, in what order, and by how much +/// +public interface IStateChangeBehaviour { + public void Apply(IState state, object stimulus); +} \ No newline at end of file diff --git a/Beam.Abstractions/IStateChangerFactory.cs b/Beam.Abstractions/IStateChangerFactory.cs new file mode 100644 index 0000000..e5e95e2 --- /dev/null +++ b/Beam.Abstractions/IStateChangerFactory.cs @@ -0,0 +1,3 @@ +namespace Beam.Abstractions; + +public interface IStateChangerFactory { } \ No newline at end of file diff --git a/Beam.Abstractions/ITemplate.cs b/Beam.Abstractions/ITemplate.cs new file mode 100644 index 0000000..f87ed2e --- /dev/null +++ b/Beam.Abstractions/ITemplate.cs @@ -0,0 +1,8 @@ +using aeqw89.DataKeys; + +namespace Beam.Abstractions; + +public interface ITemplate : IKeyed { + IStateChangerFactory Factory { get; set; } + ILinkBuilder Builder { get; set; } +} \ No newline at end of file diff --git a/Beam.Abstractions/IUnitDownloader.cs b/Beam.Abstractions/IUnitDownloader.cs new file mode 100644 index 0000000..736197b --- /dev/null +++ b/Beam.Abstractions/IUnitDownloader.cs @@ -0,0 +1,7 @@ + +namespace Beam.Abstractions; + +public interface IUnitDownloader { + public int LinksPerDownload { get; } + public Task<(bool, T?)> TryDownload(IOrdered[] link, CancellationToken ct, int maximumRetryCount = 7, IProgress? tryProgress = null); +} \ No newline at end of file diff --git a/Beam/ApiCall.cs b/Beam.Api/ApiCall.cs similarity index 100% rename from Beam/ApiCall.cs rename to Beam.Api/ApiCall.cs diff --git a/Beam/ApiCallBuilder.cs b/Beam.Api/ApiCallBuilder.cs similarity index 96% rename from Beam/ApiCallBuilder.cs rename to Beam.Api/ApiCallBuilder.cs index 2a5af0c..f4f3144 100644 --- a/Beam/ApiCallBuilder.cs +++ b/Beam.Api/ApiCallBuilder.cs @@ -5,6 +5,7 @@ using System.Net; using System.Reflection.PortableExecutable; using System.Text; using System.Threading.Tasks; +using Beam.Abstractions; namespace Beam { public class ApiCallBuilder(HttpClient client) { @@ -25,10 +26,6 @@ namespace Beam { return WithUri(uri.AbsoluteUri); } - public ApiCallBuilder WithUri(SourceLink uri) { - return WithUri(uri.Link); - } - public ApiCallBuilder WithRequestData(object? data) { Data = data; return this; diff --git a/Beam/ApiCalls.cs b/Beam.Api/ApiCalls.cs similarity index 100% rename from Beam/ApiCalls.cs rename to Beam.Api/ApiCalls.cs diff --git a/Beam/ApiCallsBuilder.cs b/Beam.Api/ApiCallsBuilder.cs similarity index 100% rename from Beam/ApiCallsBuilder.cs rename to Beam.Api/ApiCallsBuilder.cs diff --git a/Beam/ApiResponse.cs b/Beam.Api/ApiResponse.cs similarity index 100% rename from Beam/ApiResponse.cs rename to Beam.Api/ApiResponse.cs diff --git a/Beam.Data/BeamDataContext.cs b/Beam.Data/BeamDataContext.cs new file mode 100644 index 0000000..84c680f --- /dev/null +++ b/Beam.Data/BeamDataContext.cs @@ -0,0 +1,50 @@ +using aeqw89.DataKeys; +using aeqw89.PersistentData; +using Beam.Dynamic; +using Beam.Models; + +namespace Beam.Data { + using BeamFile = Models.File; + + public class BeamDataContext : BaseDataDictionary { + #region Tables + public Table