Pārlūkot izejas kodu

cosmosDB 相关代码

zhouj1203@hotmail.com 6 gadi atpakaļ
vecāks
revīzija
3bb0bd9b71
67 mainītis faili ar 36393 papildinājumiem un 1 dzēšanām
  1. 11 0
      HaBookCms.Admin/Controllers/Test.cs
  2. 46 0
      HaBookCms.AzureCosmos/CosmosDB/CosmosDBClientSingleton.cs
  3. 96 0
      HaBookCms.AzureCosmos/CosmosDB/Implements/AzureCosmosDBRepository.cs
  4. 14 0
      HaBookCms.AzureCosmos/CosmosDB/Interfaces/IAzureCosmosDBRepository.cs
  5. 5 0
      HaBookCms.AzureCosmos/HaBookCms.AzureCosmos.csproj
  6. 17 0
      HaBookCms.AzureCosmos/ServiceExtension/AzureCosmosDBOptions.cs
  7. 24 0
      HaBookCms.AzureCosmos/ServiceExtension/AzureCosmosDBServiceBuilder.cs
  8. 51 0
      HaBookCms.AzureCosmos/ServiceExtension/AzureCosmosDBServiceCollectionExtensions.cs
  9. 105 0
      HaBookCms.AzureCosmosDBTest/Controllers/CosmosDBController.cs
  10. 20 0
      HaBookCms.AzureCosmosDBTest/HaBookCms.AzureCosmosDBTest.csproj
  11. 26 0
      HaBookCms.AzureCosmosDBTest/Pages/Error.cshtml
  12. 23 0
      HaBookCms.AzureCosmosDBTest/Pages/Error.cshtml.cs
  13. 10 0
      HaBookCms.AzureCosmosDBTest/Pages/Index.cshtml
  14. 17 0
      HaBookCms.AzureCosmosDBTest/Pages/Index.cshtml.cs
  15. 8 0
      HaBookCms.AzureCosmosDBTest/Pages/Privacy.cshtml
  16. 16 0
      HaBookCms.AzureCosmosDBTest/Pages/Privacy.cshtml.cs
  17. 25 0
      HaBookCms.AzureCosmosDBTest/Pages/Shared/_CookieConsentPartial.cshtml
  18. 77 0
      HaBookCms.AzureCosmosDBTest/Pages/Shared/_Layout.cshtml
  19. 18 0
      HaBookCms.AzureCosmosDBTest/Pages/Shared/_ValidationScriptsPartial.cshtml
  20. 3 0
      HaBookCms.AzureCosmosDBTest/Pages/_ViewImports.cshtml
  21. 3 0
      HaBookCms.AzureCosmosDBTest/Pages/_ViewStart.cshtml
  22. 24 0
      HaBookCms.AzureCosmosDBTest/Program.cs
  23. 27 0
      HaBookCms.AzureCosmosDBTest/Properties/launchSettings.json
  24. 72 0
      HaBookCms.AzureCosmosDBTest/Startup.cs
  25. 9 0
      HaBookCms.AzureCosmosDBTest/appsettings.Development.json
  26. 16 0
      HaBookCms.AzureCosmosDBTest/appsettings.json
  27. 56 0
      HaBookCms.AzureCosmosDBTest/wwwroot/css/site.css
  28. BIN
      HaBookCms.AzureCosmosDBTest/wwwroot/favicon.ico
  29. 4 0
      HaBookCms.AzureCosmosDBTest/wwwroot/js/site.js
  30. 22 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/LICENSE
  31. 1912 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css
  32. 1 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map
  33. 7 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css
  34. 1 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map
  35. 331 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css
  36. 1 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map
  37. 8 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css
  38. 1 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map
  39. 9030 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap.css
  40. 1 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
  41. 7 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
  42. 1 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
  43. 6461 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js
  44. 1 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map
  45. 7 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js
  46. 1 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map
  47. 3944 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.js
  48. 1 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map
  49. 7 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js
  50. 1 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map
  51. 12 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt
  52. 432 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
  53. 5 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js
  54. 22 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation/LICENSE.md
  55. 1158 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation/dist/additional-methods.js
  56. 4 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation/dist/additional-methods.min.js
  57. 1601 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation/dist/jquery.validate.js
  58. 4 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js
  59. 36 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery/LICENSE.txt
  60. 10364 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery/dist/jquery.js
  61. 2 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery/dist/jquery.min.js
  62. 1 0
      HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery/dist/jquery.min.map
  63. 18 0
      HaBookCms.Contest/Controllers/ActivityController.cs
  64. 0 1
      HaBookCms.Core/HaBookCms.Core.csproj
  65. 78 0
      HaBookCms.Core/Models/Contest/Activity.cs
  66. 80 0
      HaBookCms.Core/Models/Contest/BaseActivty.cs
  67. 7 0
      HaBookCms.sln

+ 11 - 0
HaBookCms.Admin/Controllers/Test.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace HaBookCms.Admin.Controllers
+{
+    public class Test
+    {
+    }
+}

+ 46 - 0
HaBookCms.AzureCosmos/CosmosDB/CosmosDBClientSingleton.cs

@@ -0,0 +1,46 @@
+using Microsoft.Azure.Documents.Client;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HaBookCms.AzureCosmos.CosmosDB
+{
+    public sealed class CosmosDBClientSingleton
+    {
+        private static string _connectionUrl;
+        private static string _connectionKey;
+        private DocumentClient CosmosClient;
+
+        private CosmosDBClientSingleton() { }
+
+
+
+        public DocumentClient GetCosmosDBClient()
+        {
+            if (CosmosClient != null)
+            {
+                return CosmosClient;
+            }
+            else
+            {
+                getInstance(_connectionUrl, _connectionKey);
+                return CosmosClient;
+            }
+        }
+
+        public static CosmosDBClientSingleton getInstance(string connectionUrl,string connectionKey)
+        {
+            _connectionUrl = connectionUrl;
+            _connectionKey = connectionKey;
+            return SingletonInstance.instance;
+        }
+
+        private static class SingletonInstance
+        {
+            public static CosmosDBClientSingleton instance = new CosmosDBClientSingleton()
+            {
+                CosmosClient = new DocumentClient(new Uri(_connectionUrl), _connectionKey)
+            };
+        }
+    }
+}

+ 96 - 0
HaBookCms.AzureCosmos/CosmosDB/Implements/AzureCosmosDBRepository.cs

@@ -0,0 +1,96 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.Azure.Documents;
+using Microsoft.Azure.Documents.Client;
+using System.Text;
+using HaBookCms.ServiceOptions.Options;
+using System.Threading.Tasks;
+using System.Net;
+using HaBookCms.AzureCosmos.CosmosDB.Interfaces;
+using System.Linq;
+using System.Reflection;
+
+namespace HaBookCms.AzureCosmos.CosmosDB.Implements
+{
+    public class AzureCosmosDBRepository: IAzureCosmosDBRepository
+    {
+        private DocumentClient CosmosClient { get; set; }
+        private DocumentCollection CosmosCollection { get; set; }
+
+        private string _Database { get; set; }
+        public  AzureCosmosDBRepository(AzureCosmosDBOptions options)
+        {
+            try {
+
+                CosmosClient = CosmosDBClientSingleton.getInstance(options.ConnectionString, options.ConnectionKey).GetCosmosDBClient();
+                _Database = options.Database;
+                CosmosClient.CreateDatabaseIfNotExistsAsync(new Database { Id = _Database });
+                // _connectionString = options.ConnectionString;
+            }
+            catch (DocumentClientException de)
+            {
+                Exception baseException = de.GetBaseException();
+                Console.WriteLine("{0} error occurred: {1}, Message: {2}", de.StatusCode, de.Message, baseException.Message);
+            }
+            catch (Exception e)
+            {
+                Exception baseException = e.GetBaseException();
+                Console.WriteLine("Error: {0}, Message: {1}", e.Message, baseException.Message);
+            }
+            finally
+            {
+                Console.WriteLine("End of demo, press any key to exit.");
+              //  Console.ReadKey();
+            }
+
+
+        }
+        private async Task InitializeCollection<T>()
+        {
+            Type t = typeof(T);
+            if (CosmosCollection == null ||! CosmosCollection.Id.Equals(t.Name)) {
+                CosmosCollection = await this.CosmosClient.CreateDocumentCollectionIfNotExistsAsync(UriFactory.CreateDatabaseUri(_Database), new DocumentCollection { Id = t.Name });
+               
+            }
+        }
+        public async Task<T> Save<T>(object entity) //where T : object, new()
+        {
+            Type t = typeof(T);
+            await InitializeCollection<T>();
+            ResourceResponse<Document> doc = 
+                await CosmosClient.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(_Database, t.Name), entity);
+            return (T)entity;
+        }
+
+        public async Task<T> Update<T>(object entity) 
+        {
+            Type t = typeof(T);
+            await InitializeCollection<T>();
+            ResourceResponse<Document> doc = 
+                await CosmosClient.UpsertDocumentAsync(UriFactory.CreateDocumentCollectionUri(_Database, t.Name), entity);
+            return (T)entity;
+        }
+
+        public async Task<List<T>> Find<T>(string filedName, string value)
+        {
+            Type t = typeof(T);
+            PropertyInfo[] pis = t.GetProperties();
+           
+            foreach (PropertyInfo pi in pis)
+            {
+                if (pi.Name.Equals(filedName)) {
+                 
+                    break;
+                }
+                //Console.WriteLine(pi.Name);
+            }
+            await InitializeCollection<T>();
+            FeedOptions queryOptions = new FeedOptions { MaxItemCount = -1 };
+           
+            return CosmosClient.CreateDocumentQuery<T>(
+                            UriFactory.CreateDocumentCollectionUri(_Database, t.Name), queryOptions)
+                            .Where(f => filedName == value).ToList<T>();
+          
+        }
+    }
+}

+ 14 - 0
HaBookCms.AzureCosmos/CosmosDB/Interfaces/IAzureCosmosDBRepository.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HaBookCms.AzureCosmos.CosmosDB.Interfaces
+{
+    public interface IAzureCosmosDBRepository
+    {
+       Task<T> Save<T>(object entity);
+       Task<T> Update<T>(object entity);
+       Task<List<T>> Find<T>(string filedName, string value);
+    }
+}

+ 5 - 0
HaBookCms.AzureCosmos/HaBookCms.AzureCosmos.csproj

@@ -4,4 +4,9 @@
     <TargetFramework>netcoreapp2.2</TargetFramework>
   </PropertyGroup>
 
+  <ItemGroup>
+    <PackageReference Include="Microsoft.Azure.DocumentDB.Core" Version="2.2.1" />
+    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.2.0" />
+  </ItemGroup>
+
 </Project>

+ 17 - 0
HaBookCms.AzureCosmos/ServiceExtension/AzureCosmosDBOptions.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HaBookCms.ServiceOptions.Options
+{
+    public class AzureCosmosDBOptions
+    {
+        public string ConnectionString { get; set; } = null;
+        public string ConnectionKey { get; set; } = null;
+        public string Database { get; set; } = null;
+        public AzureCosmosDBOptions()
+        {
+            //Azure Table Init
+        }
+    }
+}

+ 24 - 0
HaBookCms.AzureCosmos/ServiceExtension/AzureCosmosDBServiceBuilder.cs

@@ -0,0 +1,24 @@
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HaBookCms.ServiceOptions.Options
+{
+    public class AzureCosmosDBServiceBuilder
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="services"></param>
+        public AzureCosmosDBServiceBuilder(IServiceCollection services)
+        {
+            Services = services ?? throw new ArgumentNullException(nameof(services));
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public IServiceCollection Services { get; }
+    }
+}

+ 51 - 0
HaBookCms.AzureCosmos/ServiceExtension/AzureCosmosDBServiceCollectionExtensions.cs

@@ -0,0 +1,51 @@
+using HaBookCms.AzureCosmos.CosmosDB.Implements;
+using HaBookCms.AzureCosmos.CosmosDB.Interfaces;
+using HaBookCms.ServiceOptions.Options;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HaBookCms.AzureCosmos.ServiceExtension
+{
+    public static class AzureCosmosDBServiceCollectionExtensions
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="services"></param>
+        /// <returns></returns>
+        private static AzureCosmosDBServiceBuilder AddCosmosDBServerBuilder(this IServiceCollection services)
+        {
+            return new AzureCosmosDBServiceBuilder(services);
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="services"></param>
+        /// <returns></returns>
+        public static AzureCosmosDBServiceBuilder AddAzureCosmosDB(this IServiceCollection services)
+        {
+            var builder = services.AddCosmosDBServerBuilder();
+            services.AddSingleton<IAzureCosmosDBRepository, AzureCosmosDBRepository>();
+            return builder;
+        }
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="builder"></param>
+        /// <param name="_connectionString"></param>
+        /// <returns></returns>
+        public static AzureCosmosDBServiceBuilder AddCosmosDBConnection(this AzureCosmosDBServiceBuilder builder,  AzureCosmosDBOptions  databaseOptions)
+        {
+            //AzureCosmosDBOptions databaseOptions = new AzureCosmosDBOptions();
+            //databaseOptions.ConnectionString = _connectionString;
+            //databaseOptions.ConnectionKey = _connectionKey;
+            builder.Services.AddSingleton(databaseOptions);
+            return builder;
+        }
+    }
+
+}
+

+ 105 - 0
HaBookCms.AzureCosmosDBTest/Controllers/CosmosDBController.cs

@@ -0,0 +1,105 @@
+using HaBookCms.AzureCosmos.CosmosDB.Interfaces;
+using HaBookCms.Core.Models.Contest;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Cors;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace HaBookCms.AzureCosmosDBTest.Controllers
+{
+    [Route("api/[controller]")]
+    [ApiController]
+    public class CosmosDBController: ControllerBase
+    {
+        private IAzureCosmosDBRepository _azureCosmosDB;
+
+        public CosmosDBController(IAzureCosmosDBRepository azureCosmosDB)
+        {
+            _azureCosmosDB = azureCosmosDB;
+        }
+        [HttpGet("save")]
+        [EnableCors("any")]
+        [AllowAnonymous]
+        public async Task<object> SaveActivity() {
+            Console.WriteLine();
+            BaseActivty activty = new BaseActivty
+            {
+                Id = "activity.11",
+                Title = "报名活动",
+                Introduce = "本次活动纯属娱乐",
+                ActivityLink = "http://www.runoob.com/csharp/csharp-methods.html",
+                state = "1",
+                Models = new BaseActivty.Model[]
+                {
+                    new BaseActivty.Model {
+                        ModelId="1",
+                        ModelName="报名",
+                        ModelStartTime="2019-01-01",
+                        ModelEndTime = "2019-01-20"
+                    },
+                     new BaseActivty.Model {
+                        ModelId="2",
+                        ModelName="上传附件",
+                        ModelStartTime="2019-01-01",
+                        ModelEndTime = "2019-01-20"
+                    },
+                     new BaseActivty.Model {
+                        ModelId="3",
+                        ModelName="专家评审",
+                        ModelStartTime="2019-01-10",
+                        ModelEndTime = "2019-01-20"
+                    },
+                    new BaseActivty.Model {
+                        ModelId="4",
+                        ModelName="成绩公示",
+                        ModelStartTime="2019-01-18",
+                        ModelEndTime = "2019-01-20"
+                    }
+
+                },
+                Children = new BaseActivty.Parts[] {
+                    new BaseActivty.Parts{
+                        PartId = "label.1",
+                        PartlLabel = "选择器",
+                        PartFiled = "sex",
+                        PartType = "select"
+                    },
+                    new BaseActivty.Parts{
+                        PartId = "label.2",
+                        PartlLabel = "单选按钮",
+                        PartFiled = "education",
+                        PartType = "checkboks"
+                    },
+                    new BaseActivty.Parts{
+                        PartId = "label.3",
+                        PartlLabel = "文本框",
+                        PartFiled = "name",
+                        PartType = "input"
+                    }
+                }
+            };
+
+            
+            
+            await _azureCosmosDB.Update<BaseActivty>(activty);
+            return activty;
+        }
+
+        [HttpGet("find")]
+        [EnableCors("any")]
+        [AllowAnonymous]
+        public async Task<object> ExecuteSimpleQuery()
+        {
+
+
+            // Here we find the Andersen family via its LastName
+           return await _azureCosmosDB.Find<BaseActivty>("Title", "报名活动");
+
+            // The query is executed synchronously here, but can also be executed asynchronously via the IDocumentQuery<T> interface
+            //Console.WriteLine("Running LINQ query...");
+        }
+    }
+}

+ 20 - 0
HaBookCms.AzureCosmosDBTest/HaBookCms.AzureCosmosDBTest.csproj

@@ -0,0 +1,20 @@
+<Project Sdk="Microsoft.NET.Sdk.Web">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp2.2</TargetFramework>
+    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
+  </PropertyGroup>
+
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.AspNetCore.App" />
+    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
+  </ItemGroup>
+
+
+  <ItemGroup>
+    <ProjectReference Include="..\HaBookCms.AzureCosmos\HaBookCms.AzureCosmos.csproj" />
+    <ProjectReference Include="..\HaBookCms.Core\HaBookCms.Core.csproj" />
+  </ItemGroup>
+
+</Project>

+ 26 - 0
HaBookCms.AzureCosmosDBTest/Pages/Error.cshtml

@@ -0,0 +1,26 @@
+@page
+@model ErrorModel
+@{
+    ViewData["Title"] = "Error";
+}
+
+<h1 class="text-danger">Error.</h1>
+<h2 class="text-danger">An error occurred while processing your request.</h2>
+
+@if (Model.ShowRequestId)
+{
+    <p>
+        <strong>Request ID:</strong> <code>@Model.RequestId</code>
+    </p>
+}
+
+<h3>Development Mode</h3>
+<p>
+    Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.
+</p>
+<p>
+    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>
+    It can result in displaying sensitive information from exceptions to end users.
+    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
+    and restarting the app.
+</p>

+ 23 - 0
HaBookCms.AzureCosmosDBTest/Pages/Error.cshtml.cs

@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+
+namespace HaBookCms.AzureCosmosDBTest.Pages
+{
+    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
+    public class ErrorModel : PageModel
+    {
+        public string RequestId { get; set; }
+
+        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
+
+        public void OnGet()
+        {
+            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
+        }
+    }
+}

+ 10 - 0
HaBookCms.AzureCosmosDBTest/Pages/Index.cshtml

@@ -0,0 +1,10 @@
+@page
+@model IndexModel
+@{
+    ViewData["Title"] = "Home page";
+}
+
+<div class="text-center">
+    <h1 class="display-4">Welcome</h1>
+    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
+</div>

+ 17 - 0
HaBookCms.AzureCosmosDBTest/Pages/Index.cshtml.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+
+namespace HaBookCms.AzureCosmosDBTest.Pages
+{
+    public class IndexModel : PageModel
+    {
+        public void OnGet()
+        {
+
+        }
+    }
+}

+ 8 - 0
HaBookCms.AzureCosmosDBTest/Pages/Privacy.cshtml

@@ -0,0 +1,8 @@
+@page
+@model PrivacyModel
+@{
+    ViewData["Title"] = "Privacy Policy";
+}
+<h1>@ViewData["Title"]</h1>
+
+<p>Use this page to detail your site's privacy policy.</p>

+ 16 - 0
HaBookCms.AzureCosmosDBTest/Pages/Privacy.cshtml.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+
+namespace HaBookCms.AzureCosmosDBTest.Pages
+{
+    public class PrivacyModel : PageModel
+    {
+        public void OnGet()
+        {
+        }
+    }
+}

+ 25 - 0
HaBookCms.AzureCosmosDBTest/Pages/Shared/_CookieConsentPartial.cshtml

@@ -0,0 +1,25 @@
+@using Microsoft.AspNetCore.Http.Features
+
+@{
+    var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
+    var showBanner = !consentFeature?.CanTrack ?? false;
+    var cookieString = consentFeature?.CreateConsentCookie();
+}
+
+@if (showBanner)
+{
+    <div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert">
+        Use this space to summarize your privacy and cookie use policy. <a asp-page="/Privacy">Learn More</a>.
+        <button type="button" class="accept-policy close" data-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString">
+            <span aria-hidden="true">Accept</span>
+        </button>
+    </div>
+    <script>
+        (function () {
+            var button = document.querySelector("#cookieConsent button[data-cookie-string]");
+            button.addEventListener("click", function (event) {
+                document.cookie = button.dataset.cookieString;
+            }, false);
+        })();
+    </script>
+}

+ 77 - 0
HaBookCms.AzureCosmosDBTest/Pages/Shared/_Layout.cshtml

@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>@ViewData["Title"] - HaBookCms.AzureCosmosDBTest</title>
+
+    <environment include="Development">
+        <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
+    </environment>
+    <environment exclude="Development">
+        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css"
+              asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
+              asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute"
+              crossorigin="anonymous"
+              integrity="sha256-eSi1q2PG6J7g7ib17yAaWMcrr5GrtohYChqibrV7PBE="/>
+    </environment>
+    <link rel="stylesheet" href="~/css/site.css" />
+</head>
+<body>
+    <header>
+        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
+            <div class="container">
+                <a class="navbar-brand" asp-area="" asp-page="/Index">HaBookCms.AzureCosmosDBTest</a>
+                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
+                        aria-expanded="false" aria-label="Toggle navigation">
+                    <span class="navbar-toggler-icon"></span>
+                </button>
+                <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
+                    <ul class="navbar-nav flex-grow-1">
+                        <li class="nav-item">
+                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
+                        </li>
+                        <li class="nav-item">
+                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
+                        </li>
+                    </ul>
+                </div>
+            </div>
+        </nav>
+    </header>
+    <div class="container">
+        <partial name="_CookieConsentPartial" />
+        <main role="main" class="pb-3">
+            @RenderBody()
+        </main>
+    </div>
+
+    <footer class="border-top footer text-muted">
+        <div class="container">
+            &copy; 2019 - HaBookCms.AzureCosmosDBTest - <a asp-area="" asp-page="/Privacy">Privacy</a>
+        </div>
+    </footer>
+
+    <environment include="Development">
+        <script src="~/lib/jquery/dist/jquery.js"></script>
+        <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
+    </environment>
+    <environment exclude="Development">
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"
+                asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
+                asp-fallback-test="window.jQuery"
+                crossorigin="anonymous"
+                integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=">
+        </script>
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.bundle.min.js"
+                asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"
+                asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
+                crossorigin="anonymous"
+                integrity="sha256-E/V4cWE4qvAeO5MOhjtGtqDzPndRO1LBk8lJ/PR7CA4=">
+        </script>
+    </environment>
+    <script src="~/js/site.js" asp-append-version="true"></script>
+
+    @RenderSection("Scripts", required: false)
+</body>
+</html>

+ 18 - 0
HaBookCms.AzureCosmosDBTest/Pages/Shared/_ValidationScriptsPartial.cshtml

@@ -0,0 +1,18 @@
+<environment include="Development">
+    <script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
+    <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
+</environment>
+<environment exclude="Development">
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"
+            asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
+            asp-fallback-test="window.jQuery && window.jQuery.validator"
+            crossorigin="anonymous"
+            integrity="sha256-F6h55Qw6sweK+t7SiOJX+2bpSAa3b/fnlrVCJvmEj1A=">
+    </script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js"
+            asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
+            asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive"
+            crossorigin="anonymous"
+            integrity="sha256-9GycpJnliUjJDVDqP0UEu/bsm9U+3dnQUH8+3W10vkY=">
+    </script>
+</environment>

+ 3 - 0
HaBookCms.AzureCosmosDBTest/Pages/_ViewImports.cshtml

@@ -0,0 +1,3 @@
+@using HaBookCms.AzureCosmosDBTest
+@namespace HaBookCms.AzureCosmosDBTest.Pages
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

+ 3 - 0
HaBookCms.AzureCosmosDBTest/Pages/_ViewStart.cshtml

@@ -0,0 +1,3 @@
+@{
+    Layout = "_Layout";
+}

+ 24 - 0
HaBookCms.AzureCosmosDBTest/Program.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+
+namespace HaBookCms.AzureCosmosDBTest
+{
+    public class Program
+    {
+        public static void Main(string[] args)
+        {
+            CreateWebHostBuilder(args).Build().Run();
+        }
+
+        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
+            WebHost.CreateDefaultBuilder(args)
+                .UseStartup<Startup>();
+    }
+}

+ 27 - 0
HaBookCms.AzureCosmosDBTest/Properties/launchSettings.json

@@ -0,0 +1,27 @@
+{
+  "iisSettings": {
+    "windowsAuthentication": false, 
+    "anonymousAuthentication": true, 
+    "iisExpress": {
+      "applicationUrl": "http://localhost:57166",
+      "sslPort": 44377
+    }
+  },
+  "profiles": {
+    "IIS Express": {
+      "commandName": "IISExpress",
+      "launchBrowser": true,
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    },
+    "HaBookCms.AzureCosmosDBTest": {
+      "commandName": "Project",
+      "launchBrowser": true,
+      "applicationUrl": "https://localhost:5001;http://localhost:5000",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    }
+  }
+}

+ 72 - 0
HaBookCms.AzureCosmosDBTest/Startup.cs

@@ -0,0 +1,72 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using HaBookCms.AzureCosmos.ServiceExtension;
+using HaBookCms.ServiceOptions.Options;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.HttpsPolicy;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace HaBookCms.AzureCosmosDBTest
+{
+    public class Startup
+    {
+        public Startup(IConfiguration configuration, IHostingEnvironment env)
+        {
+            Configuration = configuration;
+            var builder = new ConfigurationBuilder()
+                .SetBasePath(env.ContentRootPath)
+                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
+            this.Configuration = builder.Build();
+        }
+
+        public IConfiguration Configuration { get; }
+
+        // This method gets called by the runtime. Use this method to add services to the container.
+        public void ConfigureServices(IServiceCollection services)
+        {
+            services.AddAzureCosmosDB().AddCosmosDBConnection(  new AzureCosmosDBOptions()
+            {
+                ConnectionString = Configuration["Azure:CosmosDBConnection:AccountEndpoint"],
+                ConnectionKey = Configuration["Azure:CosmosDBConnection:AccountKey"],
+                Database = Configuration["Azure:CosmosDBConnection:AccountName"],
+            });
+            services.Configure<CookiePolicyOptions>(options =>
+            {
+                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
+                options.CheckConsentNeeded = context => true;
+                options.MinimumSameSitePolicy = SameSiteMode.None;
+            });
+
+
+            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
+        }
+
+        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
+        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
+        {
+            if (env.IsDevelopment())
+            {
+                app.UseDeveloperExceptionPage();
+            }
+            else
+            {
+                app.UseExceptionHandler("/Error");
+                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
+                app.UseHsts();
+            }
+
+            app.UseHttpsRedirection();
+            app.UseStaticFiles();
+            app.UseCookiePolicy();
+
+            app.UseMvc();
+        }
+    }
+}

+ 9 - 0
HaBookCms.AzureCosmosDBTest/appsettings.Development.json

@@ -0,0 +1,9 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Debug",
+      "System": "Information",
+      "Microsoft": "Information"
+    }
+  }
+}

+ 16 - 0
HaBookCms.AzureCosmosDBTest/appsettings.json

@@ -0,0 +1,16 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Warning"
+    }
+  },
+  "AllowedHosts": "*",
+  //Êý¾Ý¿âÅäÖÃ
+  "Azure": {
+    "CosmosDBConnection": {
+      "AccountEndpoint": "https://localhost:8081",
+      "AccountKey": "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==",
+      "AccountName": "Activity_oa"
+    }
+  }
+}

+ 56 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/css/site.css

@@ -0,0 +1,56 @@
+/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
+for details on configuring this project to bundle and minify static web assets. */
+
+a.navbar-brand {
+  white-space: normal;
+  text-align: center;
+  word-break: break-all;
+}
+
+/* Sticky footer styles
+-------------------------------------------------- */
+html {
+  font-size: 14px;
+}
+@media (min-width: 768px) {
+  html {
+    font-size: 16px;
+  }
+}
+
+.border-top {
+  border-top: 1px solid #e5e5e5;
+}
+.border-bottom {
+  border-bottom: 1px solid #e5e5e5;
+}
+
+.box-shadow {
+  box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
+}
+
+button.accept-policy {
+  font-size: 1rem;
+  line-height: inherit;
+}
+
+/* Sticky footer styles
+-------------------------------------------------- */
+html {
+  position: relative;
+  min-height: 100%;
+}
+
+body {
+  /* Margin bottom by footer height */
+  margin-bottom: 60px;
+}
+.footer {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+  white-space: nowrap;
+  /* Set the fixed height of the footer here */
+  height: 60px;
+  line-height: 60px; /* Vertically center the text there */
+}

BIN
HaBookCms.AzureCosmosDBTest/wwwroot/favicon.ico


+ 4 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/js/site.js

@@ -0,0 +1,4 @@
+// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
+// for details on configuring this project to bundle and minify static web assets.
+
+// Write your Javascript code.

+ 22 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/LICENSE

@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2011-2018 Twitter, Inc.
+Copyright (c) 2011-2018 The Bootstrap Authors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1912 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 7 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map


+ 331 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css

@@ -0,0 +1,331 @@
+/*!
+ * Bootstrap Reboot v4.1.3 (https://getbootstrap.com/)
+ * Copyright 2011-2018 The Bootstrap Authors
+ * Copyright 2011-2018 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
+ */
+*,
+*::before,
+*::after {
+  box-sizing: border-box;
+}
+
+html {
+  font-family: sans-serif;
+  line-height: 1.15;
+  -webkit-text-size-adjust: 100%;
+  -ms-text-size-adjust: 100%;
+  -ms-overflow-style: scrollbar;
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+@-ms-viewport {
+  width: device-width;
+}
+
+article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
+  display: block;
+}
+
+body {
+  margin: 0;
+  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+  font-size: 1rem;
+  font-weight: 400;
+  line-height: 1.5;
+  color: #212529;
+  text-align: left;
+  background-color: #fff;
+}
+
+[tabindex="-1"]:focus {
+  outline: 0 !important;
+}
+
+hr {
+  box-sizing: content-box;
+  height: 0;
+  overflow: visible;
+}
+
+h1, h2, h3, h4, h5, h6 {
+  margin-top: 0;
+  margin-bottom: 0.5rem;
+}
+
+p {
+  margin-top: 0;
+  margin-bottom: 1rem;
+}
+
+abbr[title],
+abbr[data-original-title] {
+  text-decoration: underline;
+  -webkit-text-decoration: underline dotted;
+  text-decoration: underline dotted;
+  cursor: help;
+  border-bottom: 0;
+}
+
+address {
+  margin-bottom: 1rem;
+  font-style: normal;
+  line-height: inherit;
+}
+
+ol,
+ul,
+dl {
+  margin-top: 0;
+  margin-bottom: 1rem;
+}
+
+ol ol,
+ul ul,
+ol ul,
+ul ol {
+  margin-bottom: 0;
+}
+
+dt {
+  font-weight: 700;
+}
+
+dd {
+  margin-bottom: .5rem;
+  margin-left: 0;
+}
+
+blockquote {
+  margin: 0 0 1rem;
+}
+
+dfn {
+  font-style: italic;
+}
+
+b,
+strong {
+  font-weight: bolder;
+}
+
+small {
+  font-size: 80%;
+}
+
+sub,
+sup {
+  position: relative;
+  font-size: 75%;
+  line-height: 0;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -.25em;
+}
+
+sup {
+  top: -.5em;
+}
+
+a {
+  color: #007bff;
+  text-decoration: none;
+  background-color: transparent;
+  -webkit-text-decoration-skip: objects;
+}
+
+a:hover {
+  color: #0056b3;
+  text-decoration: underline;
+}
+
+a:not([href]):not([tabindex]) {
+  color: inherit;
+  text-decoration: none;
+}
+
+a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
+  color: inherit;
+  text-decoration: none;
+}
+
+a:not([href]):not([tabindex]):focus {
+  outline: 0;
+}
+
+pre,
+code,
+kbd,
+samp {
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+  font-size: 1em;
+}
+
+pre {
+  margin-top: 0;
+  margin-bottom: 1rem;
+  overflow: auto;
+  -ms-overflow-style: scrollbar;
+}
+
+figure {
+  margin: 0 0 1rem;
+}
+
+img {
+  vertical-align: middle;
+  border-style: none;
+}
+
+svg {
+  overflow: hidden;
+  vertical-align: middle;
+}
+
+table {
+  border-collapse: collapse;
+}
+
+caption {
+  padding-top: 0.75rem;
+  padding-bottom: 0.75rem;
+  color: #6c757d;
+  text-align: left;
+  caption-side: bottom;
+}
+
+th {
+  text-align: inherit;
+}
+
+label {
+  display: inline-block;
+  margin-bottom: 0.5rem;
+}
+
+button {
+  border-radius: 0;
+}
+
+button:focus {
+  outline: 1px dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+}
+
+input,
+button,
+select,
+optgroup,
+textarea {
+  margin: 0;
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
+}
+
+button,
+input {
+  overflow: visible;
+}
+
+button,
+select {
+  text-transform: none;
+}
+
+button,
+html [type="button"],
+[type="reset"],
+[type="submit"] {
+  -webkit-appearance: button;
+}
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+  padding: 0;
+  border-style: none;
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+  box-sizing: border-box;
+  padding: 0;
+}
+
+input[type="date"],
+input[type="time"],
+input[type="datetime-local"],
+input[type="month"] {
+  -webkit-appearance: listbox;
+}
+
+textarea {
+  overflow: auto;
+  resize: vertical;
+}
+
+fieldset {
+  min-width: 0;
+  padding: 0;
+  margin: 0;
+  border: 0;
+}
+
+legend {
+  display: block;
+  width: 100%;
+  max-width: 100%;
+  padding: 0;
+  margin-bottom: .5rem;
+  font-size: 1.5rem;
+  line-height: inherit;
+  color: inherit;
+  white-space: normal;
+}
+
+progress {
+  vertical-align: baseline;
+}
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+[type="search"] {
+  outline-offset: -2px;
+  -webkit-appearance: none;
+}
+
+[type="search"]::-webkit-search-cancel-button,
+[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+::-webkit-file-upload-button {
+  font: inherit;
+  -webkit-appearance: button;
+}
+
+output {
+  display: inline-block;
+}
+
+summary {
+  display: list-item;
+  cursor: pointer;
+}
+
+template {
+  display: none;
+}
+
+[hidden] {
+  display: none !important;
+}
+/*# sourceMappingURL=bootstrap-reboot.css.map */

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 8 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 9030 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap.css


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 7 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 6461 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 7 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 3944 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 7 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map


+ 12 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt

@@ -0,0 +1,12 @@
+Copyright (c) .NET Foundation. All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License"); you may not use
+these files except in compliance with the License. You may obtain a copy of the
+License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software distributed
+under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, either express or implied. See the License for the
+specific language governing permissions and limitations under the License.

+ 432 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js

@@ -0,0 +1,432 @@
+// Unobtrusive validation support library for jQuery and jQuery Validate
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+// @version v3.2.11
+
+/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */
+/*global document: false, jQuery: false */
+
+(function (factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define("jquery.validate.unobtrusive", ['jquery-validation'], factory);
+    } else if (typeof module === 'object' && module.exports) {
+        // CommonJS-like environments that support module.exports     
+        module.exports = factory(require('jquery-validation'));
+    } else {
+        // Browser global
+        jQuery.validator.unobtrusive = factory(jQuery);
+    }
+}(function ($) {
+    var $jQval = $.validator,
+        adapters,
+        data_validation = "unobtrusiveValidation";
+
+    function setValidationValues(options, ruleName, value) {
+        options.rules[ruleName] = value;
+        if (options.message) {
+            options.messages[ruleName] = options.message;
+        }
+    }
+
+    function splitAndTrim(value) {
+        return value.replace(/^\s+|\s+$/g, "").split(/\s*,\s*/g);
+    }
+
+    function escapeAttributeValue(value) {
+        // As mentioned on http://api.jquery.com/category/selectors/
+        return value.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g, "\\$1");
+    }
+
+    function getModelPrefix(fieldName) {
+        return fieldName.substr(0, fieldName.lastIndexOf(".") + 1);
+    }
+
+    function appendModelPrefix(value, prefix) {
+        if (value.indexOf("*.") === 0) {
+            value = value.replace("*.", prefix);
+        }
+        return value;
+    }
+
+    function onError(error, inputElement) {  // 'this' is the form element
+        var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
+            replaceAttrValue = container.attr("data-valmsg-replace"),
+            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;
+
+        container.removeClass("field-validation-valid").addClass("field-validation-error");
+        error.data("unobtrusiveContainer", container);
+
+        if (replace) {
+            container.empty();
+            error.removeClass("input-validation-error").appendTo(container);
+        }
+        else {
+            error.hide();
+        }
+    }
+
+    function onErrors(event, validator) {  // 'this' is the form element
+        var container = $(this).find("[data-valmsg-summary=true]"),
+            list = container.find("ul");
+
+        if (list && list.length && validator.errorList.length) {
+            list.empty();
+            container.addClass("validation-summary-errors").removeClass("validation-summary-valid");
+
+            $.each(validator.errorList, function () {
+                $("<li />").html(this.message).appendTo(list);
+            });
+        }
+    }
+
+    function onSuccess(error) {  // 'this' is the form element
+        var container = error.data("unobtrusiveContainer");
+
+        if (container) {
+            var replaceAttrValue = container.attr("data-valmsg-replace"),
+                replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;
+
+            container.addClass("field-validation-valid").removeClass("field-validation-error");
+            error.removeData("unobtrusiveContainer");
+
+            if (replace) {
+                container.empty();
+            }
+        }
+    }
+
+    function onReset(event) {  // 'this' is the form element
+        var $form = $(this),
+            key = '__jquery_unobtrusive_validation_form_reset';
+        if ($form.data(key)) {
+            return;
+        }
+        // Set a flag that indicates we're currently resetting the form.
+        $form.data(key, true);
+        try {
+            $form.data("validator").resetForm();
+        } finally {
+            $form.removeData(key);
+        }
+
+        $form.find(".validation-summary-errors")
+            .addClass("validation-summary-valid")
+            .removeClass("validation-summary-errors");
+        $form.find(".field-validation-error")
+            .addClass("field-validation-valid")
+            .removeClass("field-validation-error")
+            .removeData("unobtrusiveContainer")
+            .find(">*")  // If we were using valmsg-replace, get the underlying error
+            .removeData("unobtrusiveContainer");
+    }
+
+    function validationInfo(form) {
+        var $form = $(form),
+            result = $form.data(data_validation),
+            onResetProxy = $.proxy(onReset, form),
+            defaultOptions = $jQval.unobtrusive.options || {},
+            execInContext = function (name, args) {
+                var func = defaultOptions[name];
+                func && $.isFunction(func) && func.apply(form, args);
+            };
+
+        if (!result) {
+            result = {
+                options: {  // options structure passed to jQuery Validate's validate() method
+                    errorClass: defaultOptions.errorClass || "input-validation-error",
+                    errorElement: defaultOptions.errorElement || "span",
+                    errorPlacement: function () {
+                        onError.apply(form, arguments);
+                        execInContext("errorPlacement", arguments);
+                    },
+                    invalidHandler: function () {
+                        onErrors.apply(form, arguments);
+                        execInContext("invalidHandler", arguments);
+                    },
+                    messages: {},
+                    rules: {},
+                    success: function () {
+                        onSuccess.apply(form, arguments);
+                        execInContext("success", arguments);
+                    }
+                },
+                attachValidation: function () {
+                    $form
+                        .off("reset." + data_validation, onResetProxy)
+                        .on("reset." + data_validation, onResetProxy)
+                        .validate(this.options);
+                },
+                validate: function () {  // a validation function that is called by unobtrusive Ajax
+                    $form.validate();
+                    return $form.valid();
+                }
+            };
+            $form.data(data_validation, result);
+        }
+
+        return result;
+    }
+
+    $jQval.unobtrusive = {
+        adapters: [],
+
+        parseElement: function (element, skipAttach) {
+            /// <summary>
+            /// Parses a single HTML element for unobtrusive validation attributes.
+            /// </summary>
+            /// <param name="element" domElement="true">The HTML element to be parsed.</param>
+            /// <param name="skipAttach" type="Boolean">[Optional] true to skip attaching the
+            /// validation to the form. If parsing just this single element, you should specify true.
+            /// If parsing several elements, you should specify false, and manually attach the validation
+            /// to the form when you are finished. The default is false.</param>
+            var $element = $(element),
+                form = $element.parents("form")[0],
+                valInfo, rules, messages;
+
+            if (!form) {  // Cannot do client-side validation without a form
+                return;
+            }
+
+            valInfo = validationInfo(form);
+            valInfo.options.rules[element.name] = rules = {};
+            valInfo.options.messages[element.name] = messages = {};
+
+            $.each(this.adapters, function () {
+                var prefix = "data-val-" + this.name,
+                    message = $element.attr(prefix),
+                    paramValues = {};
+
+                if (message !== undefined) {  // Compare against undefined, because an empty message is legal (and falsy)
+                    prefix += "-";
+
+                    $.each(this.params, function () {
+                        paramValues[this] = $element.attr(prefix + this);
+                    });
+
+                    this.adapt({
+                        element: element,
+                        form: form,
+                        message: message,
+                        params: paramValues,
+                        rules: rules,
+                        messages: messages
+                    });
+                }
+            });
+
+            $.extend(rules, { "__dummy__": true });
+
+            if (!skipAttach) {
+                valInfo.attachValidation();
+            }
+        },
+
+        parse: function (selector) {
+            /// <summary>
+            /// Parses all the HTML elements in the specified selector. It looks for input elements decorated
+            /// with the [data-val=true] attribute value and enables validation according to the data-val-*
+            /// attribute values.
+            /// </summary>
+            /// <param name="selector" type="String">Any valid jQuery selector.</param>
+
+            // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one
+            // element with data-val=true
+            var $selector = $(selector),
+                $forms = $selector.parents()
+                    .addBack()
+                    .filter("form")
+                    .add($selector.find("form"))
+                    .has("[data-val=true]");
+
+            $selector.find("[data-val=true]").each(function () {
+                $jQval.unobtrusive.parseElement(this, true);
+            });
+
+            $forms.each(function () {
+                var info = validationInfo(this);
+                if (info) {
+                    info.attachValidation();
+                }
+            });
+        }
+    };
+
+    adapters = $jQval.unobtrusive.adapters;
+
+    adapters.add = function (adapterName, params, fn) {
+        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.</summary>
+        /// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
+        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
+        /// <param name="params" type="Array" optional="true">[Optional] An array of parameter names (strings) that will
+        /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and
+        /// mmmm is the parameter name).</param>
+        /// <param name="fn" type="Function">The function to call, which adapts the values from the HTML
+        /// attributes into jQuery Validate rules and/or messages.</param>
+        /// <returns type="jQuery.validator.unobtrusive.adapters" />
+        if (!fn) {  // Called with no params, just a function
+            fn = params;
+            params = [];
+        }
+        this.push({ name: adapterName, params: params, adapt: fn });
+        return this;
+    };
+
+    adapters.addBool = function (adapterName, ruleName) {
+        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
+        /// the jQuery Validate validation rule has no parameter values.</summary>
+        /// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
+        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
+        /// <param name="ruleName" type="String" optional="true">[Optional] The name of the jQuery Validate rule. If not provided, the value
+        /// of adapterName will be used instead.</param>
+        /// <returns type="jQuery.validator.unobtrusive.adapters" />
+        return this.add(adapterName, function (options) {
+            setValidationValues(options, ruleName || adapterName, true);
+        });
+    };
+
+    adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {
+        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
+        /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and
+        /// one for min-and-max). The HTML parameters are expected to be named -min and -max.</summary>
+        /// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
+        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
+        /// <param name="minRuleName" type="String">The name of the jQuery Validate rule to be used when you only
+        /// have a minimum value.</param>
+        /// <param name="maxRuleName" type="String">The name of the jQuery Validate rule to be used when you only
+        /// have a maximum value.</param>
+        /// <param name="minMaxRuleName" type="String">The name of the jQuery Validate rule to be used when you
+        /// have both a minimum and maximum value.</param>
+        /// <param name="minAttribute" type="String" optional="true">[Optional] The name of the HTML attribute that
+        /// contains the minimum value. The default is "min".</param>
+        /// <param name="maxAttribute" type="String" optional="true">[Optional] The name of the HTML attribute that
+        /// contains the maximum value. The default is "max".</param>
+        /// <returns type="jQuery.validator.unobtrusive.adapters" />
+        return this.add(adapterName, [minAttribute || "min", maxAttribute || "max"], function (options) {
+            var min = options.params.min,
+                max = options.params.max;
+
+            if (min && max) {
+                setValidationValues(options, minMaxRuleName, [min, max]);
+            }
+            else if (min) {
+                setValidationValues(options, minRuleName, min);
+            }
+            else if (max) {
+                setValidationValues(options, maxRuleName, max);
+            }
+        });
+    };
+
+    adapters.addSingleVal = function (adapterName, attribute, ruleName) {
+        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
+        /// the jQuery Validate validation rule has a single value.</summary>
+        /// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
+        /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).</param>
+        /// <param name="attribute" type="String">[Optional] The name of the HTML attribute that contains the value.
+        /// The default is "val".</param>
+        /// <param name="ruleName" type="String" optional="true">[Optional] The name of the jQuery Validate rule. If not provided, the value
+        /// of adapterName will be used instead.</param>
+        /// <returns type="jQuery.validator.unobtrusive.adapters" />
+        return this.add(adapterName, [attribute || "val"], function (options) {
+            setValidationValues(options, ruleName || adapterName, options.params[attribute]);
+        });
+    };
+
+    $jQval.addMethod("__dummy__", function (value, element, params) {
+        return true;
+    });
+
+    $jQval.addMethod("regex", function (value, element, params) {
+        var match;
+        if (this.optional(element)) {
+            return true;
+        }
+
+        match = new RegExp(params).exec(value);
+        return (match && (match.index === 0) && (match[0].length === value.length));
+    });
+
+    $jQval.addMethod("nonalphamin", function (value, element, nonalphamin) {
+        var match;
+        if (nonalphamin) {
+            match = value.match(/\W/g);
+            match = match && match.length >= nonalphamin;
+        }
+        return match;
+    });
+
+    if ($jQval.methods.extension) {
+        adapters.addSingleVal("accept", "mimtype");
+        adapters.addSingleVal("extension", "extension");
+    } else {
+        // for backward compatibility, when the 'extension' validation method does not exist, such as with versions
+        // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for
+        // validating the extension, and ignore mime-type validations as they are not supported.
+        adapters.addSingleVal("extension", "extension", "accept");
+    }
+
+    adapters.addSingleVal("regex", "pattern");
+    adapters.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url");
+    adapters.addMinMax("length", "minlength", "maxlength", "rangelength").addMinMax("range", "min", "max", "range");
+    adapters.addMinMax("minlength", "minlength").addMinMax("maxlength", "minlength", "maxlength");
+    adapters.add("equalto", ["other"], function (options) {
+        var prefix = getModelPrefix(options.element.name),
+            other = options.params.other,
+            fullOtherName = appendModelPrefix(other, prefix),
+            element = $(options.form).find(":input").filter("[name='" + escapeAttributeValue(fullOtherName) + "']")[0];
+
+        setValidationValues(options, "equalTo", element);
+    });
+    adapters.add("required", function (options) {
+        // jQuery Validate equates "required" with "mandatory" for checkbox elements
+        if (options.element.tagName.toUpperCase() !== "INPUT" || options.element.type.toUpperCase() !== "CHECKBOX") {
+            setValidationValues(options, "required", true);
+        }
+    });
+    adapters.add("remote", ["url", "type", "additionalfields"], function (options) {
+        var value = {
+            url: options.params.url,
+            type: options.params.type || "GET",
+            data: {}
+        },
+            prefix = getModelPrefix(options.element.name);
+
+        $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {
+            var paramName = appendModelPrefix(fieldName, prefix);
+            value.data[paramName] = function () {
+                var field = $(options.form).find(":input").filter("[name='" + escapeAttributeValue(paramName) + "']");
+                // For checkboxes and radio buttons, only pick up values from checked fields.
+                if (field.is(":checkbox")) {
+                    return field.filter(":checked").val() || field.filter(":hidden").val() || '';
+                }
+                else if (field.is(":radio")) {
+                    return field.filter(":checked").val() || '';
+                }
+                return field.val();
+            };
+        });
+
+        setValidationValues(options, "remote", value);
+    });
+    adapters.add("password", ["min", "nonalphamin", "regex"], function (options) {
+        if (options.params.min) {
+            setValidationValues(options, "minlength", options.params.min);
+        }
+        if (options.params.nonalphamin) {
+            setValidationValues(options, "nonalphamin", options.params.nonalphamin);
+        }
+        if (options.params.regex) {
+            setValidationValues(options, "regex", options.params.regex);
+        }
+    });
+    adapters.add("fileextensions", ["extensions"], function (options) {
+        setValidationValues(options, "extension", options.params.extensions);
+    });
+
+    $(function () {
+        $jQval.unobtrusive.parse(document);
+    });
+
+    return $jQval.unobtrusive;
+}));

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 5 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js


+ 22 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation/LICENSE.md

@@ -0,0 +1,22 @@
+The MIT License (MIT)
+=====================
+
+Copyright Jörn Zaefferer
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1158 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation/dist/additional-methods.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 4 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation/dist/additional-methods.min.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1601 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation/dist/jquery.validate.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 4 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js


+ 36 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery/LICENSE.txt

@@ -0,0 +1,36 @@
+Copyright JS Foundation and other contributors, https://js.foundation/
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/jquery/jquery
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+All files located in the node_modules and external directories are
+externally maintained libraries used by this software which have their
+own licenses; we recommend you read them, as their terms may differ from
+the terms above.

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 10364 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery/dist/jquery.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 2 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery/dist/jquery.min.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
HaBookCms.AzureCosmosDBTest/wwwroot/lib/jquery/dist/jquery.min.map


+ 18 - 0
HaBookCms.Contest/Controllers/ActivityController.cs

@@ -0,0 +1,18 @@
+using HaBookCms.Core.Models.Contest;
+using Microsoft.AspNetCore.Mvc;
+using System.Threading.Tasks;
+
+namespace HaBookCms.Contest.Controllers
+
+{
+    [Route("contest/[controller]")]
+    public class ActivityController:BaseController
+    {
+        private const string EndpointUri = "https://localhost:8081";
+        private const string PrimaryKey = "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
+      //  private DocumentClient client;
+        public async Task Save(BaseActivty activty) {
+
+        }
+    }
+}

+ 0 - 1
HaBookCms.Core/HaBookCms.Core.csproj

@@ -5,7 +5,6 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <Folder Include="Models\Contest\" />
     <Folder Include="Models\Website\" />
   </ItemGroup>
 

+ 78 - 0
HaBookCms.Core/Models/Contest/Activity.cs

@@ -0,0 +1,78 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HaBookCms.Core.Models.Contest
+{
+   public  class Activity
+    {
+        [JsonProperty(PropertyName = "id")]
+        public string Id { get; set; }
+        /// <summary>
+        /// Desc:活动名称
+        /// </summary>   
+        public string Title { get; set; }
+        /// <summary>
+        /// Desc:流程标识
+        /// </summary>  
+        public Model[] Models { get; set; }
+        /// <summary>
+        /// Desc:活动组件
+        /// </summary>  
+        public Parts[] Children { get; set; }
+        /// <summary>
+        /// Desc:活动简介
+        /// </summary>  
+        public string Introduce { get; set; }
+        /// <summary>
+        /// Desc:活动链接
+        /// </summary>  
+        public string ActivityLink { get; set; }
+        /// <summary>
+        /// Desc:活动状态
+        /// </summary>  
+        public string state { get; set; }
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+        public class Model
+        {
+            /// <summary>
+            /// Desc:模块唯一标识
+            /// </summary>  
+            public string ModelId { get; set; }
+            /// <summary>
+            /// Desc:模块名称
+            /// </summary>  
+            public string ModelName { get; set; }
+            /// <summary>
+            /// Desc:模块时间段
+            /// </summary>  
+            public string ModelStartTime { get; set; }
+            public string ModelEndTime { get; set; }
+        }
+
+        public class Parts
+        {
+            /// <summary>
+            /// Desc:组件唯一标识
+            /// </summary>  
+            public string PartId { get; set; }
+            /// <summary>
+            /// Desc:组件名称
+            /// </summary>  
+            public string PartlLabel { get; set; }
+            /// <summary>
+            /// Desc:组件关联字段
+            /// </summary>  
+            public string PartFiled { get; set; }
+            /// <summary>
+            /// Desc:组件类型
+            /// </summary>  
+            public string PartType { get; set; }
+        }
+    }
+}

+ 80 - 0
HaBookCms.Core/Models/Contest/BaseActivty.cs

@@ -0,0 +1,80 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HaBookCms.Core.Models.Contest
+{
+    /// <summary>
+    /// 申报活动
+    /// </summary>
+    public class BaseActivty
+    {
+        [JsonProperty(PropertyName = "id")]
+        public string Id { get; set; }
+        /// <summary>
+        /// Desc:活动名称
+        /// </summary>   
+        public string Title { get; set; }
+        /// <summary>
+        /// Desc:流程标识
+        /// </summary>  
+        public Model[] Models { get; set; }
+        /// <summary>
+        /// Desc:活动组件
+        /// </summary>  
+        public Parts[] Children { get; set; }
+        /// <summary>
+        /// Desc:活动简介
+        /// </summary>  
+        public string Introduce { get; set; }
+        /// <summary>
+        /// Desc:活动链接
+        /// </summary>  
+        public string ActivityLink { get; set; }
+        /// <summary>
+        /// Desc:活动状态
+        /// </summary>  
+        public string state { get; set; }
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+        public class Model {
+            /// <summary>
+            /// Desc:模块唯一标识
+            /// </summary>  
+            public string ModelId { get; set; }
+            /// <summary>
+            /// Desc:模块名称
+            /// </summary>  
+            public string ModelName { get; set; }
+            /// <summary>
+            /// Desc:模块时间段
+            /// </summary>  
+            public string ModelStartTime { get; set; }
+            public string ModelEndTime { get; set; }
+        }
+
+        public class Parts
+        {
+            /// <summary>
+            /// Desc:组件唯一标识
+            /// </summary>  
+            public string PartId { get; set; }
+            /// <summary>
+            /// Desc:组件名称
+            /// </summary>  
+            public string PartlLabel { get; set; }
+            /// <summary>
+            /// Desc:组件关联字段
+            /// </summary>  
+            public string PartFiled { get; set; }
+            /// <summary>
+            /// Desc:组件类型
+            /// </summary>  
+            public string PartType { get; set; }
+        }
+    }
+}

+ 7 - 0
HaBookCms.sln

@@ -43,6 +43,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HaBookCms.IP2Region", "HaBo
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HaBookCms.AzureBlobStorageTest", "HaBookCms.AzureBlobStorageTest\HaBookCms.AzureBlobStorageTest.csproj", "{1F3D1D57-BC66-44D5-A2A3-DCD3B0930EA1}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HaBookCms.AzureCosmosDBTest", "HaBookCms.AzureCosmosDBTest\HaBookCms.AzureCosmosDBTest.csproj", "{58386406-0DA9-4565-A34B-AA0C52E2A7CC}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -109,6 +111,10 @@ Global
 		{1F3D1D57-BC66-44D5-A2A3-DCD3B0930EA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{1F3D1D57-BC66-44D5-A2A3-DCD3B0930EA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{1F3D1D57-BC66-44D5-A2A3-DCD3B0930EA1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{58386406-0DA9-4565-A34B-AA0C52E2A7CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{58386406-0DA9-4565-A34B-AA0C52E2A7CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{58386406-0DA9-4565-A34B-AA0C52E2A7CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{58386406-0DA9-4565-A34B-AA0C52E2A7CC}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -129,6 +135,7 @@ Global
 		{0FB3E14C-41DF-4686-BD7C-7A6E03B1C548} = {4B1BDA90-D27E-4597-9B68-D1D9273F0B5D}
 		{F7832670-7572-4EE7-A61B-9732DE01E9FC} = {CB0A287C-1551-4E69-8CCB-3A32F1CB1536}
 		{1F3D1D57-BC66-44D5-A2A3-DCD3B0930EA1} = {4B1BDA90-D27E-4597-9B68-D1D9273F0B5D}
+		{58386406-0DA9-4565-A34B-AA0C52E2A7CC} = {4B1BDA90-D27E-4597-9B68-D1D9273F0B5D}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {AE47BE78-B3F5-4723-ACDF-BC403B131012}