From 0234db870b86d853136f9cca61b8744fa3d9e244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tommy=20=C3=96man?= Date: Mon, 17 Apr 2023 11:01:23 +0200 Subject: [PATCH] Add project files. --- BlazorSyncfusionCrm.sln | 37 ++++ BlazorSyncfusionCrm/Client/App.razor | 12 ++ .../Client/BlazorSyncfusionCrm.Client.csproj | 20 ++ BlazorSyncfusionCrm/Client/MainLayout.razor | 7 + .../Client/Pages/Contacts.razor | 65 +++++++ BlazorSyncfusionCrm/Client/Pages/Index.razor | 3 + BlazorSyncfusionCrm/Client/Program.cs | 18 ++ .../Client/Properties/launchSettings.json | 38 ++++ .../Client/Shared/NavBar.razor | 22 +++ BlazorSyncfusionCrm/Client/_Imports.razor | 14 ++ .../Client/wwwroot/css/app.css | 42 +++++ BlazorSyncfusionCrm/Client/wwwroot/index.html | 26 +++ .../Server/BlazorSyncfusionCrm.Server.csproj | 24 +++ .../Server/Data/DataContext.cs | 64 +++++++ .../20230417080830_Initial.Designer.cs | 177 ++++++++++++++++++ .../Migrations/20230417080830_Initial.cs | 93 +++++++++ .../Migrations/DataContextModelSnapshot.cs | 174 +++++++++++++++++ BlazorSyncfusionCrm/Server/Program.cs | 33 ++++ .../Server/Properties/launchSettings.json | 44 +++++ .../Server/appsettings.Development.json | 8 + BlazorSyncfusionCrm/Server/appsettings.json | 9 + .../Shared/BlazorSyncfusionCrm.Shared.csproj | 12 ++ BlazorSyncfusionCrm/Shared/Contact.cs | 27 +++ BlazorSyncfusionCrm/Shared/Note.cs | 17 ++ BlazorSyncfusionCrm/Shared/SharedClass.cs | 1 + 25 files changed, 987 insertions(+) create mode 100644 BlazorSyncfusionCrm.sln create mode 100644 BlazorSyncfusionCrm/Client/App.razor create mode 100644 BlazorSyncfusionCrm/Client/BlazorSyncfusionCrm.Client.csproj create mode 100644 BlazorSyncfusionCrm/Client/MainLayout.razor create mode 100644 BlazorSyncfusionCrm/Client/Pages/Contacts.razor create mode 100644 BlazorSyncfusionCrm/Client/Pages/Index.razor create mode 100644 BlazorSyncfusionCrm/Client/Program.cs create mode 100644 BlazorSyncfusionCrm/Client/Properties/launchSettings.json create mode 100644 BlazorSyncfusionCrm/Client/Shared/NavBar.razor create mode 100644 BlazorSyncfusionCrm/Client/_Imports.razor create mode 100644 BlazorSyncfusionCrm/Client/wwwroot/css/app.css create mode 100644 BlazorSyncfusionCrm/Client/wwwroot/index.html create mode 100644 BlazorSyncfusionCrm/Server/BlazorSyncfusionCrm.Server.csproj create mode 100644 BlazorSyncfusionCrm/Server/Data/DataContext.cs create mode 100644 BlazorSyncfusionCrm/Server/Migrations/20230417080830_Initial.Designer.cs create mode 100644 BlazorSyncfusionCrm/Server/Migrations/20230417080830_Initial.cs create mode 100644 BlazorSyncfusionCrm/Server/Migrations/DataContextModelSnapshot.cs create mode 100644 BlazorSyncfusionCrm/Server/Program.cs create mode 100644 BlazorSyncfusionCrm/Server/Properties/launchSettings.json create mode 100644 BlazorSyncfusionCrm/Server/appsettings.Development.json create mode 100644 BlazorSyncfusionCrm/Server/appsettings.json create mode 100644 BlazorSyncfusionCrm/Shared/BlazorSyncfusionCrm.Shared.csproj create mode 100644 BlazorSyncfusionCrm/Shared/Contact.cs create mode 100644 BlazorSyncfusionCrm/Shared/Note.cs create mode 100644 BlazorSyncfusionCrm/Shared/SharedClass.cs diff --git a/BlazorSyncfusionCrm.sln b/BlazorSyncfusionCrm.sln new file mode 100644 index 0000000..1fff585 --- /dev/null +++ b/BlazorSyncfusionCrm.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33530.505 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorSyncfusionCrm.Server", "BlazorSyncfusionCrm\Server\BlazorSyncfusionCrm.Server.csproj", "{7CDE9631-522C-4727-9D35-734AF3EC1D8B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorSyncfusionCrm.Client", "BlazorSyncfusionCrm\Client\BlazorSyncfusionCrm.Client.csproj", "{D25FCFE5-07DB-4CD1-9DB0-1D609A0EDAB1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorSyncfusionCrm.Shared", "BlazorSyncfusionCrm\Shared\BlazorSyncfusionCrm.Shared.csproj", "{543DDF44-5E13-4C3D-93E0-F3827B7B9A48}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7CDE9631-522C-4727-9D35-734AF3EC1D8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7CDE9631-522C-4727-9D35-734AF3EC1D8B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7CDE9631-522C-4727-9D35-734AF3EC1D8B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7CDE9631-522C-4727-9D35-734AF3EC1D8B}.Release|Any CPU.Build.0 = Release|Any CPU + {D25FCFE5-07DB-4CD1-9DB0-1D609A0EDAB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D25FCFE5-07DB-4CD1-9DB0-1D609A0EDAB1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D25FCFE5-07DB-4CD1-9DB0-1D609A0EDAB1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D25FCFE5-07DB-4CD1-9DB0-1D609A0EDAB1}.Release|Any CPU.Build.0 = Release|Any CPU + {543DDF44-5E13-4C3D-93E0-F3827B7B9A48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {543DDF44-5E13-4C3D-93E0-F3827B7B9A48}.Debug|Any CPU.Build.0 = Debug|Any CPU + {543DDF44-5E13-4C3D-93E0-F3827B7B9A48}.Release|Any CPU.ActiveCfg = Release|Any CPU + {543DDF44-5E13-4C3D-93E0-F3827B7B9A48}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {390A8B16-94FE-481E-B900-6D8E7186423F} + EndGlobalSection +EndGlobal diff --git a/BlazorSyncfusionCrm/Client/App.razor b/BlazorSyncfusionCrm/Client/App.razor new file mode 100644 index 0000000..6fd3ed1 --- /dev/null +++ b/BlazorSyncfusionCrm/Client/App.razor @@ -0,0 +1,12 @@ + + + + + + + Not found + +

Sorry, there's nothing at this address.

+
+
+
diff --git a/BlazorSyncfusionCrm/Client/BlazorSyncfusionCrm.Client.csproj b/BlazorSyncfusionCrm/Client/BlazorSyncfusionCrm.Client.csproj new file mode 100644 index 0000000..4652767 --- /dev/null +++ b/BlazorSyncfusionCrm/Client/BlazorSyncfusionCrm.Client.csproj @@ -0,0 +1,20 @@ + + + + net7.0 + enable + enable + + + + + + + + + + + + + + diff --git a/BlazorSyncfusionCrm/Client/MainLayout.razor b/BlazorSyncfusionCrm/Client/MainLayout.razor new file mode 100644 index 0000000..17f6dc7 --- /dev/null +++ b/BlazorSyncfusionCrm/Client/MainLayout.razor @@ -0,0 +1,7 @@ +@inherits LayoutComponentBase + + + +
+ @Body +
diff --git a/BlazorSyncfusionCrm/Client/Pages/Contacts.razor b/BlazorSyncfusionCrm/Client/Pages/Contacts.razor new file mode 100644 index 0000000..82aa64c --- /dev/null +++ b/BlazorSyncfusionCrm/Client/Pages/Contacts.razor @@ -0,0 +1,65 @@ +@page "/contacts" +@inject NavigationManager NavigationManager +

Contacts

+ + + + + + + + + + + + + + + + +@code { + public List GridData { get; set; } = new List + { + new Contact + { + Id = 1, + FirstName = "Peter", + LastName = "Parker", + NickName = "Spider-Man", + Place = "New York City", + DateOfBirth = new DateTime(2001, 8, 1), + DateCreated = DateTime.Now + }, + new Contact + { + Id = 1, + FirstName = "Tony", + LastName = "Stark", + NickName = "Iron Man", + Place = "Malibu", + DateOfBirth = new DateTime(1970, 5, 29), + DateCreated = DateTime.Now + }, + new Contact + { + Id = 1, + FirstName = "Bruce", + LastName = "Wayne", + NickName = "Batman", + Place = "Gotham City", + DateOfBirth = new DateTime(1915, 4, 7), + DateCreated = DateTime.Now + } + }; + + void EditContact(int Id) + { + NavigationManager.NavigateTo($"contacts/edit/{Id}"); + } +} diff --git a/BlazorSyncfusionCrm/Client/Pages/Index.razor b/BlazorSyncfusionCrm/Client/Pages/Index.razor new file mode 100644 index 0000000..1f9824b --- /dev/null +++ b/BlazorSyncfusionCrm/Client/Pages/Index.razor @@ -0,0 +1,3 @@ +@page "/" + +

Wellcome to Blazing CRM!

diff --git a/BlazorSyncfusionCrm/Client/Program.cs b/BlazorSyncfusionCrm/Client/Program.cs new file mode 100644 index 0000000..568049f --- /dev/null +++ b/BlazorSyncfusionCrm/Client/Program.cs @@ -0,0 +1,18 @@ +using BlazorSyncfusionCrm.Client; +using Microsoft.AspNetCore.Components.Web; +using Microsoft.AspNetCore.Components.WebAssembly.Hosting; +using Syncfusion.Blazor; + +var builder = WebAssemblyHostBuilder.CreateDefault(args); +builder.RootComponents.Add("#app"); +builder.RootComponents.Add("head::after"); + +builder.Services.AddHttpClient("BlazorSyncfusionCrm.ServerAPI", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)); + +// Supply HttpClient instances that include access tokens when making requests to the server project +builder.Services.AddScoped(sp => sp.GetRequiredService().CreateClient("BlazorSyncfusionCrm.ServerAPI")); +builder.Services.AddSyncfusionBlazor(); + +Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("MTcyMTQ0NkAzMjMxMmUzMTJlMzMzNVNvVmlFLy9zUk5TTTlURGZIeTRCelpRR2FTQ1NXTXRrSGpNcVJKMzRES1E9"); + +await builder.Build().RunAsync(); diff --git a/BlazorSyncfusionCrm/Client/Properties/launchSettings.json b/BlazorSyncfusionCrm/Client/Properties/launchSettings.json new file mode 100644 index 0000000..9239849 --- /dev/null +++ b/BlazorSyncfusionCrm/Client/Properties/launchSettings.json @@ -0,0 +1,38 @@ +{ + "iisSettings": { + "iisExpress": { + "applicationUrl": "http://localhost:57610", + "sslPort": 44334 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "http://localhost:5229", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:7031;http://localhost:5229", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/BlazorSyncfusionCrm/Client/Shared/NavBar.razor b/BlazorSyncfusionCrm/Client/Shared/NavBar.razor new file mode 100644 index 0000000..5e40199 --- /dev/null +++ b/BlazorSyncfusionCrm/Client/Shared/NavBar.razor @@ -0,0 +1,22 @@ +@inject NavigationManager NavigationManager + + + + + + + + + + + +@code { + void NavigateToPage(string page) + { + NavigationManager.NavigateTo(page); + } +} diff --git a/BlazorSyncfusionCrm/Client/_Imports.razor b/BlazorSyncfusionCrm/Client/_Imports.razor new file mode 100644 index 0000000..a51f785 --- /dev/null +++ b/BlazorSyncfusionCrm/Client/_Imports.razor @@ -0,0 +1,14 @@ +@using System.Net.Http +@using System.Net.Http.Json +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.WebAssembly.Http +@using Microsoft.JSInterop +@using BlazorSyncfusionCrm.Client.Shared +@using BlazorSyncfusionCrm.Client +@using BlazorSyncfusionCrm.Shared; +@using Syncfusion.Blazor +@using Syncfusion.Blazor.Navigations +@using Syncfusion.Blazor.Buttons +@using Syncfusion.Blazor.Grids + diff --git a/BlazorSyncfusionCrm/Client/wwwroot/css/app.css b/BlazorSyncfusionCrm/Client/wwwroot/css/app.css new file mode 100644 index 0000000..f0d125d --- /dev/null +++ b/BlazorSyncfusionCrm/Client/wwwroot/css/app.css @@ -0,0 +1,42 @@ +body { + margin: 0; + padding: 0; + font-family: Roboto, Arial, Helvetica, sans-serif; +} + +main { + margin: 12px; +} + +h1:focus { + outline: none; +} + +#blazor-error-ui { + background: lightyellow; + bottom: 0; + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); + display: none; + left: 0; + padding: 0.6rem 1.25rem 0.7rem 1.25rem; + position: fixed; + width: 100%; + z-index: 1000; +} + + #blazor-error-ui .dismiss { + cursor: pointer; + position: absolute; + right: 0.75rem; + top: 0.5rem; + } + +.blazor-error-boundary { + background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; + padding: 1rem 1rem 1rem 3.7rem; + color: white; +} + + .blazor-error-boundary::after { + content: "An error has occurred." + } diff --git a/BlazorSyncfusionCrm/Client/wwwroot/index.html b/BlazorSyncfusionCrm/Client/wwwroot/index.html new file mode 100644 index 0000000..7881421 --- /dev/null +++ b/BlazorSyncfusionCrm/Client/wwwroot/index.html @@ -0,0 +1,26 @@ + + + + + + BlazorSyncfusionCrm + + + + + + + +
Loading...
+ +
+ An unhandled error has occurred. + Reload + 🗙 +
+ + + + + diff --git a/BlazorSyncfusionCrm/Server/BlazorSyncfusionCrm.Server.csproj b/BlazorSyncfusionCrm/Server/BlazorSyncfusionCrm.Server.csproj new file mode 100644 index 0000000..465653e --- /dev/null +++ b/BlazorSyncfusionCrm/Server/BlazorSyncfusionCrm.Server.csproj @@ -0,0 +1,24 @@ + + + + net7.0 + enable + enable + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + diff --git a/BlazorSyncfusionCrm/Server/Data/DataContext.cs b/BlazorSyncfusionCrm/Server/Data/DataContext.cs new file mode 100644 index 0000000..6e13362 --- /dev/null +++ b/BlazorSyncfusionCrm/Server/Data/DataContext.cs @@ -0,0 +1,64 @@ +using BlazorSyncfusionCrm.Shared; +using Microsoft.EntityFrameworkCore; + +namespace BlazorSyncfusionCrm.Server.Data +{ + public class DataContext : DbContext + { + public DataContext(DbContextOptions options) : base(options) + { + + } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + base.OnConfiguring(optionsBuilder); + optionsBuilder + .UseSqlServer("Server=oemansv7win;Database=blazingcrm;User Id=sa;Password=SAoemansv7winSA;TrustServerCertificate=true"); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().HasData( + new Contact + { + Id = 1, + FirstName = "Peter", + LastName = "Parker", + NickName = "Spider-Man", + Place = "New York City", + DateOfBirth = new DateTime(2001, 8, 1), + DateCreated = DateTime.Now + }, + new Contact + { + Id = 2, + FirstName = "Tony", + LastName = "Stark", + NickName = "Iron Man", + Place = "Malibu", + DateOfBirth = new DateTime(1970, 5, 29), + DateCreated = DateTime.Now + }, + new Contact + { + Id = 3, + FirstName = "Bruce", + LastName = "Wayne", + NickName = "Batman", + Place = "Gotham City", + DateOfBirth = new DateTime(1915, 4, 7), + DateCreated = DateTime.Now + } + ); + modelBuilder.Entity().HasData( + new Note { Id = 1,ContactId = 1,Text="With great power comes great responsibility."}, + new Note { Id = 2, ContactId = 2, Text = "I'm Iron Man." }, + new Note { Id = 3, ContactId = 3, Text = "I'm Batman!." } + ); + } + + public DbSet Contacts { get; set; } + public DbSet Notes { get; set; } + } +} diff --git a/BlazorSyncfusionCrm/Server/Migrations/20230417080830_Initial.Designer.cs b/BlazorSyncfusionCrm/Server/Migrations/20230417080830_Initial.Designer.cs new file mode 100644 index 0000000..10b79b5 --- /dev/null +++ b/BlazorSyncfusionCrm/Server/Migrations/20230417080830_Initial.Designer.cs @@ -0,0 +1,177 @@ +// +using System; +using BlazorSyncfusionCrm.Server.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace BlazorSyncfusionCrm.Server.Migrations +{ + [DbContext(typeof(DataContext))] + [Migration("20230417080830_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.0-preview.3.23174.2") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("BlazorSyncfusionCrm.Shared.Contact", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("DateCreated") + .HasColumnType("datetime2"); + + b.Property("DateDeleted") + .HasColumnType("datetime2"); + + b.Property("DateOfBirth") + .HasColumnType("datetime2"); + + b.Property("DateUpdated") + .HasColumnType("datetime2"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NickName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Place") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Contacts"); + + b.HasData( + new + { + Id = 1, + DateCreated = new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6043), + DateDeleted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DateOfBirth = new DateTime(2001, 8, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DateUpdated = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + FirstName = "Peter", + IsDeleted = false, + LastName = "Parker", + NickName = "Spider-Man", + Place = "New York City" + }, + new + { + Id = 2, + DateCreated = new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6047), + DateDeleted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DateOfBirth = new DateTime(1970, 5, 29, 0, 0, 0, 0, DateTimeKind.Unspecified), + DateUpdated = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + FirstName = "Tony", + IsDeleted = false, + LastName = "Stark", + NickName = "Iron Man", + Place = "Malibu" + }, + new + { + Id = 3, + DateCreated = new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6050), + DateDeleted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DateOfBirth = new DateTime(1915, 4, 7, 0, 0, 0, 0, DateTimeKind.Unspecified), + DateUpdated = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + FirstName = "Bruce", + IsDeleted = false, + LastName = "Wayne", + NickName = "Batman", + Place = "Gotham City" + }); + }); + + modelBuilder.Entity("BlazorSyncfusionCrm.Shared.Note", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ContactId") + .HasColumnType("int"); + + b.Property("DateCreated") + .HasColumnType("datetime2"); + + b.Property("Text") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ContactId"); + + b.ToTable("Notes"); + + b.HasData( + new + { + Id = 1, + ContactId = 1, + DateCreated = new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6341), + Text = "With great power comes great responsibility." + }, + new + { + Id = 2, + ContactId = 2, + DateCreated = new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6345), + Text = "I'm Iron Man." + }, + new + { + Id = 3, + ContactId = 3, + DateCreated = new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6346), + Text = "I'm Batman!." + }); + }); + + modelBuilder.Entity("BlazorSyncfusionCrm.Shared.Note", b => + { + b.HasOne("BlazorSyncfusionCrm.Shared.Contact", "Contact") + .WithMany("Notes") + .HasForeignKey("ContactId"); + + b.Navigation("Contact"); + }); + + modelBuilder.Entity("BlazorSyncfusionCrm.Shared.Contact", b => + { + b.Navigation("Notes"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/BlazorSyncfusionCrm/Server/Migrations/20230417080830_Initial.cs b/BlazorSyncfusionCrm/Server/Migrations/20230417080830_Initial.cs new file mode 100644 index 0000000..d256c77 --- /dev/null +++ b/BlazorSyncfusionCrm/Server/Migrations/20230417080830_Initial.cs @@ -0,0 +1,93 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace BlazorSyncfusionCrm.Server.Migrations +{ + /// + public partial class Initial : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Contacts", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + FirstName = table.Column(type: "nvarchar(max)", nullable: false), + LastName = table.Column(type: "nvarchar(max)", nullable: false), + NickName = table.Column(type: "nvarchar(max)", nullable: false), + Place = table.Column(type: "nvarchar(max)", nullable: false), + IsDeleted = table.Column(type: "bit", nullable: false), + DateOfBirth = table.Column(type: "datetime2", nullable: true), + DateCreated = table.Column(type: "datetime2", nullable: false), + DateUpdated = table.Column(type: "datetime2", nullable: false), + DateDeleted = table.Column(type: "datetime2", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Contacts", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Notes", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Text = table.Column(type: "nvarchar(max)", nullable: false), + ContactId = table.Column(type: "int", nullable: true), + DateCreated = table.Column(type: "datetime2", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Notes", x => x.Id); + table.ForeignKey( + name: "FK_Notes_Contacts_ContactId", + column: x => x.ContactId, + principalTable: "Contacts", + principalColumn: "Id"); + }); + + migrationBuilder.InsertData( + table: "Contacts", + columns: new[] { "Id", "DateCreated", "DateDeleted", "DateOfBirth", "DateUpdated", "FirstName", "IsDeleted", "LastName", "NickName", "Place" }, + values: new object[,] + { + { 1, new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6043), new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new DateTime(2001, 8, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), "Peter", false, "Parker", "Spider-Man", "New York City" }, + { 2, new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6047), new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new DateTime(1970, 5, 29, 0, 0, 0, 0, DateTimeKind.Unspecified), new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), "Tony", false, "Stark", "Iron Man", "Malibu" }, + { 3, new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6050), new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new DateTime(1915, 4, 7, 0, 0, 0, 0, DateTimeKind.Unspecified), new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), "Bruce", false, "Wayne", "Batman", "Gotham City" } + }); + + migrationBuilder.InsertData( + table: "Notes", + columns: new[] { "Id", "ContactId", "DateCreated", "Text" }, + values: new object[,] + { + { 1, 1, new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6341), "With great power comes great responsibility." }, + { 2, 2, new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6345), "I'm Iron Man." }, + { 3, 3, new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6346), "I'm Batman!." } + }); + + migrationBuilder.CreateIndex( + name: "IX_Notes_ContactId", + table: "Notes", + column: "ContactId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Notes"); + + migrationBuilder.DropTable( + name: "Contacts"); + } + } +} diff --git a/BlazorSyncfusionCrm/Server/Migrations/DataContextModelSnapshot.cs b/BlazorSyncfusionCrm/Server/Migrations/DataContextModelSnapshot.cs new file mode 100644 index 0000000..2ead768 --- /dev/null +++ b/BlazorSyncfusionCrm/Server/Migrations/DataContextModelSnapshot.cs @@ -0,0 +1,174 @@ +// +using System; +using BlazorSyncfusionCrm.Server.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace BlazorSyncfusionCrm.Server.Migrations +{ + [DbContext(typeof(DataContext))] + partial class DataContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.0-preview.3.23174.2") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("BlazorSyncfusionCrm.Shared.Contact", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("DateCreated") + .HasColumnType("datetime2"); + + b.Property("DateDeleted") + .HasColumnType("datetime2"); + + b.Property("DateOfBirth") + .HasColumnType("datetime2"); + + b.Property("DateUpdated") + .HasColumnType("datetime2"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NickName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Place") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Contacts"); + + b.HasData( + new + { + Id = 1, + DateCreated = new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6043), + DateDeleted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DateOfBirth = new DateTime(2001, 8, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DateUpdated = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + FirstName = "Peter", + IsDeleted = false, + LastName = "Parker", + NickName = "Spider-Man", + Place = "New York City" + }, + new + { + Id = 2, + DateCreated = new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6047), + DateDeleted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DateOfBirth = new DateTime(1970, 5, 29, 0, 0, 0, 0, DateTimeKind.Unspecified), + DateUpdated = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + FirstName = "Tony", + IsDeleted = false, + LastName = "Stark", + NickName = "Iron Man", + Place = "Malibu" + }, + new + { + Id = 3, + DateCreated = new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6050), + DateDeleted = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + DateOfBirth = new DateTime(1915, 4, 7, 0, 0, 0, 0, DateTimeKind.Unspecified), + DateUpdated = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + FirstName = "Bruce", + IsDeleted = false, + LastName = "Wayne", + NickName = "Batman", + Place = "Gotham City" + }); + }); + + modelBuilder.Entity("BlazorSyncfusionCrm.Shared.Note", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ContactId") + .HasColumnType("int"); + + b.Property("DateCreated") + .HasColumnType("datetime2"); + + b.Property("Text") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ContactId"); + + b.ToTable("Notes"); + + b.HasData( + new + { + Id = 1, + ContactId = 1, + DateCreated = new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6341), + Text = "With great power comes great responsibility." + }, + new + { + Id = 2, + ContactId = 2, + DateCreated = new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6345), + Text = "I'm Iron Man." + }, + new + { + Id = 3, + ContactId = 3, + DateCreated = new DateTime(2023, 4, 17, 10, 8, 30, 665, DateTimeKind.Local).AddTicks(6346), + Text = "I'm Batman!." + }); + }); + + modelBuilder.Entity("BlazorSyncfusionCrm.Shared.Note", b => + { + b.HasOne("BlazorSyncfusionCrm.Shared.Contact", "Contact") + .WithMany("Notes") + .HasForeignKey("ContactId"); + + b.Navigation("Contact"); + }); + + modelBuilder.Entity("BlazorSyncfusionCrm.Shared.Contact", b => + { + b.Navigation("Notes"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/BlazorSyncfusionCrm/Server/Program.cs b/BlazorSyncfusionCrm/Server/Program.cs new file mode 100644 index 0000000..dc1b9a0 --- /dev/null +++ b/BlazorSyncfusionCrm/Server/Program.cs @@ -0,0 +1,33 @@ +using BlazorSyncfusionCrm.Server.Data; +using Microsoft.AspNetCore.ResponseCompression; + +var builder = WebApplication.CreateBuilder(args); + +builder.Services.AddControllersWithViews(); +builder.Services.AddRazorPages(); +builder.Services.AddDbContext(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseWebAssemblyDebugging(); +} +else +{ + // 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.UseBlazorFrameworkFiles(); +app.UseStaticFiles(); + +app.UseRouting(); + +app.MapRazorPages(); +app.MapControllers(); +app.MapFallbackToFile("index.html"); + +app.Run(); diff --git a/BlazorSyncfusionCrm/Server/Properties/launchSettings.json b/BlazorSyncfusionCrm/Server/Properties/launchSettings.json new file mode 100644 index 0000000..02646ba --- /dev/null +++ b/BlazorSyncfusionCrm/Server/Properties/launchSettings.json @@ -0,0 +1,44 @@ +{ + "profiles": { + "http": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "dotnetRunMessages": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "http://localhost:5229" + }, + "https": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "dotnetRunMessages": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:7031;http://localhost:5229" + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}" + } + }, + "iisExpress": { + "applicationUrl": "http://localhost:57610", + "sslPort": 44334 + }, + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:53859/", + "sslPort": 44311 + } + } +} \ No newline at end of file diff --git a/BlazorSyncfusionCrm/Server/appsettings.Development.json b/BlazorSyncfusionCrm/Server/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/BlazorSyncfusionCrm/Server/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/BlazorSyncfusionCrm/Server/appsettings.json b/BlazorSyncfusionCrm/Server/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/BlazorSyncfusionCrm/Server/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/BlazorSyncfusionCrm/Shared/BlazorSyncfusionCrm.Shared.csproj b/BlazorSyncfusionCrm/Shared/BlazorSyncfusionCrm.Shared.csproj new file mode 100644 index 0000000..3c56617 --- /dev/null +++ b/BlazorSyncfusionCrm/Shared/BlazorSyncfusionCrm.Shared.csproj @@ -0,0 +1,12 @@ + + + + net7.0 + enable + enable + + + + + + diff --git a/BlazorSyncfusionCrm/Shared/Contact.cs b/BlazorSyncfusionCrm/Shared/Contact.cs new file mode 100644 index 0000000..38019e4 --- /dev/null +++ b/BlazorSyncfusionCrm/Shared/Contact.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace BlazorSyncfusionCrm.Shared +{ + public class Contact + { + public int Id { get; set; } + public string FirstName { get; set; } = string.Empty; + public string LastName { get; set; } = string.Empty; + public string NickName { get; set; } = string.Empty; + public string Place { get; set; } = string.Empty; + public bool IsDeleted { get; set; } + public DateTime? DateOfBirth { get; set; } + public DateTime DateCreated { get; set; } = DateTime.Now; + public DateTime DateUpdated { get; set; } + public DateTime DateDeleted { get; set; } + [JsonIgnore] + public List Notes { get; set; } = new List(); + + + } +} diff --git a/BlazorSyncfusionCrm/Shared/Note.cs b/BlazorSyncfusionCrm/Shared/Note.cs new file mode 100644 index 0000000..3b2cb9f --- /dev/null +++ b/BlazorSyncfusionCrm/Shared/Note.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BlazorSyncfusionCrm.Shared +{ + public class Note + { + public int Id { get; set; } + public required string Text { get; set; } + public int? ContactId { get; set; } + public Contact? Contact { get; set; } + public DateTime DateCreated { get; set;} = DateTime.Now; + } +} diff --git a/BlazorSyncfusionCrm/Shared/SharedClass.cs b/BlazorSyncfusionCrm/Shared/SharedClass.cs new file mode 100644 index 0000000..bb016a8 --- /dev/null +++ b/BlazorSyncfusionCrm/Shared/SharedClass.cs @@ -0,0 +1 @@ +/* Shared classes can be referenced by both the Client and Server */