3 Schichten Architektur voll

Erik hat die 3 Schichten arschitektur voll fertig gemacht

wenn jemand sachen added OHNE sie zu beachten gibts stress
This commit is contained in:
Erik 2024-07-03 15:58:51 +02:00
parent 28460e3312
commit 80f2610b04
12 changed files with 153 additions and 51 deletions

View File

@ -0,0 +1,24 @@
using bib_talk.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bib_talk.Business
{
public class LoginManager
{
private LoginDatabase loginDatabase;
public LoginManager(Login loginWindow)
{
loginDatabase = new LoginDatabase(loginWindow);
}
public async void Login()
{
await loginDatabase.LoginServer();
}
}
}

View File

@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using bib_talk.Repository;
namespace bib_talk.Business
{
public class MainWindowManager
{
private MainWindowDatabase mwDatabase;
private string loggedinUser;
public MainWindowManager(MainWindow mainWindow)
{
mwDatabase = new MainWindowDatabase(mainWindow);
}
public MainWindowManager(MainWindow mainWindow, string user)
{
mwDatabase = new MainWindowDatabase(mainWindow, user);
loggedinUser = user;
}
public void SendMessage()
{
mwDatabase.SendMessage();
}
public void LoadMessages()
{
mwDatabase.LoadMessages();
}
public void LoadOnlineUsers()
{
mwDatabase.LoadOnlineUsers();
}
public void LogoutUser()
{
mwDatabase.LogoutUser();
}
public async Task UploadProfileImage(string filePath)
{
await mwDatabase.UploadProfileImage(filePath);
}
}
}

View File

@ -0,0 +1,24 @@
using bib_talk.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bib_talk.Business
{
public class RegisterManager
{
private RegisterDatabase registerDatabase;
public RegisterManager(RegisterWindow registerWindow)
{
registerDatabase = new RegisterDatabase(registerWindow);
}
public async void RegisterServer()
{
await registerDatabase.RegisterServer();
}
}
}

View File

@ -1,2 +0,0 @@
Alle Business Klassen sind die [name].xaml.cs Dateien.
Diese sind NICHT in diesem Ordner, weil wir sie von der [name].xaml Datei nicht trennen können.

View File

@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
@ -12,11 +13,18 @@ namespace bib_talk.Repository
{
public class MainWindowDatabase
{
MainWindow mainWindow;
private MainWindow mainWindow;
private string loggedinUser;
public MainWindowDatabase(MainWindow mainWindow)
public MainWindowDatabase(MainWindow mainWindow)
{
this.mainWindow = mainWindow;
}
public MainWindowDatabase(MainWindow mainWindow, string user)
{
this.mainWindow = mainWindow;
loggedinUser = user;
}
public async void SendMessage()
@ -81,9 +89,6 @@ namespace bib_talk.Repository
}
}
public async void LogoutUser()
{
using (var client = new HttpClient())
@ -99,5 +104,25 @@ namespace bib_talk.Repository
mainWindow.Close();
}
}
}
public async Task UploadProfileImage(string filePath)
{
using (var client = new HttpClient())
{
var form = new MultipartFormDataContent();
var stream = File.OpenRead(filePath);
form.Add(new StreamContent(stream), "file", Path.GetFileName(filePath));
var response = await client.PostAsync($"http://daddypig.dns.navy:5114/api/users/upload-profile-image?username={loggedinUser}", form);
if (response.IsSuccessStatusCode)
{
MessageBox.Show("Profilbild erfolgreich hochgeladen");
}
else
{
MessageBox.Show("Fehler beim Hochladen des Profilbilds");
}
}
}
}
}

View File

@ -5,14 +5,14 @@ using System.Threading.Tasks;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows;
using bib_talk.Business;
using bib_talk.Repository;
namespace bib_talk
{
public partial class Login : Window
{
LoginDatabase loginDatabase;
LoginManager loginManager;
// Field to store logged in user
public static string loggedInUser;
@ -21,7 +21,7 @@ namespace bib_talk
{
InitializeComponent();
loginDatabase = new LoginDatabase(this);
loginManager = new LoginManager(this);
}
private void DraggableArea_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
@ -48,9 +48,7 @@ namespace bib_talk
{
if (usernbox.Text != "" && passwordbox.Password != "")
{
await loginDatabase.LoginServer();
loginManager.Login();
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View File

@ -14,12 +14,13 @@ using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading;
using bib_talk.Business;
namespace bib_talk
{
public partial class MainWindow : Window
{
MainWindowDatabase database;
MainWindowManager mwManager;
private DispatcherTimer _timer;
public string loggedinUser;
@ -31,7 +32,7 @@ namespace bib_talk
InitializeTimer();
LoadData();
database = new MainWindowDatabase(this);
mwManager = new MainWindowManager(this);
}
public MainWindow(string user)
@ -41,9 +42,9 @@ namespace bib_talk
InitializeTimer();
LoadData();
database = new MainWindowDatabase(this);
mwManager = new MainWindowManager(this, user);
database.LoadMessages();
mwManager.LoadMessages();
}
private void InitializeTimer()
@ -52,7 +53,7 @@ namespace bib_talk
{
Interval = TimeSpan.FromSeconds(2)
};
_timer.Tick += (sender, e) => { database.LoadMessages(); database.LoadOnlineUsers(); };
_timer.Tick += (sender, e) => { mwManager.LoadMessages(); mwManager.LoadOnlineUsers(); };
_timer.Start();
}
public void LoadData()
@ -62,7 +63,7 @@ namespace bib_talk
private void CloseButton_Click(object sender, RoutedEventArgs e)
{
database.LogoutUser();
mwManager.LogoutUser();
this.Close();
}
@ -78,13 +79,13 @@ namespace bib_talk
{
if (e.Key == Key.Enter)
{
database.SendMessage();
mwManager.SendMessage();
}
}
private async void send_Click(object sender, RoutedEventArgs e)
{
database.SendMessage();
mwManager.SendMessage();
}
private void ChatFenster_Click(object sender, RoutedEventArgs e)
@ -139,27 +140,7 @@ namespace bib_talk
if (openFileDialog.ShowDialog() == true)
{
string filePath = openFileDialog.FileName;
await UploadProfileImage(filePath);
}
}
private async Task UploadProfileImage(string filePath)
{
using (var client = new HttpClient())
{
var form = new MultipartFormDataContent();
var stream = File.OpenRead(filePath);
form.Add(new StreamContent(stream), "file", Path.GetFileName(filePath));
var response = await client.PostAsync($"http://daddypig.dns.navy:5114/api/users/upload-profile-image?username={loggedinUser}", form);
if (response.IsSuccessStatusCode)
{
MessageBox.Show("Profilbild erfolgreich hochgeladen");
}
else
{
MessageBox.Show("Fehler beim Hochladen des Profilbilds");
}
await mwManager.UploadProfileImage(filePath);
}
}
}
@ -174,12 +155,14 @@ namespace bib_talk
public string Text { get; set; }
public DateTime Timestamp { get; set; }
}
public class MessageDto
{
public string Username { get; set; }
public string Message { get; set; }
public DateTime Timestamp { get; set; }
}
public class User
{
public int Id { get; set; }

View File

@ -17,14 +17,19 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using bib_talk.Business;
namespace bib_talk
{
public partial class RegisterWindow : Window
{
RegisterManager registerManager;
public RegisterWindow()
{
InitializeComponent();
registerManager = new RegisterManager(this);
}
private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
@ -59,9 +64,9 @@ namespace bib_talk
{
if (ValidateRegistration())
{
RegisterDatabase registerDatabase = new RegisterDatabase(this);
// Business Schicht Aufruf
registerManager.RegisterServer();
await registerDatabase.RegisterServer();
Login login = new Login();
login.Show();
this.Close();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

View File

@ -12,9 +12,6 @@
<None Remove="logo.png" />
<None Remove="Logo_bib-Talk.png" />
<None Remove="PICA.jpg" />
<None Remove="UI\logo - Copy.png" />
<None Remove="UI\logo.png" />
<None Remove="UI\Logo_bib-Talk.png" />
</ItemGroup>
<ItemGroup>
@ -25,9 +22,6 @@
<Resource Include="Icons\logo.png" />
<Resource Include="Icons\Logo_bib-Talk.png" />
<Resource Include="Icons\PICA.jpg" />
<Resource Include="UI\logo - Copy.png" />
<Resource Include="UI\logo.png" />
<Resource Include="UI\Logo_bib-Talk.png" />
</ItemGroup>
</Project>