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
+
+
+
+
+
+
+ @{
+ var contact = context as Contact;
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+@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 */