Add project files.

This commit is contained in:
2023-04-17 11:01:23 +02:00
parent 7a71f95529
commit 0234db870b
25 changed files with 987 additions and 0 deletions

37
BlazorSyncfusionCrm.sln Normal file
View File

@ -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

View File

@ -0,0 +1,12 @@
<Router AppAssembly="@typeof(App).Assembly">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
<FocusOnNavigate RouteData="@routeData" Selector="h1" />
</Found>
<NotFound>
<PageTitle>Not found</PageTitle>
<LayoutView Layout="@typeof(MainLayout)">
<p role="alert">Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>

View File

@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.5" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.5" PrivateAssets="all" />
<PackageReference Include="Microsoft.Extensions.Http" Version="7.0.0" />
<PackageReference Include="Syncfusion.Blazor" Version="21.1.39" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Shared\BlazorSyncfusionCrm.Shared.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,7 @@
@inherits LayoutComponentBase
<NavBar />
<main>
@Body
</main>

View File

@ -0,0 +1,65 @@
@page "/contacts"
@inject NavigationManager NavigationManager
<h3>Contacts</h3>
<SfGrid DataSource="GridData" AllowFiltering="true" Toolbar="@(new List<string>() {"Search"})">
<GridFilterSettings Type="Syncfusion.Blazor.Grids.FilterType.CheckBox"></GridFilterSettings>
<GridColumns>
<GridColumn Width="60">
<Template>
@{
var contact = context as Contact;
<SfButton CssClass="e-inherit" IconCss="e-icons e-edit"
OnClick="@(() => EditContact(contact!.Id))"></SfButton>
}
</Template>
</GridColumn>
<GridColumn Field="FirstName" HeaderText="First Name"></GridColumn>
<GridColumn Field="LastName" HeaderText="Last Name"></GridColumn>
<GridColumn Field="NickName" HeaderText="Nick Name"></GridColumn>
<GridColumn Field="Place" HeaderText="Place"></GridColumn>
<GridColumn Field="DateOfBirth" HeaderText="Date Of Birth" Format="yyyy-MM-dd"></GridColumn>
</GridColumns>
</SfGrid>
@code {
public List<Contact> GridData { get; set; } = new List<Contact>
{
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}");
}
}

View File

@ -0,0 +1,3 @@
@page "/"
<h1>Wellcome to Blazing CRM!</h1>

View File

@ -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>("#app");
builder.RootComponents.Add<HeadOutlet>("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<IHttpClientFactory>().CreateClient("BlazorSyncfusionCrm.ServerAPI"));
builder.Services.AddSyncfusionBlazor();
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("MTcyMTQ0NkAzMjMxMmUzMTJlMzMzNVNvVmlFLy9zUk5TTTlURGZIeTRCelpRR2FTQ1NXTXRrSGpNcVJKMzRES1E9");
await builder.Build().RunAsync();

View File

@ -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"
}
}
}
}

View File

@ -0,0 +1,22 @@
@inject NavigationManager NavigationManager
<SfAppBar ColorMode="AppBarColor.Primary">
<SfButton CssClass="e-inherit" IconCss="e-icons e-home" Content="Home"
OnClick="@(()=> NavigateToPage("/"))" />
<SfButton CssClass="e-inherit" IconCss="e-icons e-user" Content="Contacts"
OnClick="@(()=> NavigateToPage("/contacts"))" />
<SfButton CssClass="e-inherit" IconCss="e-icons e-location" Content="Map"
OnClick="@(()=> NavigateToPage("/map"))" />
<SfButton CssClass="e-inherit" IconCss="e-icons e-notes" Content="Notes"
OnClick="@(()=> NavigateToPage("/notes"))" />
<AppBarSpacer></AppBarSpacer>
<SfButton CssClass="e-inherit" IconCss="e-icons e-plus" Content="New Contact" />
</SfAppBar>
@code {
void NavigateToPage(string page)
{
NavigationManager.NavigateTo(page);
}
}

View File

@ -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

View File

@ -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."
}

View File

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>BlazorSyncfusionCrm</title>
<base href="/" />
<link href="css/app.css" rel="stylesheet" />
<link href="_content/Syncfusion.Blazor/styles/bootstrap5.css" rel="stylesheet" />
<!-- If you add any scoped CSS files, uncomment the following to load them
<link href="BlazorSyncfusionCrm.Client.styles.css" rel="stylesheet" /> -->
</head>
<body>
<div id="app">Loading...</div>
<div id="blazor-error-ui">
An unhandled error has occurred.
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
</div>
<script src="_framework/blazor.webassembly.js"></script>
<script src="_content/Syncfusion.Blazor/scripts/syncfusion-blazor.min.js" type="text/javascript"></script>
</body>
</html>

View File

@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="7.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.0-preview.3.23174.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.0-preview.3.23174.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0-preview.3.23174.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Client\BlazorSyncfusionCrm.Client.csproj" />
<ProjectReference Include="..\Shared\BlazorSyncfusionCrm.Shared.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,64 @@
using BlazorSyncfusionCrm.Shared;
using Microsoft.EntityFrameworkCore;
namespace BlazorSyncfusionCrm.Server.Data
{
public class DataContext : DbContext
{
public DataContext(DbContextOptions<DataContext> 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<Contact>().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<Note>().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<Contact> Contacts { get; set; }
public DbSet<Note> Notes { get; set; }
}
}

View File

@ -0,0 +1,177 @@
// <auto-generated />
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
{
/// <inheritdoc />
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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<DateTime>("DateCreated")
.HasColumnType("datetime2");
b.Property<DateTime>("DateDeleted")
.HasColumnType("datetime2");
b.Property<DateTime?>("DateOfBirth")
.HasColumnType("datetime2");
b.Property<DateTime>("DateUpdated")
.HasColumnType("datetime2");
b.Property<string>("FirstName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<bool>("IsDeleted")
.HasColumnType("bit");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("NickName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int?>("ContactId")
.HasColumnType("int");
b.Property<DateTime>("DateCreated")
.HasColumnType("datetime2");
b.Property<string>("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
}
}
}

View File

@ -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
{
/// <inheritdoc />
public partial class Initial : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Contacts",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
FirstName = table.Column<string>(type: "nvarchar(max)", nullable: false),
LastName = table.Column<string>(type: "nvarchar(max)", nullable: false),
NickName = table.Column<string>(type: "nvarchar(max)", nullable: false),
Place = table.Column<string>(type: "nvarchar(max)", nullable: false),
IsDeleted = table.Column<bool>(type: "bit", nullable: false),
DateOfBirth = table.Column<DateTime>(type: "datetime2", nullable: true),
DateCreated = table.Column<DateTime>(type: "datetime2", nullable: false),
DateUpdated = table.Column<DateTime>(type: "datetime2", nullable: false),
DateDeleted = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Contacts", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Notes",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Text = table.Column<string>(type: "nvarchar(max)", nullable: false),
ContactId = table.Column<int>(type: "int", nullable: true),
DateCreated = table.Column<DateTime>(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");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Notes");
migrationBuilder.DropTable(
name: "Contacts");
}
}
}

View File

@ -0,0 +1,174 @@
// <auto-generated />
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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<DateTime>("DateCreated")
.HasColumnType("datetime2");
b.Property<DateTime>("DateDeleted")
.HasColumnType("datetime2");
b.Property<DateTime?>("DateOfBirth")
.HasColumnType("datetime2");
b.Property<DateTime>("DateUpdated")
.HasColumnType("datetime2");
b.Property<string>("FirstName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<bool>("IsDeleted")
.HasColumnType("bit");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("NickName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int?>("ContactId")
.HasColumnType("int");
b.Property<DateTime>("DateCreated")
.HasColumnType("datetime2");
b.Property<string>("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
}
}
}

View File

@ -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<DataContext>();
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();

View File

@ -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
}
}
}

View File

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<SupportedPlatform Include="browser" />
</ItemGroup>
</Project>

View File

@ -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<Note> Notes { get; set; } = new List<Note>();
}
}

View File

@ -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;
}
}

View File

@ -0,0 +1 @@
/* Shared classes can be referenced by both the Client and Server */