joparino 2 yıl önce
işleme
16a293a4bb
100 değiştirilmiş dosya ile 2605 ekleme ve 0 silme
  1. 13 0
      .idea/.idea.FirstSlice/.idea/.gitignore
  2. 13 0
      .idea/.idea.FirstSlice/.idea/avalonia.xml
  3. 12 0
      .idea/.idea.FirstSlice/.idea/dataSources.xml
  4. 4 0
      .idea/.idea.FirstSlice/.idea/encodings.xml
  5. 8 0
      .idea/.idea.FirstSlice/.idea/indexLayout.xml
  6. 6 0
      .idea/.idea.FirstSlice/.idea/vcs.xml
  7. 16 0
      FirstSlice.sln
  8. 4 0
      FirstSlice.sln.DotSettings.user
  9. 11 0
      FirstSlice/App.axaml
  10. 23 0
      FirstSlice/App.axaml.cs
  11. 33 0
      FirstSlice/FirstSlice.csproj
  12. 9 0
      FirstSlice/Helper.cs
  13. 57 0
      FirstSlice/MainWindow.axaml
  14. 76 0
      FirstSlice/MainWindow.axaml.cs
  15. 70 0
      FirstSlice/Models/FirstSliceContext.cs
  16. 13 0
      FirstSlice/Models/Role.cs
  17. 21 0
      FirstSlice/Models/User.cs
  18. 20 0
      FirstSlice/Program.cs
  19. 19 0
      FirstSlice/RoleWindow.axaml
  20. 52 0
      FirstSlice/RoleWindow.axaml.cs
  21. 36 0
      FirstSlice/UserWindow.axaml
  22. 77 0
      FirstSlice/UserWindow.axaml.cs
  23. 18 0
      FirstSlice/app.manifest
  24. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Animation.dll
  25. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Base.dll
  26. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Controls.DataGrid.dll
  27. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Controls.dll
  28. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.DesignerSupport.dll
  29. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Desktop.dll
  30. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.DesktopRuntime.dll
  31. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Diagnostics.dll
  32. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Dialogs.dll
  33. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.FreeDesktop.dll
  34. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Input.dll
  35. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Interactivity.dll
  36. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Layout.dll
  37. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Markup.Xaml.dll
  38. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Markup.dll
  39. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.MicroCom.dll
  40. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Native.dll
  41. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.OpenGL.dll
  42. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Remote.Protocol.dll
  43. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Skia.dll
  44. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Styling.dll
  45. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Themes.Default.dll
  46. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Themes.Fluent.dll
  47. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Visuals.dll
  48. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.Win32.dll
  49. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.X11.dll
  50. BIN
      FirstSlice/bin/Debug/net6.0/Avalonia.dll
  51. BIN
      FirstSlice/bin/Debug/net6.0/Azure.Core.dll
  52. BIN
      FirstSlice/bin/Debug/net6.0/Azure.Identity.dll
  53. 1981 0
      FirstSlice/bin/Debug/net6.0/FirstSlice.deps.json
  54. BIN
      FirstSlice/bin/Debug/net6.0/FirstSlice.dll
  55. BIN
      FirstSlice/bin/Debug/net6.0/FirstSlice.exe
  56. BIN
      FirstSlice/bin/Debug/net6.0/FirstSlice.pdb
  57. 13 0
      FirstSlice/bin/Debug/net6.0/FirstSlice.runtimeconfig.json
  58. BIN
      FirstSlice/bin/Debug/net6.0/HarfBuzzSharp.dll
  59. BIN
      FirstSlice/bin/Debug/net6.0/Humanizer.dll
  60. BIN
      FirstSlice/bin/Debug/net6.0/JetBrains.Annotations.dll
  61. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Bcl.AsyncInterfaces.dll
  62. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.CodeAnalysis.CSharp.Scripting.dll
  63. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.CodeAnalysis.CSharp.dll
  64. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.CodeAnalysis.Scripting.dll
  65. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.CodeAnalysis.dll
  66. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Data.SqlClient.dll
  67. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll
  68. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.EntityFrameworkCore.Design.dll
  69. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.EntityFrameworkCore.Relational.dll
  70. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.EntityFrameworkCore.SqlServer.dll
  71. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.EntityFrameworkCore.dll
  72. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.Caching.Abstractions.dll
  73. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.Caching.Memory.dll
  74. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.Configuration.Abstractions.dll
  75. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll
  76. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.DependencyInjection.dll
  77. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.DependencyModel.dll
  78. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.Logging.Abstractions.dll
  79. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.Logging.dll
  80. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.Options.dll
  81. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.Primitives.dll
  82. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Identity.Client.Extensions.Msal.dll
  83. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Identity.Client.dll
  84. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.IdentityModel.Abstractions.dll
  85. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.IdentityModel.JsonWebTokens.dll
  86. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.IdentityModel.Logging.dll
  87. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll
  88. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.IdentityModel.Protocols.dll
  89. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.IdentityModel.Tokens.dll
  90. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.SqlServer.Server.dll
  91. BIN
      FirstSlice/bin/Debug/net6.0/Microsoft.Win32.SystemEvents.dll
  92. BIN
      FirstSlice/bin/Debug/net6.0/Mono.TextTemplating.dll
  93. BIN
      FirstSlice/bin/Debug/net6.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll
  94. BIN
      FirstSlice/bin/Debug/net6.0/Npgsql.dll
  95. BIN
      FirstSlice/bin/Debug/net6.0/SkiaSharp.dll
  96. BIN
      FirstSlice/bin/Debug/net6.0/System.CodeDom.dll
  97. BIN
      FirstSlice/bin/Debug/net6.0/System.Configuration.ConfigurationManager.dll
  98. BIN
      FirstSlice/bin/Debug/net6.0/System.Drawing.Common.dll
  99. BIN
      FirstSlice/bin/Debug/net6.0/System.IdentityModel.Tokens.Jwt.dll
  100. 0 0
      FirstSlice/bin/Debug/net6.0/System.Memory.Data.dll

+ 13 - 0
.idea/.idea.FirstSlice/.idea/.gitignore

@@ -0,0 +1,13 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Rider ignored files
+/.idea.FirstSlice.iml
+/modules.xml
+/contentModel.xml
+/projectSettingsUpdater.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml

+ 13 - 0
.idea/.idea.FirstSlice/.idea/avalonia.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AvaloniaProject">
+    <option name="projectPerEditor">
+      <map>
+        <entry key="FirstSlice/App.axaml" value="FirstSlice/FirstSlice.csproj" />
+        <entry key="FirstSlice/MainWindow.axaml" value="FirstSlice/FirstSlice.csproj" />
+        <entry key="FirstSlice/RoleWindow.axaml" value="FirstSlice/FirstSlice.csproj" />
+        <entry key="FirstSlice/UserWindow.axaml" value="FirstSlice/FirstSlice.csproj" />
+      </map>
+    </option>
+  </component>
+</project>

+ 12 - 0
.idea/.idea.FirstSlice/.idea/dataSources.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="DataSourceManagerImpl" format="xml" multifile-model="true">
+    <data-source source="LOCAL" name="first_slice@localhost" uuid="54316cf7-b688-4523-a716-ec4164685483">
+      <driver-ref>postgresql</driver-ref>
+      <synchronize>true</synchronize>
+      <jdbc-driver>org.postgresql.Driver</jdbc-driver>
+      <jdbc-url>jdbc:postgresql://localhost:5432/first_slice</jdbc-url>
+      <working-dir>$ProjectFileDir$</working-dir>
+    </data-source>
+  </component>
+</project>

+ 4 - 0
.idea/.idea.FirstSlice/.idea/encodings.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
+</project>

+ 8 - 0
.idea/.idea.FirstSlice/.idea/indexLayout.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="UserContentModel">
+    <attachedFolders />
+    <explicitIncludes />
+    <explicitExcludes />
+  </component>
+</project>

+ 6 - 0
.idea/.idea.FirstSlice/.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 16 - 0
FirstSlice.sln

@@ -0,0 +1,16 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FirstSlice", "FirstSlice\FirstSlice.csproj", "{3EAA6F0C-E4B3-4B07-95AE-405D1426FAE2}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{3EAA6F0C-E4B3-4B07-95AE-405D1426FAE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3EAA6F0C-E4B3-4B07-95AE-405D1426FAE2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3EAA6F0C-E4B3-4B07-95AE-405D1426FAE2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3EAA6F0C-E4B3-4B07-95AE-405D1426FAE2}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+EndGlobal

+ 4 - 0
FirstSlice.sln.DotSettings.user

@@ -0,0 +1,4 @@
+<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
+	<s:String x:Key="/Default/CodeInspection/PencilsConfiguration/FiltersState/=SpellingFilter/@EntryIndexedValue">On</s:String>
+	<s:String x:Key="/Default/CodeInspection/PencilsConfiguration/FiltersState/=NamingFilter/@EntryIndexedValue">On</s:String>
+	<s:String x:Key="/Default/CodeInspection/PencilsConfiguration/FiltersState/=CodeStyle/@EntryIndexedValue">On</s:String></wpf:ResourceDictionary>

+ 11 - 0
FirstSlice/App.axaml

@@ -0,0 +1,11 @@
+<Application xmlns="https://github.com/avaloniaui"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             x:Class="FirstSlice.App">
+
+    <Application.Styles>
+        <StyleInclude Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml"/>
+        <StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseLight.xaml"/>
+        <StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Default.xaml"/>
+        <FluentTheme Mode="Light"/>
+    </Application.Styles>
+</Application>

+ 23 - 0
FirstSlice/App.axaml.cs

@@ -0,0 +1,23 @@
+using Avalonia;
+using Avalonia.Controls.ApplicationLifetimes;
+using Avalonia.Markup.Xaml;
+
+namespace FirstSlice;
+
+public partial class App : Application
+{
+    public override void Initialize()
+    {
+        AvaloniaXamlLoader.Load(this);
+    }
+
+    public override void OnFrameworkInitializationCompleted()
+    {
+        if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
+        {
+            desktop.MainWindow = new MainWindow();
+        }
+
+        base.OnFrameworkInitializationCompleted();
+    }
+}

+ 33 - 0
FirstSlice/FirstSlice.csproj

@@ -0,0 +1,33 @@
+<Project Sdk="Microsoft.NET.Sdk">
+    <PropertyGroup>
+        <OutputType>WinExe</OutputType>
+        <TargetFramework>net6.0</TargetFramework>
+        <Nullable>enable</Nullable>
+        <BuiltInComInteropSupport>true</BuiltInComInteropSupport>
+        <ApplicationManifest>app.manifest</ApplicationManifest>
+        <AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
+    </PropertyGroup>
+
+    <ItemGroup>
+        <TrimmerRootAssembly Include="Avalonia.Themes.Fluent" />
+    </ItemGroup>
+
+    <ItemGroup>
+        <PackageReference Include="Avalonia" Version="0.10.18" />
+        <PackageReference Include="Avalonia.Controls.DataGrid" Version="0.10.18" />
+        <PackageReference Include="Avalonia.Desktop" Version="0.10.18" />
+        <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
+        <PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="0.10.18" />
+        <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.0-preview.1.23111.4">
+          <PrivateAssets>all</PrivateAssets>
+          <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+        </PackageReference>
+        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0-preview.1.23111.4" />
+        <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.0-preview.1.23111.4">
+          <PrivateAssets>all</PrivateAssets>
+          <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+        </PackageReference>
+        <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0-preview.1" />
+        <PackageReference Include="XamlNameReferenceGenerator" Version="1.6.1" />
+    </ItemGroup>
+</Project>

+ 9 - 0
FirstSlice/Helper.cs

@@ -0,0 +1,9 @@
+using FirstSlice.Models;
+
+namespace FirstSlice;
+
+public class Helper
+{
+    private static Models.FirstSliceContext db;
+    public static Models.FirstSliceContext GetContext() => db ??= new FirstSliceContext();
+}

+ 57 - 0
FirstSlice/MainWindow.axaml

@@ -0,0 +1,57 @@
+<Window xmlns="https://github.com/avaloniaui"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
+        x:Class="FirstSlice.MainWindow"
+        WindowStartupLocation="CenterScreen"
+        Title="FirstSlice">
+        
+        <TabControl>
+                <TabItem Header="Пользователи">
+                        <Grid>
+                                <Grid.RowDefinitions>
+                                        <RowDefinition></RowDefinition>
+                                        <RowDefinition Height="5*"></RowDefinition>
+                                </Grid.RowDefinitions>
+                                
+                                <StackPanel Orientation="Horizontal">
+                                        <Button Name="AddUser" Click="OnAddUserClick" Content="Добавить пользователя" VerticalAlignment="Center" Margin="10"></Button>
+                                        <Button Name="DeleteUser" Click="OnDeleteUserClick" Content="Удалить пользователя" VerticalAlignment="Center" Margin="10"></Button>
+                                </StackPanel>
+                                
+                                <DataGrid Grid.Row="1" Name="UserTable" DoubleTapped="OnUserTableDoubleTapped">
+                                        <DataGrid.Columns>
+                                                <DataGridTextColumn Header="ФИО" Binding="{Binding Fullname}"/>
+                                                <DataGridTextColumn Header="Дата рождения" Binding="{Binding Birthday}"/>
+                                                <DataGridTextColumn Header="Номер телефона" Binding="{Binding Phonenumber}"/>
+                                                <DataGridTextColumn Header="Адрес" Binding="{Binding Address}"/>
+                                                <DataGridTextColumn Header="Роль" Binding="{Binding FkRole.Name}"/>
+                                        </DataGrid.Columns>
+                                </DataGrid>
+                        </Grid>
+                </TabItem>
+                
+                
+                <TabItem Header="Роль">
+                        <Grid>
+                                <Grid.RowDefinitions>
+                                        <RowDefinition></RowDefinition>
+                                        <RowDefinition Height="5*"></RowDefinition>
+                                </Grid.RowDefinitions>
+                                
+                                <StackPanel Orientation="Horizontal">
+                                        <Button Name="AddRole" Content="Добавить роль" Click="OnAddRoleClick" VerticalAlignment="Center" Margin="10"></Button>
+                                        <Button Name="DeleteRole" Content="Удалить роль" Click="OnDeleteRoleClick" VerticalAlignment="Center" Margin="10"></Button>
+                                </StackPanel>
+                                
+                                <DataGrid Grid.Row="1" Name="RoleTable" DoubleTapped="OnRoleTableDoubleTapped">
+                                        <DataGrid.Columns>
+                                                <DataGridTextColumn Header="Роль" Binding="{Binding Name}"/>
+                                        </DataGrid.Columns>
+                                </DataGrid>
+                        </Grid>
+                </TabItem>
+        </TabControl>
+        
+</Window>

+ 76 - 0
FirstSlice/MainWindow.axaml.cs

@@ -0,0 +1,76 @@
+using System.Linq;
+using Avalonia.Controls;
+using Avalonia.Interactivity;
+using FirstSlice.Models;
+using Microsoft.EntityFrameworkCore;
+
+namespace FirstSlice;
+
+public partial class MainWindow : Window
+{
+    public MainWindow()
+    {
+        InitializeComponent();
+
+        RoleTable.Items = Helper.GetContext().Roles.ToList();
+        UserTable.Items = Helper.GetContext().Users.Include(x => x.FkRole).ToList();
+    }
+
+    private async void OnAddUserClick(object? sender, RoutedEventArgs e)
+    {
+        var userWindow = new UserWindow();
+        await userWindow.ShowDialog(this);
+        
+        UserTable.Items = Helper.GetContext().Users.Include(x => x.FkRole).ToList();
+    }
+
+    private void OnDeleteUserClick(object? sender, RoutedEventArgs e)
+    {
+        var user = UserTable.SelectedItem as User;
+
+        Helper.GetContext().Users.Remove(user);
+        Helper.GetContext().SaveChanges();
+        
+        UserTable.Items = Helper.GetContext().Users.Include(x => x.FkRole).ToList();
+    }
+    
+    private async void OnUserTableDoubleTapped(object? sender, RoutedEventArgs e)
+    {
+        DataGrid grid = sender as DataGrid;
+        var user = grid.SelectedItem as User;
+        
+        var userWindow = new UserWindow(user);
+        await userWindow.ShowDialog(this);
+        
+        UserTable.Items = Helper.GetContext().Users.Include(x => x.FkRole).ToList();
+    }
+
+    private async void OnAddRoleClick(object? sender, RoutedEventArgs e)
+    {
+        var role = new RoleWindow();
+        await role.ShowDialog(this);
+        
+        RoleTable.Items = Helper.GetContext().Roles.ToList();
+    }
+
+    private void OnDeleteRoleClick(object? sender, RoutedEventArgs e)
+    {
+        var role = RoleTable.SelectedItem as Role;
+
+        Helper.GetContext().Roles.Remove(role);
+        Helper.GetContext().SaveChanges();
+        
+        RoleTable.Items = Helper.GetContext().Roles.ToList();
+    }
+
+    private async void OnRoleTableDoubleTapped(object? sender, RoutedEventArgs e)
+    {
+        DataGrid grid = sender as DataGrid;
+        var role = grid.SelectedItem as Role;
+        
+        var roleWindow = new RoleWindow(role);
+        await roleWindow.ShowDialog(this);
+        
+        RoleTable.Items = Helper.GetContext().Roles.ToList();
+    }
+}

+ 70 - 0
FirstSlice/Models/FirstSliceContext.cs

@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.EntityFrameworkCore;
+
+namespace FirstSlice.Models;
+
+public partial class FirstSliceContext : DbContext
+{
+    public FirstSliceContext()
+    {
+    }
+
+    public FirstSliceContext(DbContextOptions<FirstSliceContext> options)
+        : base(options)
+    {
+    }
+
+    public virtual DbSet<Role> Roles { get; set; }
+
+    public virtual DbSet<User> Users { get; set; }
+
+    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263.
+        => optionsBuilder.UseNpgsql("Host=localhost;Port=5432;Database=first_slice;Username=postgres;Password=futynvfrcbv2002");
+
+    protected override void OnModelCreating(ModelBuilder modelBuilder)
+    {
+        modelBuilder.Entity<Role>(entity =>
+        {
+            entity.HasKey(e => e.Id).HasName("roles_pkey");
+
+            entity.ToTable("roles");
+
+            entity.Property(e => e.Id).HasColumnName("id");
+            entity.Property(e => e.Name)
+                .HasMaxLength(255)
+                .HasColumnName("name");
+        });
+
+        modelBuilder.Entity<User>(entity =>
+        {
+            entity.HasKey(e => e.Id).HasName("users_pkey");
+
+            entity.ToTable("users");
+
+            entity.Property(e => e.Id).HasColumnName("id");
+            entity.Property(e => e.Address)
+                .HasMaxLength(255)
+                .HasColumnName("address");
+            entity.Property(e => e.Birthday)
+                .HasMaxLength(255)
+                .HasColumnName("birthday");
+            entity.Property(e => e.FkRoleId).HasColumnName("fk_role_id");
+            entity.Property(e => e.Fullname)
+                .HasMaxLength(255)
+                .HasColumnName("fullname");
+            entity.Property(e => e.Phonenumber)
+                .HasMaxLength(11)
+                .HasColumnName("phonenumber");
+
+            entity.HasOne(d => d.FkRole).WithMany(p => p.Users)
+                .HasForeignKey(d => d.FkRoleId)
+                .HasConstraintName("users_fk_role_id_fkey");
+        });
+
+        OnModelCreatingPartial(modelBuilder);
+    }
+
+    partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
+}

+ 13 - 0
FirstSlice/Models/Role.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+
+namespace FirstSlice.Models;
+
+public partial class Role
+{
+    public int Id { get; set; }
+
+    public string? Name { get; set; }
+
+    public virtual ICollection<User> Users { get; } = new List<User>();
+}

+ 21 - 0
FirstSlice/Models/User.cs

@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+
+namespace FirstSlice.Models;
+
+public partial class User
+{
+    public int Id { get; set; }
+
+    public int? FkRoleId { get; set; }
+
+    public string? Fullname { get; set; }
+
+    public string? Birthday { get; set; }
+
+    public string? Phonenumber { get; set; }
+
+    public string? Address { get; set; }
+
+    public virtual Role? FkRole { get; set; }
+}

+ 20 - 0
FirstSlice/Program.cs

@@ -0,0 +1,20 @@
+using Avalonia;
+using System;
+
+namespace FirstSlice;
+
+class Program
+{
+    // Initialization code. Don't use any Avalonia, third-party APIs or any
+    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized
+    // yet and stuff might break.
+    [STAThread]
+    public static void Main(string[] args) => BuildAvaloniaApp()
+        .StartWithClassicDesktopLifetime(args);
+
+    // Avalonia configuration, don't remove; also used by visual designer.
+    public static AppBuilder BuildAvaloniaApp()
+        => AppBuilder.Configure<App>()
+            .UsePlatformDetect()
+            .LogToTrace();
+}

+ 19 - 0
FirstSlice/RoleWindow.axaml

@@ -0,0 +1,19 @@
+<Window xmlns="https://github.com/avaloniaui"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" Height="150" Width="150"
+        x:Class="FirstSlice.RoleWindow"
+        WindowStartupLocation="CenterOwner"
+        Title="RoleWindow">
+        
+        <Grid>
+                <Grid.RowDefinitions>
+                        <RowDefinition></RowDefinition>
+                        <RowDefinition></RowDefinition>
+                </Grid.RowDefinitions>
+                
+                <TextBox Grid.Row="0" Name="TextRole" Watermark="Роль" VerticalAlignment="Center" Margin="10"/>
+                <Button Grid.Row="1" Name="SaveRole" Content="Сохранить роль" Click="OnSaveRoleClick" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="10"></Button>
+        </Grid>
+</Window>

+ 52 - 0
FirstSlice/RoleWindow.axaml.cs

@@ -0,0 +1,52 @@
+using System;
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Interactivity;
+using Avalonia.Markup.Xaml;
+using FirstSlice.Models;
+
+namespace FirstSlice;
+
+public partial class RoleWindow : Window
+{
+    private Role role_ = null;
+    
+    public RoleWindow()
+    {
+        InitializeComponent();
+    }
+    
+    public RoleWindow(Role role)
+    {
+        InitializeComponent();
+
+        role_ = role;
+        TextRole.Text = role_.Name;
+    }
+
+    private void OnSaveRoleClick(object? sender, RoutedEventArgs e)
+    {
+        if (String.IsNullOrWhiteSpace(TextRole.Text))
+        {
+            return;
+        }
+        
+        if (role_ != null)
+        {
+            role_.Name = TextRole.Text;
+
+            Helper.GetContext().Update(role_);
+            Helper.GetContext().SaveChanges();
+            this.Close();
+        }
+        else
+        {
+            var newRole = new Role();
+            newRole.Name = TextRole.Text;
+
+            Helper.GetContext().Add(newRole);
+            Helper.GetContext().SaveChanges();
+            this.Close();
+        }
+    }
+}

+ 36 - 0
FirstSlice/UserWindow.axaml

@@ -0,0 +1,36 @@
+<Window xmlns="https://github.com/avaloniaui"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" Height="300" Width="300"
+        x:Class="FirstSlice.UserWindow"
+        WindowStartupLocation="CenterOwner"
+        Title="UserWindow">
+        
+        <Grid>
+                <Grid.RowDefinitions>
+                        <RowDefinition></RowDefinition>
+                        <RowDefinition></RowDefinition>
+                        <RowDefinition></RowDefinition>
+                        <RowDefinition></RowDefinition>
+                        <RowDefinition></RowDefinition>
+                        <RowDefinition></RowDefinition>
+                </Grid.RowDefinitions>
+                
+                <TextBox Grid.Row="0" Name="TextFullName" Watermark="ФИО" VerticalAlignment="Center" Margin="10"/>
+                <TextBox Grid.Row="1" Name="TextBirthday" MaxLength="10" Watermark="Дата рождения" VerticalAlignment="Center" Margin="10"/>
+                <TextBox Grid.Row="2" Name="TextPhoneNumber" MaxLength="11" Watermark="Номер телефона" VerticalAlignment="Center" Margin="10"/>
+                <TextBox Grid.Row="3" Name="TextAddress" Watermark="Адрес" VerticalAlignment="Center" Margin="10"/>
+
+                <ComboBox Grid.Row="4" Name="ComboRole" PlaceholderText="Роль" VerticalAlignment="Center" Margin="10">
+                        <ComboBox.ItemTemplate>
+                                <DataTemplate>
+                                        <TextBlock Text="{Binding Name}"></TextBlock>
+                                </DataTemplate>
+                        </ComboBox.ItemTemplate>
+                </ComboBox>
+                
+                <Button Grid.Row="5" Name="SaveUser" Content="Сохранить пользователя" Click="OnSaveUserClick" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="10"></Button>
+        </Grid>
+        
+</Window>

+ 77 - 0
FirstSlice/UserWindow.axaml.cs

@@ -0,0 +1,77 @@
+using System;
+using System.Linq;
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Interactivity;
+using Avalonia.Markup.Xaml;
+using FirstSlice.Models;
+
+namespace FirstSlice;
+
+public partial class UserWindow : Window
+{
+    private User user_ = null;    
+    
+    public UserWindow()
+    {
+        InitializeComponent();
+
+        ComboRole.Items = Helper.GetContext().Roles.ToList();
+    }
+    
+    public UserWindow(User user)
+    {
+        InitializeComponent();
+
+        user_ = user;
+        TextFullName.Text = user_.Fullname;
+        TextBirthday.Text = user_.Birthday;
+        TextAddress.Text = user_.Address;
+        TextPhoneNumber.Text = user_.Phonenumber;
+        ComboRole.Items = Helper.GetContext().Roles.ToList();
+        ComboRole.SelectedItem = user_.FkRole;
+    }
+
+    private void OnSaveUserClick(object? sender, RoutedEventArgs e)
+    {
+        if (String.IsNullOrWhiteSpace(TextFullName.Text)    || 
+            String.IsNullOrWhiteSpace(TextAddress.Text)     || 
+            String.IsNullOrWhiteSpace(TextBirthday.Text)    || 
+            String.IsNullOrWhiteSpace(TextPhoneNumber.Text) || 
+            ComboRole.SelectedItem == null)
+        {
+            return;
+        }
+        
+        if (user_ != null)
+        {
+            var role = ComboRole.SelectedItem as Role;
+            user_.Fullname = TextFullName.Text;
+            user_.Address = TextAddress.Text;
+            user_.Birthday = TextBirthday.Text;
+            user_.Phonenumber = TextPhoneNumber.Text;
+            user_.FkRole = role;
+            user_.FkRoleId = role.Id;
+
+            Helper.GetContext().Update(user_);
+            Helper.GetContext().SaveChanges();
+            this.Close();
+        }
+        else
+        {
+            var newUser = new User();
+            var role = ComboRole.SelectedItem as Role;
+            newUser.Fullname = TextFullName.Text;
+            newUser.Address = TextAddress.Text;
+            newUser.Birthday = TextBirthday.Text;
+            newUser.Phonenumber = TextPhoneNumber.Text;
+            newUser.FkRole = role;
+            newUser.FkRoleId = role.Id;
+            
+            Helper.GetContext().Add(newUser);
+            Helper.GetContext().SaveChanges();
+            this.Close();
+        }
+        
+    }
+}

+ 18 - 0
FirstSlice/app.manifest

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
+  <!-- This manifest is used on Windows only.
+       Don't remove it as it might cause problems with window transparency and embeded controls.
+       For more details visit https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests -->
+  <assemblyIdentity version="1.0.0.0" name="AvaloniaTest.Desktop"/>
+
+  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+    <application>
+      <!-- A list of the Windows versions that this application has been tested on
+           and is designed to work with. Uncomment the appropriate elements
+           and Windows will automatically select the most compatible environment. -->
+
+      <!-- Windows 10 -->
+      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
+    </application>
+  </compatibility>
+</assembly>

BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Animation.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Base.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Controls.DataGrid.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Controls.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.DesignerSupport.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Desktop.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.DesktopRuntime.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Diagnostics.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Dialogs.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.FreeDesktop.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Input.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Interactivity.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Layout.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Markup.Xaml.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Markup.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.MicroCom.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Native.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.OpenGL.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Remote.Protocol.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Skia.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Styling.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Themes.Default.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Themes.Fluent.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Visuals.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.Win32.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.X11.dll


BIN
FirstSlice/bin/Debug/net6.0/Avalonia.dll


BIN
FirstSlice/bin/Debug/net6.0/Azure.Core.dll


BIN
FirstSlice/bin/Debug/net6.0/Azure.Identity.dll


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1981 - 0
FirstSlice/bin/Debug/net6.0/FirstSlice.deps.json


BIN
FirstSlice/bin/Debug/net6.0/FirstSlice.dll


BIN
FirstSlice/bin/Debug/net6.0/FirstSlice.exe


BIN
FirstSlice/bin/Debug/net6.0/FirstSlice.pdb


+ 13 - 0
FirstSlice/bin/Debug/net6.0/FirstSlice.runtimeconfig.json

@@ -0,0 +1,13 @@
+{
+  "runtimeOptions": {
+    "tfm": "net6.0",
+    "framework": {
+      "name": "Microsoft.NETCore.App",
+      "version": "6.0.0"
+    },
+    "configProperties": {
+      "System.Reflection.NullabilityInfoContext.IsSupported": true,
+      "System.Runtime.InteropServices.BuiltInComInterop.IsSupported": true
+    }
+  }
+}

BIN
FirstSlice/bin/Debug/net6.0/HarfBuzzSharp.dll


BIN
FirstSlice/bin/Debug/net6.0/Humanizer.dll


BIN
FirstSlice/bin/Debug/net6.0/JetBrains.Annotations.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Bcl.AsyncInterfaces.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.CodeAnalysis.CSharp.Scripting.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.CodeAnalysis.CSharp.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.CodeAnalysis.Scripting.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.CodeAnalysis.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Data.SqlClient.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.EntityFrameworkCore.Design.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.EntityFrameworkCore.Relational.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.EntityFrameworkCore.SqlServer.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.EntityFrameworkCore.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.Caching.Abstractions.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.Caching.Memory.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.Configuration.Abstractions.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.DependencyInjection.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.DependencyModel.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.Logging.Abstractions.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.Logging.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.Options.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Extensions.Primitives.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Identity.Client.Extensions.Msal.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Identity.Client.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.IdentityModel.Abstractions.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.IdentityModel.JsonWebTokens.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.IdentityModel.Logging.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.IdentityModel.Protocols.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.IdentityModel.Tokens.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.SqlServer.Server.dll


BIN
FirstSlice/bin/Debug/net6.0/Microsoft.Win32.SystemEvents.dll


BIN
FirstSlice/bin/Debug/net6.0/Mono.TextTemplating.dll


BIN
FirstSlice/bin/Debug/net6.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll


BIN
FirstSlice/bin/Debug/net6.0/Npgsql.dll


BIN
FirstSlice/bin/Debug/net6.0/SkiaSharp.dll


BIN
FirstSlice/bin/Debug/net6.0/System.CodeDom.dll


BIN
FirstSlice/bin/Debug/net6.0/System.Configuration.ConfigurationManager.dll


BIN
FirstSlice/bin/Debug/net6.0/System.Drawing.Common.dll


BIN
FirstSlice/bin/Debug/net6.0/System.IdentityModel.Tokens.Jwt.dll


+ 0 - 0
FirstSlice/bin/Debug/net6.0/System.Memory.Data.dll


Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor