diff --git a/Policlinica/App.axaml.cs b/Policlinica/App.axaml.cs index a21fc3a..ed8e7db 100644 --- a/Policlinica/App.axaml.cs +++ b/Policlinica/App.axaml.cs @@ -14,6 +14,11 @@ public partial class App : Application { private readonly IServiceProvider _serviceProvider; + public App( ) + { + + } + public App(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; @@ -32,8 +37,9 @@ public partial class App : Application DisableAvaloniaDataAnnotationValidation(); - var vm = _serviceProvider.GetRequiredService(); - var win = _serviceProvider.GetRequiredService(); + var vm = _serviceProvider.GetRequiredService(); + var win = _serviceProvider.GetRequiredService(); + vm.SetClose(win.Close); win.DataContext = vm; desktop.MainWindow = win; } diff --git a/Policlinica/DB/DoctorRepository.cs b/Policlinica/DB/DoctorRepository.cs index 7abcbce..6bc58c1 100644 --- a/Policlinica/DB/DoctorRepository.cs +++ b/Policlinica/DB/DoctorRepository.cs @@ -5,14 +5,13 @@ using MySqlConnector; namespace Policlinica.DB; -public class DoctorRepository +public class DoctorRepository:BaseRep { - MySqlConnection connection; - - public DoctorRepository(IOptions connect) + public DoctorRepository(IOptions dataBaseConnection) : base(dataBaseConnection) { - connection = new MySqlConnection(connect.Value.ConnectionString); + OpenConnection(); } + public List GetDoctorsByTest() { List result = new List(); @@ -48,6 +47,12 @@ public class DoctorRepository return result; } + + public void Dispose() + { + base.Dispose(); + CloseConnection(); + } } diff --git a/Policlinica/DB/UserRepository.cs b/Policlinica/DB/UserRepository.cs index 7972b5a..2f3395c 100644 --- a/Policlinica/DB/UserRepository.cs +++ b/Policlinica/DB/UserRepository.cs @@ -1,25 +1,36 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; using Microsoft.Extensions.Options; using MySqlConnector; namespace Policlinica.DB; -public class UserRepository +public class UserRepository:BaseRep { - MySqlConnection connection; - - public UserRepository(IOptions connect) + public UserRepository(IOptions dataBaseConnection) : base(dataBaseConnection) { - connection = new MySqlConnection(connect.Value.ConnectionString); + OpenConnection(); } - - public void InsertUser(User user) + public void AddUser(User user) { - var sql1 = "INSERT INTO Polyclinica.users (id, name, password) VALUES (0, @name, @password); "; - var sql2 = "SELECT max(id) as id FROM Polyclinica.users;"; - + string sql = @"insert into `users`values(0,@name,@password)"; + try + { + using (var mc = new MySqlCommand(sql, connection)) + { + mc.Parameters.AddWithValue("id", user.Id); + mc.Parameters.AddWithValue("name", user.Name ); + mc.Parameters.AddWithValue("password", user.Password); + mc.ExecuteNonQuery(); + } + } + catch (Exception e) + { + Console.WriteLine(e); + + } } @@ -44,8 +55,7 @@ public class UserRepository }); } } - - connection.Close(); + } catch (MySqlException ex) { @@ -90,4 +100,12 @@ public class UserRepository return us; } + + public void Dispose() + { + base.Dispose(); + CloseConnection(); + } + + } \ No newline at end of file diff --git a/Policlinica/Models/Record.cs b/Policlinica/Models/Record.cs index 0b6ba92..0f48705 100644 --- a/Policlinica/Models/Record.cs +++ b/Policlinica/Models/Record.cs @@ -17,4 +17,5 @@ public class Record public decimal TotalAmount { get; set; } public DateTime RecordDate { get; set; } + } \ No newline at end of file diff --git a/Policlinica/Program.cs b/Policlinica/Program.cs index 27a3146..016c937 100644 --- a/Policlinica/Program.cs +++ b/Policlinica/Program.cs @@ -28,14 +28,26 @@ sealed class Program s.Configure(c.Configuration. GetSection("DatabaseConnection")); //окна - s.AddTransient(); - s.AddTransient(); + s.AddTransient(); + s.AddTransient(); + s.AddTransient(); s.AddTransient(); //Репозитории s.AddTransient(); s.AddTransient(); + + s.AddTransient(); + s.AddTransient(); + + s.AddTransient(); + s.AddTransient(); + + s.AddSingleton(); + + s.AddTransient(); + s.AddTransient(); }). Build(); BuildAvaloniaApp(host.Services) diff --git a/Policlinica/ViewModels/PasswordWindowViewModel.cs b/Policlinica/ViewModels/AutorizationViewModel.cs similarity index 63% rename from Policlinica/ViewModels/PasswordWindowViewModel.cs rename to Policlinica/ViewModels/AutorizationViewModel.cs index 0f7e046..8f3346c 100644 --- a/Policlinica/ViewModels/PasswordWindowViewModel.cs +++ b/Policlinica/ViewModels/AutorizationViewModel.cs @@ -8,18 +8,21 @@ using Policlinica.Views; namespace Policlinica.ViewModels; -public partial class PasswordWindowViewModel : ViewModelBase +public partial class AutorizationViewModel : ViewModelBase { - private readonly IServiceProvider _serviceProvider; private readonly IServiceProvider _provider; - [ObservableProperty] string username; - [ObservableProperty] string password; + private readonly Navigation _navigation; + + [ObservableProperty] string _username; + [ObservableProperty] string _password; [ObservableProperty] List _usersList; [ObservableProperty] UserRepository _repository; - public PasswordWindowViewModel(IServiceProvider provider, UserRepository repository ) + public AutorizationViewModel(IServiceProvider provider, UserRepository repository,Navigation navigation ) { _provider = provider; + _navigation = navigation; + _usersList = repository.GetUsersByTest(); // _repository = repository; } @@ -47,13 +50,21 @@ public partial class PasswordWindowViewModel : ViewModelBase Password = Password }; // if(Users user ) - _repository.CheckLoginAndPassword(name,password); - var vm = _serviceProvider.GetRequiredService(); - var win = _serviceProvider.GetRequiredService(); + _repository.CheckLoginAndPassword(Username,Password); + var vm = _provider.GetRequiredService(); + var win = _provider.GetRequiredService(); //vm.SetClose(win.Close); win.DataContext = vm; win.Show(); //close(); } + + [RelayCommand] + void OpenRegWin() + { + var vm = _provider.GetRequiredService(); + _navigation.Navigate(vm); + + } } \ No newline at end of file diff --git a/Policlinica/ViewModels/Navigation.cs b/Policlinica/ViewModels/Navigation.cs new file mode 100644 index 0000000..9fd69ad --- /dev/null +++ b/Policlinica/ViewModels/Navigation.cs @@ -0,0 +1,21 @@ +namespace Policlinica.ViewModels; + +public class Navigation +{ + private StartViewModel startViewModel; + + public void Navigate(ViewModelBase viewModel) + { + startViewModel.CurrentPage = viewModel; + } + + public void SetCurrentView(StartViewModel startViewModel) + { + this.startViewModel = startViewModel; + } + + public void Close() + { + this.startViewModel.Close(); + } +} \ No newline at end of file diff --git a/Policlinica/ViewModels/RecordViewModel.cs b/Policlinica/ViewModels/RecordViewModel.cs new file mode 100644 index 0000000..196ee22 --- /dev/null +++ b/Policlinica/ViewModels/RecordViewModel.cs @@ -0,0 +1,13 @@ +using System; + +namespace Policlinica.ViewModels; + +public partial class RecordViewModel:ViewModelBase +{ + private readonly IServiceProvider _serviceProvider; + + public RecordViewModel(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } +} \ No newline at end of file diff --git a/Policlinica/ViewModels/RegistrationViewModel.cs b/Policlinica/ViewModels/RegistrationViewModel.cs new file mode 100644 index 0000000..bb9fc2c --- /dev/null +++ b/Policlinica/ViewModels/RegistrationViewModel.cs @@ -0,0 +1,55 @@ +using System; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using Microsoft.Extensions.DependencyInjection; +using Policlinica.DB; +using Policlinica.Views; + +namespace Policlinica.ViewModels; + +public partial class RegistrationViewModel:ViewModelBase +{ + private readonly IServiceProvider _serviceProvider; + private readonly Navigation _navigation; + + [ObservableProperty] private string _password; + [ObservableProperty] private string _login; + + public RegistrationViewModel(IServiceProvider serviceProvider, Navigation navigation) + { + _serviceProvider = serviceProvider; + _navigation = navigation; + } + + [RelayCommand] + void OpenAutorization() + { + var vm = _serviceProvider.GetRequiredService(); + _navigation.Navigate(vm); + } + + [RelayCommand] + void Registration() + { + var user = new User() + { + Name = Login, + Password = Password, + + }; + + using (var rep = _serviceProvider.GetRequiredService()) + { + rep.AddUser(user); + } + + var vm = ActivatorUtilities.CreateInstance(_serviceProvider); + var win = _serviceProvider.GetRequiredService(); + win.DataContext = vm; + win.Show(); + _navigation.Close(); + + } + + +} \ No newline at end of file diff --git a/Policlinica/ViewModels/StartViewModel.cs b/Policlinica/ViewModels/StartViewModel.cs new file mode 100644 index 0000000..11bf544 --- /dev/null +++ b/Policlinica/ViewModels/StartViewModel.cs @@ -0,0 +1,29 @@ +using System; +using CommunityToolkit.Mvvm.ComponentModel; +using Microsoft.Extensions.DependencyInjection; + +namespace Policlinica.ViewModels; + +public partial class StartViewModel:ViewModelBase +{ + private readonly Navigation _navigation; + [ObservableProperty] private ViewModelBase _currentPage; + + public StartViewModel(IServiceProvider sv, Navigation navigation) + { + _navigation = navigation; + _navigation.SetCurrentView(this); + _navigation.Navigate(sv.GetRequiredService()); + } + + Action closeAction; + public void SetClose(Action closeAction) + { + this.closeAction = closeAction; + } + + public void Close() + { + this.closeAction?.Invoke(); + } +} \ No newline at end of file diff --git a/Policlinica/Views/PasswordWindow.axaml b/Policlinica/Views/AutorizationView.axaml similarity index 60% rename from Policlinica/Views/PasswordWindow.axaml rename to Policlinica/Views/AutorizationView.axaml index f11279b..4ff48fc 100644 --- a/Policlinica/Views/PasswordWindow.axaml +++ b/Policlinica/Views/AutorizationView.axaml @@ -1,13 +1,11 @@ - + x:Class="Policlinica.Views.AutorizationView" + x:DataType="vm:AutorizationViewModel"> @@ -17,10 +15,11 @@ -