diff --git a/qtcnet-client/Forms/AddRoomForm.Designer.cs b/qtcnet-client/Forms/AddRoomForm.Designer.cs
new file mode 100644
index 0000000..70a49a1
--- /dev/null
+++ b/qtcnet-client/Forms/AddRoomForm.Designer.cs
@@ -0,0 +1,89 @@
+namespace qtcnet_client.Forms
+{
+ partial class AddRoomForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ lblHeader = new Label();
+ txtRoomName = new TextBox();
+ btnCreate = new Button();
+ SuspendLayout();
+ //
+ // lblHeader
+ //
+ lblHeader.AutoSize = true;
+ lblHeader.Font = new Font("Segoe UI Semibold", 12F, FontStyle.Bold, GraphicsUnit.Point, 0);
+ lblHeader.ForeColor = Color.White;
+ lblHeader.Location = new Point(99, 9);
+ lblHeader.Name = "lblHeader";
+ lblHeader.Size = new Size(217, 21);
+ lblHeader.TabIndex = 0;
+ lblHeader.Text = "Enter A Name For The Room";
+ //
+ // txtRoomName
+ //
+ txtRoomName.Location = new Point(12, 40);
+ txtRoomName.Name = "txtRoomName";
+ txtRoomName.Size = new Size(397, 23);
+ txtRoomName.TabIndex = 1;
+ //
+ // btnCreate
+ //
+ btnCreate.Location = new Point(189, 73);
+ btnCreate.Name = "btnCreate";
+ btnCreate.Size = new Size(52, 23);
+ btnCreate.TabIndex = 2;
+ btnCreate.Text = "Create";
+ btnCreate.UseVisualStyleBackColor = true;
+ btnCreate.Click += btnCreate_Click;
+ //
+ // AddRoomForm
+ //
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ BackColor = Color.DodgerBlue;
+ ClientSize = new Size(421, 106);
+ Controls.Add(btnCreate);
+ Controls.Add(txtRoomName);
+ Controls.Add(lblHeader);
+ FormBorderStyle = FormBorderStyle.FixedDialog;
+ MaximizeBox = false;
+ MinimizeBox = false;
+ Name = "AddRoomForm";
+ StartPosition = FormStartPosition.CenterScreen;
+ Text = "Add Room";
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private Label lblHeader;
+ private TextBox txtRoomName;
+ private Button btnCreate;
+ }
+}
\ No newline at end of file
diff --git a/qtcnet-client/Forms/AddRoomForm.cs b/qtcnet-client/Forms/AddRoomForm.cs
new file mode 100644
index 0000000..2862df5
--- /dev/null
+++ b/qtcnet-client/Forms/AddRoomForm.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+
+namespace qtcnet_client.Forms
+{
+ public partial class AddRoomForm : Form
+ {
+ public string RoomName { get; private set; } = string.Empty;
+ public AddRoomForm()
+ {
+ InitializeComponent();
+ }
+
+ private void btnCreate_Click(object sender, EventArgs e)
+ {
+ if(!string.IsNullOrWhiteSpace(txtRoomName.Text))
+ {
+ RoomName = txtRoomName.Text;
+ DialogResult = DialogResult.OK;
+ Close();
+ }
+ }
+ }
+}
diff --git a/qtcnet-client/Forms/AddRoomForm.resx b/qtcnet-client/Forms/AddRoomForm.resx
new file mode 100644
index 0000000..8b2ff64
--- /dev/null
+++ b/qtcnet-client/Forms/AddRoomForm.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/qtcnet-client/Forms/AdminPanelForm.Designer.cs b/qtcnet-client/Forms/AdminPanelForm.Designer.cs
new file mode 100644
index 0000000..6c0c1a3
--- /dev/null
+++ b/qtcnet-client/Forms/AdminPanelForm.Designer.cs
@@ -0,0 +1,363 @@
+namespace qtcnet_client.Forms
+{
+ partial class AdminPanelForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AdminPanelForm));
+ pbLogo = new PictureBox();
+ lblServerAdmin = new Label();
+ tcMain = new TabControl();
+ tpRooms = new TabPage();
+ dgRooms = new DataGridView();
+ idDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
+ nameDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
+ creatorIdDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
+ createdAtDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
+ userCountDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
+ cmsRoomAdd = new ContextMenuStrip(components);
+ tsiAddRoom = new ToolStripMenuItem();
+ bsRooms = new BindingSource(components);
+ tpUsers = new TabPage();
+ dgUsers = new DataGridView();
+ idDataGridViewTextBoxColumn1 = new DataGridViewTextBoxColumn();
+ usernameDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
+ profilePictureDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
+ bioDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
+ roleDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
+ dateOfBirthDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
+ createdAtDataGridViewTextBoxColumn1 = new DataGridViewTextBoxColumn();
+ lastLoginDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
+ statusDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
+ currencyAmountDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
+ profileCosmeticIdDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
+ bsUsers = new BindingSource(components);
+ ilTabIcons = new ImageList(components);
+ ((System.ComponentModel.ISupportInitialize)pbLogo).BeginInit();
+ tcMain.SuspendLayout();
+ tpRooms.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)dgRooms).BeginInit();
+ cmsRoomAdd.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)bsRooms).BeginInit();
+ tpUsers.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)dgUsers).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)bsUsers).BeginInit();
+ SuspendLayout();
+ //
+ // pbLogo
+ //
+ pbLogo.Image = Properties.Resources.QtCNETIcon;
+ pbLogo.Location = new Point(-16, -23);
+ pbLogo.Name = "pbLogo";
+ pbLogo.Size = new Size(179, 125);
+ pbLogo.SizeMode = PictureBoxSizeMode.Zoom;
+ pbLogo.TabIndex = 0;
+ pbLogo.TabStop = false;
+ //
+ // lblServerAdmin
+ //
+ lblServerAdmin.AutoSize = true;
+ lblServerAdmin.Font = new Font("Segoe UI Semibold", 20F, FontStyle.Bold | FontStyle.Italic);
+ lblServerAdmin.ForeColor = Color.White;
+ lblServerAdmin.Location = new Point(399, 26);
+ lblServerAdmin.Name = "lblServerAdmin";
+ lblServerAdmin.Size = new Size(174, 37);
+ lblServerAdmin.TabIndex = 1;
+ lblServerAdmin.Text = "Admin Panel";
+ //
+ // tcMain
+ //
+ tcMain.Controls.Add(tpRooms);
+ tcMain.Controls.Add(tpUsers);
+ tcMain.ImageList = ilTabIcons;
+ tcMain.Location = new Point(12, 66);
+ tcMain.Name = "tcMain";
+ tcMain.SelectedIndex = 0;
+ tcMain.Size = new Size(561, 372);
+ tcMain.TabIndex = 2;
+ //
+ // tpRooms
+ //
+ tpRooms.Controls.Add(dgRooms);
+ tpRooms.ImageKey = "Rooms";
+ tpRooms.Location = new Point(4, 24);
+ tpRooms.Name = "tpRooms";
+ tpRooms.Padding = new Padding(3);
+ tpRooms.Size = new Size(553, 344);
+ tpRooms.TabIndex = 0;
+ tpRooms.Text = "Rooms";
+ tpRooms.UseVisualStyleBackColor = true;
+ //
+ // dgRooms
+ //
+ dgRooms.AutoGenerateColumns = false;
+ dgRooms.BackgroundColor = Color.White;
+ dgRooms.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dgRooms.Columns.AddRange(new DataGridViewColumn[] { idDataGridViewTextBoxColumn, nameDataGridViewTextBoxColumn, creatorIdDataGridViewTextBoxColumn, createdAtDataGridViewTextBoxColumn, userCountDataGridViewTextBoxColumn });
+ dgRooms.ContextMenuStrip = cmsRoomAdd;
+ dgRooms.DataSource = bsRooms;
+ dgRooms.Dock = DockStyle.Fill;
+ dgRooms.Location = new Point(3, 3);
+ dgRooms.Name = "dgRooms";
+ dgRooms.ReadOnly = true;
+ dgRooms.Size = new Size(547, 338);
+ dgRooms.TabIndex = 0;
+ dgRooms.UserDeletingRow += dgRooms_UserDeletingRow;
+ //
+ // idDataGridViewTextBoxColumn
+ //
+ idDataGridViewTextBoxColumn.DataPropertyName = "Id";
+ idDataGridViewTextBoxColumn.HeaderText = "Id";
+ idDataGridViewTextBoxColumn.Name = "idDataGridViewTextBoxColumn";
+ idDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // nameDataGridViewTextBoxColumn
+ //
+ nameDataGridViewTextBoxColumn.DataPropertyName = "Name";
+ nameDataGridViewTextBoxColumn.HeaderText = "Name";
+ nameDataGridViewTextBoxColumn.Name = "nameDataGridViewTextBoxColumn";
+ nameDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // creatorIdDataGridViewTextBoxColumn
+ //
+ creatorIdDataGridViewTextBoxColumn.DataPropertyName = "CreatorId";
+ creatorIdDataGridViewTextBoxColumn.HeaderText = "CreatorId";
+ creatorIdDataGridViewTextBoxColumn.Name = "creatorIdDataGridViewTextBoxColumn";
+ creatorIdDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // createdAtDataGridViewTextBoxColumn
+ //
+ createdAtDataGridViewTextBoxColumn.DataPropertyName = "CreatedAt";
+ createdAtDataGridViewTextBoxColumn.HeaderText = "CreatedAt";
+ createdAtDataGridViewTextBoxColumn.Name = "createdAtDataGridViewTextBoxColumn";
+ createdAtDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // userCountDataGridViewTextBoxColumn
+ //
+ userCountDataGridViewTextBoxColumn.DataPropertyName = "UserCount";
+ userCountDataGridViewTextBoxColumn.HeaderText = "UserCount";
+ userCountDataGridViewTextBoxColumn.Name = "userCountDataGridViewTextBoxColumn";
+ userCountDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // cmsRoomAdd
+ //
+ cmsRoomAdd.Items.AddRange(new ToolStripItem[] { tsiAddRoom });
+ cmsRoomAdd.Name = "cmsRoomAdd";
+ cmsRoomAdd.Size = new Size(132, 26);
+ //
+ // tsiAddRoom
+ //
+ tsiAddRoom.Name = "tsiAddRoom";
+ tsiAddRoom.Size = new Size(131, 22);
+ tsiAddRoom.Text = "Add Room";
+ tsiAddRoom.Click += tsiAddRoom_Click;
+ //
+ // bsRooms
+ //
+ bsRooms.DataSource = typeof(QtCNETAPI.Models.Room);
+ //
+ // tpUsers
+ //
+ tpUsers.Controls.Add(dgUsers);
+ tpUsers.ImageKey = "Users";
+ tpUsers.Location = new Point(4, 24);
+ tpUsers.Name = "tpUsers";
+ tpUsers.Padding = new Padding(3);
+ tpUsers.Size = new Size(553, 344);
+ tpUsers.TabIndex = 1;
+ tpUsers.Text = "Users";
+ tpUsers.UseVisualStyleBackColor = true;
+ //
+ // dgUsers
+ //
+ dgUsers.AutoGenerateColumns = false;
+ dgUsers.BackgroundColor = Color.White;
+ dgUsers.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dgUsers.Columns.AddRange(new DataGridViewColumn[] { idDataGridViewTextBoxColumn1, usernameDataGridViewTextBoxColumn, profilePictureDataGridViewTextBoxColumn, bioDataGridViewTextBoxColumn, roleDataGridViewTextBoxColumn, dateOfBirthDataGridViewTextBoxColumn, createdAtDataGridViewTextBoxColumn1, lastLoginDataGridViewTextBoxColumn, statusDataGridViewTextBoxColumn, currencyAmountDataGridViewTextBoxColumn, profileCosmeticIdDataGridViewTextBoxColumn });
+ dgUsers.DataSource = bsUsers;
+ dgUsers.Dock = DockStyle.Fill;
+ dgUsers.Location = new Point(3, 3);
+ dgUsers.Name = "dgUsers";
+ dgUsers.ReadOnly = true;
+ dgUsers.Size = new Size(547, 338);
+ dgUsers.TabIndex = 0;
+ dgUsers.UserDeletingRow += dgUsers_UserDeletingRow;
+ //
+ // idDataGridViewTextBoxColumn1
+ //
+ idDataGridViewTextBoxColumn1.DataPropertyName = "Id";
+ idDataGridViewTextBoxColumn1.HeaderText = "Id";
+ idDataGridViewTextBoxColumn1.Name = "idDataGridViewTextBoxColumn1";
+ idDataGridViewTextBoxColumn1.ReadOnly = true;
+ //
+ // usernameDataGridViewTextBoxColumn
+ //
+ usernameDataGridViewTextBoxColumn.DataPropertyName = "Username";
+ usernameDataGridViewTextBoxColumn.HeaderText = "Username";
+ usernameDataGridViewTextBoxColumn.Name = "usernameDataGridViewTextBoxColumn";
+ usernameDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // profilePictureDataGridViewTextBoxColumn
+ //
+ profilePictureDataGridViewTextBoxColumn.DataPropertyName = "ProfilePicture";
+ profilePictureDataGridViewTextBoxColumn.HeaderText = "ProfilePicture";
+ profilePictureDataGridViewTextBoxColumn.Name = "profilePictureDataGridViewTextBoxColumn";
+ profilePictureDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // bioDataGridViewTextBoxColumn
+ //
+ bioDataGridViewTextBoxColumn.DataPropertyName = "Bio";
+ bioDataGridViewTextBoxColumn.HeaderText = "Bio";
+ bioDataGridViewTextBoxColumn.Name = "bioDataGridViewTextBoxColumn";
+ bioDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // roleDataGridViewTextBoxColumn
+ //
+ roleDataGridViewTextBoxColumn.DataPropertyName = "Role";
+ roleDataGridViewTextBoxColumn.HeaderText = "Role";
+ roleDataGridViewTextBoxColumn.Name = "roleDataGridViewTextBoxColumn";
+ roleDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // dateOfBirthDataGridViewTextBoxColumn
+ //
+ dateOfBirthDataGridViewTextBoxColumn.DataPropertyName = "DateOfBirth";
+ dateOfBirthDataGridViewTextBoxColumn.HeaderText = "DateOfBirth";
+ dateOfBirthDataGridViewTextBoxColumn.Name = "dateOfBirthDataGridViewTextBoxColumn";
+ dateOfBirthDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // createdAtDataGridViewTextBoxColumn1
+ //
+ createdAtDataGridViewTextBoxColumn1.DataPropertyName = "CreatedAt";
+ createdAtDataGridViewTextBoxColumn1.HeaderText = "CreatedAt";
+ createdAtDataGridViewTextBoxColumn1.Name = "createdAtDataGridViewTextBoxColumn1";
+ createdAtDataGridViewTextBoxColumn1.ReadOnly = true;
+ //
+ // lastLoginDataGridViewTextBoxColumn
+ //
+ lastLoginDataGridViewTextBoxColumn.DataPropertyName = "LastLogin";
+ lastLoginDataGridViewTextBoxColumn.HeaderText = "LastLogin";
+ lastLoginDataGridViewTextBoxColumn.Name = "lastLoginDataGridViewTextBoxColumn";
+ lastLoginDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // statusDataGridViewTextBoxColumn
+ //
+ statusDataGridViewTextBoxColumn.DataPropertyName = "Status";
+ statusDataGridViewTextBoxColumn.HeaderText = "Status";
+ statusDataGridViewTextBoxColumn.Name = "statusDataGridViewTextBoxColumn";
+ statusDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // currencyAmountDataGridViewTextBoxColumn
+ //
+ currencyAmountDataGridViewTextBoxColumn.DataPropertyName = "CurrencyAmount";
+ currencyAmountDataGridViewTextBoxColumn.HeaderText = "CurrencyAmount";
+ currencyAmountDataGridViewTextBoxColumn.Name = "currencyAmountDataGridViewTextBoxColumn";
+ currencyAmountDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // profileCosmeticIdDataGridViewTextBoxColumn
+ //
+ profileCosmeticIdDataGridViewTextBoxColumn.DataPropertyName = "ProfileCosmeticId";
+ profileCosmeticIdDataGridViewTextBoxColumn.HeaderText = "ProfileCosmeticId";
+ profileCosmeticIdDataGridViewTextBoxColumn.Name = "profileCosmeticIdDataGridViewTextBoxColumn";
+ profileCosmeticIdDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // bsUsers
+ //
+ bsUsers.DataSource = typeof(QtCNETAPI.Dtos.User.UserInformationDto);
+ //
+ // ilTabIcons
+ //
+ ilTabIcons.ColorDepth = ColorDepth.Depth32Bit;
+ ilTabIcons.ImageStream = (ImageListStreamer)resources.GetObject("ilTabIcons.ImageStream");
+ ilTabIcons.TransparentColor = Color.Transparent;
+ ilTabIcons.Images.SetKeyName(0, "Contacts");
+ ilTabIcons.Images.SetKeyName(1, "Rooms");
+ ilTabIcons.Images.SetKeyName(2, "Users");
+ ilTabIcons.Images.SetKeyName(3, "Games");
+ ilTabIcons.Images.SetKeyName(4, "Store");
+ //
+ // AdminPanelForm
+ //
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ BackColor = Color.DodgerBlue;
+ ClientSize = new Size(585, 450);
+ Controls.Add(tcMain);
+ Controls.Add(lblServerAdmin);
+ Controls.Add(pbLogo);
+ FormBorderStyle = FormBorderStyle.FixedSingle;
+ MaximizeBox = false;
+ MinimizeBox = false;
+ Name = "AdminPanelForm";
+ StartPosition = FormStartPosition.CenterScreen;
+ Text = "QtC.NET Server Admin Panel";
+ Load += AdminPanelForm_Load;
+ ((System.ComponentModel.ISupportInitialize)pbLogo).EndInit();
+ tcMain.ResumeLayout(false);
+ tpRooms.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)dgRooms).EndInit();
+ cmsRoomAdd.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)bsRooms).EndInit();
+ tpUsers.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)dgUsers).EndInit();
+ ((System.ComponentModel.ISupportInitialize)bsUsers).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private PictureBox pbLogo;
+ private Label lblServerAdmin;
+ private TabControl tcMain;
+ private TabPage tpRooms;
+ private TabPage tpUsers;
+ private ImageList ilTabIcons;
+ private DataGridView dgRooms;
+ private DataGridView dgUsers;
+ private ContextMenuStrip cmsRoomAdd;
+ private ToolStripMenuItem tsiAddRoom;
+ private DataGridViewTextBoxColumn idDataGridViewTextBoxColumn;
+ private DataGridViewTextBoxColumn nameDataGridViewTextBoxColumn;
+ private DataGridViewTextBoxColumn creatorIdDataGridViewTextBoxColumn;
+ private DataGridViewTextBoxColumn createdAtDataGridViewTextBoxColumn;
+ private DataGridViewTextBoxColumn userCountDataGridViewTextBoxColumn;
+ private BindingSource bsRooms;
+ private DataGridViewTextBoxColumn idDataGridViewTextBoxColumn1;
+ private DataGridViewTextBoxColumn usernameDataGridViewTextBoxColumn;
+ private DataGridViewTextBoxColumn profilePictureDataGridViewTextBoxColumn;
+ private DataGridViewTextBoxColumn bioDataGridViewTextBoxColumn;
+ private DataGridViewTextBoxColumn roleDataGridViewTextBoxColumn;
+ private DataGridViewTextBoxColumn dateOfBirthDataGridViewTextBoxColumn;
+ private DataGridViewTextBoxColumn createdAtDataGridViewTextBoxColumn1;
+ private DataGridViewTextBoxColumn lastLoginDataGridViewTextBoxColumn;
+ private DataGridViewTextBoxColumn statusDataGridViewTextBoxColumn;
+ private DataGridViewTextBoxColumn currencyAmountDataGridViewTextBoxColumn;
+ private DataGridViewTextBoxColumn profileCosmeticIdDataGridViewTextBoxColumn;
+ private BindingSource bsUsers;
+ }
+}
\ No newline at end of file
diff --git a/qtcnet-client/Forms/AdminPanelForm.cs b/qtcnet-client/Forms/AdminPanelForm.cs
new file mode 100644
index 0000000..25c4a2b
--- /dev/null
+++ b/qtcnet-client/Forms/AdminPanelForm.cs
@@ -0,0 +1,106 @@
+using Krypton.Toolkit;
+using QtCNETAPI.Models;
+using QtCNETAPI.Services.ApiService;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace qtcnet_client.Forms
+{
+ public partial class AdminPanelForm : Form
+ {
+ private IApiService _apiService;
+ public AdminPanelForm(IApiService apiService)
+ {
+ _apiService = apiService;
+ InitializeComponent();
+ }
+
+ private async void AdminPanelForm_Load(object sender, EventArgs e)
+ {
+ // get data
+ var _roomData = await _apiService.GetAllRoomsAsync();
+ var _userData = await _apiService.GetAllUsersAsync();
+
+ if (_roomData.Success && _roomData.Data != null)
+ bsRooms.DataSource = _roomData.Data;
+
+ if (_userData.Success && _userData.Data != null)
+ bsUsers.DataSource = _userData.Data;
+
+ dgUsers.Update();
+ dgRooms.Update();
+ }
+
+ private async void tsiAddRoom_Click(object sender, EventArgs e)
+ {
+ // create a form to get room name
+ AddRoomForm _nameForm = new();
+ var _result = _nameForm.ShowDialog();
+ if (_result == DialogResult.OK)
+ {
+ // create the room and refresh room list
+ var now = DateTime.UtcNow;
+ var _apiRes = await _apiService.CreateRoomAsync(new()
+ {
+ Name = _nameForm.RoomName,
+ CreatedAt = now,
+ });
+
+ if (_apiRes.Success)
+ AdminPanelForm_Load(sender, e); // refresh data
+ }
+ }
+
+ private async void dgRooms_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
+ {
+ if (dgRooms.CurrentCell?.Value is string roomId)
+ {
+ DialogResult _res = KryptonMessageBox.Show("Are You Sure You Want To Delete This Room?\n" +
+ "Deleting Rooms Also Kicks All Users In It Out.", "are you sure...?",
+ KryptonMessageBoxButtons.YesNo, KryptonMessageBoxIcon.Question);
+
+ if (_res == DialogResult.Yes)
+ {
+ var _apiRes = await _apiService.DeleteRoomAsync(roomId);
+ if (_apiRes.Success)
+ AdminPanelForm_Load(sender, e); // refresh data
+ }
+
+ e.Cancel = true; // cancel the local delete, refresh should get rid of it
+ }
+ }
+
+ private async void dgUsers_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
+ {
+ if(dgUsers.CurrentCell?.Value is string userId)
+ {
+ if(_apiService.CurrentUser?.Id == userId)
+ {
+ KryptonMessageBox.Show("lol why would you delete yourself", "what");
+ e.Cancel = true;
+ return;
+ }
+
+ DialogResult _res = KryptonMessageBox.Show("Deleting Users Should Only Be Done As A Last Resort. Proper Moderation Features Are Coming Soon.\n" +
+ "Are You Sure?", "are you sure...?",
+ KryptonMessageBoxButtons.YesNo, KryptonMessageBoxIcon.Warning);
+
+ if (_res == DialogResult.Yes)
+ {
+ // delete the user
+ var _apiRes = await _apiService.DeleteUserById(userId);
+ if(_apiRes.Success)
+ AdminPanelForm_Load(sender, e); // refresh data
+ }
+
+ e.Cancel = true; // cancel the local delete, refresh should get rid of it
+ }
+ }
+ }
+}
diff --git a/qtcnet-client/Forms/AdminPanelForm.resx b/qtcnet-client/Forms/AdminPanelForm.resx
new file mode 100644
index 0000000..aecfd58
--- /dev/null
+++ b/qtcnet-client/Forms/AdminPanelForm.resx
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 120, 21
+
+
+ 250, 21
+
+
+ 353, 21
+
+
+ 17, 17
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
+ LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
+ SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA2hgAAAJNU0Z0AUkBTAIBAQUB
+ AAFwAQEBcAEBARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASAa
+ AAM3AVoDWAG4A2MB3wJjAV0B3wFiAl0B3wNdAd8DXQHfAWECXQHfA2MB3wNjAd8DVQGsAzABS8wAAzsB
+ YgNdAcUDaAH0AZ8BZQExAf8BlwFTARcB/wGWAUsBCQH/AZMBRgEBAf8BjAFDAQMB/wF9AUABCwH/AWsB
+ QAEaAf8BbgFQATYB/wNoAfADWgG3AzQBVMQAAzUBVQNdAccCbgFaAfUBuAFlARsB/wG5AVgBAgH/AckB
+ XwEAAf8B2AFlAQAB/wHcAWcBAAH/AdYBZAEAAf8BwwFcAQAB/wGiAUwBAAH/AXwBOwEDAf8BbgFGASMB
+ /wNoAfADWgG3AzABSsAAA1wBxAJ8AVwB+AHUAXEBGAH/AdcBZQEAAf8B5QFsAQAB/wHyAXIBAAH/AfoB
+ dQEAAf8B/AF2AQAB/wH6AXYBAAH/AfMBcgEAAf8B4gFrAQAB/wG9AVkBAAH/AYcBQAEAAf8BcQFIASMB
+ /wNoAfADVgGrwAAB/gHdAcEB/wHtAYABIAH/Ae0BcQECAf8B8wFzAQAB/wH6AXYBAAH/Af4BeAEAAv8B
+ ewEIAv8BiAEnAv8BogFTAf8B/gGBARcB/wH8AXgBBAH/AewBbwEAAf8BwQFbAQAB/wGGAUEBAwH/AXgB
+ VgE2Af8DYwHfwAAB/wGyAW8B/wH9AYABEQH/AfwBdwEBAf8B/QF3AQAC/wF4AQAC/wF/AQ8C/wGSATsC
+ /wGzAYMC/wHqAeAC/wGQAT0C/wF7AQoB/wH8AXcBAAH/AeUBbAEAAf8BsQFUAQAB/wGEAUsBGgH/A2MB
+ 38AAAf8BmgFCAv8BgwEVAf8B/gF6AQQC/wF4AQAC/wF4AQAC/wGVAT8C/wHKAa4C/wHaAcYC/wHtAeUC
+ /wGWAUkC/wF8AQ0B/wH+AXgBAAH/AfQBcwEAAf8B0AFiAQAB/wGaAU4BCgH/AWMCXQHfwAAB/wGVATcC
+ /wGJAR8C/wF9AQgC/wF4AQAC/wF4AQAC/wGoAVwC/wHgAc0C/wGhAWYC/wHYAcUC/wG5AZQC/wGHASMC
+ /wF4AQAB/wH7AXYBAAH/AeIBagEAAf8BrwFUAQMB/wFjAl0B38AAAf8BoAFJAv8BkgExAv8BgQERAv8B
+ eQEDAv8BeAEAAv8BqAFcAv8B4AHNAv8BoQFmAv8B2AHFAv8BwAGfAv8BiQEnAv8BeAEAAf8B/gF4AQAB
+ /wHsAW8BAAH/Ab8BWgECAf8BYwJdAd/AAAH/AbMBbwL/AZ4BSAL/AYgBHgL/AXwBBwL/AXgBAAL/AZgB
+ QwL/Ac4BtAL/AdcBwAL/AeoB4AL/AZ0BVwL/AX4BEQL/AXgBAAL/AXgBAAH/AfABcQEAAf8BywFkAQkB
+ /wFjAWEBXQHfwAAB/wHMAZ8C/wGsAWMC/wGTATMC/wGBAREC/wF5AQIC/wGCARYC/wGaAUsC/wGuAXgC
+ /wGlAVcC/wGBARcC/wF5AQQC/wF4AQAC/wF4AQAB/wHwAXEBAAH/AdUBcQEXAf8CYwFdAd/AAAH/AekB
+ 1QL/AbwBgQL/AaQBVAL/AY4BKgL/AX8BDQL/AXkBAgL/AXsBCQL/AYIBHQL/AXgBAAL/AXgBAAL/AXgB
+ AQL/AXoBBAL/AXoBAwH/AfMBdAEDAf8B4gGEATIB/wNjAd/AAANeAdIBdwJqAfkB/wG7AX0C/wGjAVIC
+ /wGQASwC/wGCARMC/wF9AQgC/wF6AQQC/wF5AQIC/wF6AQQC/wF9AQkC/wGAAQ8C/wF/AQ0B/wH4AYYB
+ IAH/A2gB9ANYAbjAAAM8AWYDYwHVA3wB+AH/Ab4BhQL/AaoBXwL/AZkBPgL/AY0BJwL/AYYBGgL/AYMB
+ FQL/AYUBGQL/AYoBIgL/AY0BKAL/AZMBMwH/Am4BaAH1A10BxQM2AVnEAANCAXIDYwHVAXcBbQFqAfkB
+ /wHJAZkC/wG8AX8C/wGuAWYC/wGkAVMC/wGfAUoC/wGfAUsC/wGjAVEC/wGnAVgB/wN8AfgDXQHHAzsB
+ YswAAzwBZQNeAdIB/wHvAeAC/wHcAbwC/wHNAZ8C/wHBAYoC/wG7AX8C/wG/AYYC/wHNAaEC/wHpAdYB
+ /wNcAcQDNQFVyAADZwHvAmcBWQHvAWcBXQFZAe8BZwFbAVkB7wFnAVsBWQHvAWcCWQHvAWcBZAFZAe8D
+ ZwHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvA2cB7wNnAe84AAMzAVEDbgH1AwcBCQMqAT8DRQF8A1kB
+ uwNjAd8DaAH0A4AB/gOBAf8DgQH/A4EB/wOAAf4DaAH0A2MB3wNaAboDRAF6AycBOggAAzcBWgNYAbgD
+ YwHfAmMBXQHfAWICXQHfA10B3wNdAd8BYQJdAd8DYwHfA2MB3wNVAawDMAFLCAAD+AH/AbkBlQE8Af8B
+ gwF9AW4B/wGEAX0BbAH/AaoBhAEnAf8BrAF7AQAB/wHMAbwBlAH/A34B/wN+Af8DfgH/A34B/wN+Af8D
+ fgH/A34B/wN+Af8DjgH/OAADEgEYAz8BbQNDAXUDXQHMA3wB+AOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB
+ /wOBAf8DgQH/A4EB/wOBAf8DgQH/A3wB+ANUAagEAAM7AWIDXQHFA2gB9AGfAWUBMQH/AZcBUwEXAf8B
+ lgFLAQkB/wGTAUYBAQH/AYwBQwEDAf8BfQFAAQsB/wFrAUABGgH/AW4BUAE2Af8DaAHwA1oBtwM0AVQE
+ AAT/AZcBiwFtAf8CgQGAAf8BggGBAYAB/wGYAYgBYAH/AcoBkAEAAf8B3QHMAZ8B/wOBAf8DgQH/A4EB
+ /wOBAf8DgQH/A4EB/wOBAf8DgQH/A5MB/zQAA18B0wM9AWcEAANqAe0DfQH6A4EB/wOBAf8DgQH/A4EB
+ /wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wNVAa8DNQFVA10BxwJuAVoB9QG4AWUB
+ GwH/AbkBWAECAf8ByQFfAQAB/wHYAWUBAAH/AdwBZwEAAf8B1gFkAQAB/wHDAVwBAAH/AaIBTAEAAf8B
+ fAE7AQMB/wFuAUYBIwH/A2gB8ANaAbcDMAFKBP8BhgGEAX0B/wOBAf8DgQH/AYcBgwF6Af8BzwGUAQAB
+ /wHeAcwBnwH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D4AH/A+AB/wPgAf8DvAH/NAADWgHCAzQBUwQAA2MB
+ 3wNuAfUDgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A1UB
+ rwNcAcQCfAFcAfgB1AFxARgB/wHXAWUBAAH/AeUBbAEAAf8B8gFyAQAB/wH6AXUBAAH/AfwBdgEAAf8B
+ +gF2AQAB/wHzAXIBAAH/AeIBawEAAf8BvQFZAQAB/wGHAUABAAH/AXEBSAEjAf8DaAHwA1YBqwT/AYsB
+ hgF6Af8DgQH/A4EB/wGOAYYBcQH/Ac8BlAEAAf8B3gHMAZ8h/wPKAf8QAAMNAREDPwFsA1MBpwFcAlkB
+ vgFYAlYBswFIAkcBgwMhATAEAANvAfMDOgFgCAADNgFYA1sBwANuAfUDgQH/A4EB/wOBAf8DgQH/A4EB
+ /wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wNoAfQDUgGkAf4B3QHBAf8B7QGAASAB/wHtAXEBAgH/AfMB
+ cwEAAf8B+gF2AQAB/wH+AXgBAAL/AXsBCAL/AYgBJwL/AaIBUwH/Af4BgQEXAf8B/AF4AQQB/wHsAW8B
+ AAH/AcEBWwEAAf8BhgFBAQMB/wF4AVYBNgH/A2MB3wT/AawBlgFgAf8BgwGCAX8B/wGFAYIBfQH/AbMB
+ kwFEAf8BzwGUAQAB/wHeAcwBnwH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DqAH/CAAD
+ GgEkA1IBoAJjAUgB9gGiAXMBAAH/Aa4BfAEAAf8BsAF9AQAB/wGoAXgBAAH/AZUBagEAAf8CgAEuAf4B
+ XAJZAcYDVwG1AxYBHggAAwIBAwMaASMDOAFcA1QBqANiAdcDcAHxA4AB/gOBAf8DgQH/A4EB/wOBAf0D
+ aAHwA2EB1ANTAaUDNgFZAxgBIAH/AbIBbwH/Af0BgAERAf8B/AF3AQEB/wH9AXcBAAL/AXgBAAL/AX8B
+ DwL/AZIBOwL/AbMBgwL/AeoB4AL/AZABPQL/AXsBCgH/AfwBdwEAAf8B5QFsAQAB/wGxAVQBAAH/AYQB
+ SwEaAf8DYwHfBP8B2QGqATcB/wG+AZgBOAH/AcABmAE2Af8B3AGiARQB/wHPAZQBAAH/Ad4BzAGfAf8D
+ gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOTAf8EAAMgAS0CYwFaAekBvwGIAQAB/wHNAZUB
+ CgH/AbABiAEnAf8BcwFkAT8B/wFNAUsBRwH/AU4BSwFCAf8BZgFXATEB/wGaAXQBFwH/AaQBdgEDAf8B
+ cAFPAQAB/wNDAXYEAUQAAf8BmgFCAv8BgwEVAf8B/gF6AQQC/wF4AQAC/wF4AQAC/wGVAT8C/wHKAa4C
+ /wHaAcYC/wHtAeUC/wGWAUkC/wF8AQ0B/wH+AXgBAAH/AfQBcwEAAf8B0AFiAQAB/wGaAU4BCgH/AWMC
+ XQHfBP8B4QGuATEB/wG9AZcBOwH/AcABmAE1Af8B4wGlAQoB/wHPAZQBAAH/Ad4BzAGfAf8DwAH/A8AB
+ /wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wOvAf8EAAJjAVoB6QHZAZoBAAH/AdoBowEcAf8CjgGMAf8D
+ igH/A5cB/wObAf8DkQH/A3QB/wNIAf8BQwFCAT8B/wG1AYMBBwH/AXoBVwEAAf8DNgFYDAADAgEDAwgB
+ CgMhAS8DMQFOAz0BaANDAXYDRAF6A0MBdQM9AWcDMQFNAyABLgMHAQkEAgQAAf8BlQE3Av8BiQEfAv8B
+ fQEIAv8BeAEAAv8BeAEAAv8BqAFcAv8B4AHNAv8BoQFmAv8B2AHFAv8BuQGUAv8BhwEjAv8BeAEAAf8B
+ +wF2AQAB/wHiAWoBAAH/Aa8BVAEDAf8BYwJdAd8E/wG7AZ0BUwH/AYgBhAF5Af8BjAGFAXQB/wHEAZkB
+ MAH/Ac8BlAEAAf8B3gHMAZ8h/wPKAf8DQwF2AekBpwECAf8B6QGrARIB/wHQAcoBuwH/A6wB/wNdAf8D
+ TAH/A0sB/wNEAf8DDwH/A7MB/wNmAf8BVAFMAToB/wGuAX0BBAH/A10BzAgAAxMBGgM5AV0DWQG8A2QB
+ 2wNqAe0DYwH2A18B+wOBAf0DXwH7A2MB9gNlAewDYwHaA1oBugM4AVwDEwEaAf8BoAFJAv8BkgExAv8B
+ gQERAv8BeQEDAv8BeAEAAv8BqAFcAv8B4AHNAv8BoQFmAv8B2AHFAv8BwAGfAv8BiQEnAv8BeAEAAf8B
+ /gF4AQAB/wHsAW8BAAH/Ab8BWgECAf8BYwJdAd8E/wGUAYoBcwH/A4EB/wOBAf8BmgGKAWMB/wHPAZQB
+ AAH/Ad4BzAGfAf8D0AH/A9AB/wPQAf8D0AH/A9AB/wPQAf8D0AH/A9AB/wO1Af8CagFhAeYB7QGtARAB
+ /wH0AdABdgH/A/oB/wP6Af8DfQH/A38B/wOAAf8DgAH/A34B/wOEAf8DuwH/A2oB/wGoAYABHAH/AmMB
+ SAH2BAADGgEkA1YBrgNoAfQDgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB
+ /wNrAfIDUgGhAf8BswFvAv8BngFIAv8BiAEeAv8BfAEHAv8BeAEAAv8BmAFDAv8BzgG0Av8B1wHAAv8B
+ 6gHgAv8BnQFXAv8BfgERAv8BeAEAAv8BeAEAAf8B8AFxAQAB/wHLAWQBCQH/AWMBYQFdAd8E/wGGAYMB
+ fgH/A4EB/wOBAf8BhgGDAXsB/wHPAZQBAAH/Ad4BzAGfAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
+ gQH/A4EB/wOTAf8DYgHuAe8BtAEhAf8B9wHcAZcJ/wORAf8DiAH/A4cB/wOHAf8DgQH/A1cB/wPmAf8D
+ owH/AbYBkQE2Af8CagFBAfkEAANXAbIDZQHnA4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
+ gQH/A4EB/wOBAf8DgQH/A4EB/wNVAa8B/wHMAZ8C/wGsAWMC/wGTATMC/wGBAREC/wF5AQIC/wGCARYC
+ /wGaAUsC/wGuAXgC/wGlAVcC/wGBARcC/wF5AQQC/wF4AQAC/wF4AQAB/wHwAXEBAAH/AdUBcQEXAf8C
+ YwFdAd8E/wGLAYYBeQH/A4EB/wOBAf8BjgGGAXEB/wHPAZQBAAH/Ad4BzAGfAf8DoQH/A6EB/wOhAf8D
+ oQH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DSwGNAfABvgE/Af8B9AHNAWwh/wP7Af8D0AH/AdcBpwExAf8C
+ YQFdAdEEAANvAfMDXwH7A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
+ gQH/A4EB/wNVAa8B/wHpAdUC/wG8AYEC/wGkAVQC/wGOASoC/wF/AQ0C/wF5AQIC/wF7AQkC/wGCAR0C
+ /wF4AQAC/wF4AQAC/wF4AQEC/wF6AQQC/wF6AQMB/wHzAXQBAwH/AeIBhAEyAf8DYwHfBP8BpwGUAWcB
+ /wGDAYIBfwH/AYUBgwF+Af8BsAGUAU4B/wHTAZcBAgH/AeABzgGfAf8D5wH/A+cB/wPnAf8D5wH/A+cB
+ /wPnAf8D5wH/A+cB/wPAAf8DBwEJA2IB7gHxAbwBOwH/AfoB6gHCAf8D3AH/A3cB/wNoAf8DaAH/A2gB
+ /wMyCf8B8gHdAakB/wHqAakBCAH/Az4BagQAA2QB2wNoAfQDgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
+ gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A1UBrwNeAdIBdwJqAfkB/wG7AX0C/wGjAVIC/wGQASwC
+ /wGCARMC/wF9AQgC/wF6AQQC/wF5AQIC/wF6AQQC/wF9AQkC/wGAAQ8C/wF/AQ0B/wH4AYYBIAH/A2gB
+ 9ANYAbgE/wHXAbEBUgH/AZoBjwF0Af8BoAGSAW0B/wHgAa8BNwH/AecBqQEQAf8B6wHVAaAB/wOBAf8D
+ gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A5MB/wQAAzMBUQNoAfAB8wHGAVgB/wH6AecBuBb/Af4B
+ +wH/AfkB4gGqAf8B7wG4AS0B/wNOAZYEAgQAAzwBZANfAckDfQH6A4EB/wOBAf8DgQH/A4EB/wOBAf8D
+ gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DfQH6A1UBqgM8AWYDYwHVA3wB+AH/Ab4BhQL/AaoBXwL/AZkB
+ PgL/AY0BJwL/AYYBGgL/AYMBFQL/AYUBGQL/AYoBIgL/AY0BKAL/AZMBMwH/Am4BaAH1A10BxQM2AVkE
+ /wH0Ac0BbAH/AfQBywFmAf8B9AHLAWUB/wH0AcsBZQH/AfEBwQFJAf8B+QHjAawB/wOJAf8DiQH/A4kB
+ /wOJAf8DiQH/A4kB/wOJAf8DiQH/A5oB/wgAAyIBMQNfAckCfQFnAfoB8wHKAWUB/wH5AeEBpgH/AfsB
+ 7QHMAf8B+wHsAcgB/wH4Ad0BmwH/AZYBgAF/Af4CZQFeAeIDPQFoBAEIAAMGAQgDMQFMA1ABmwNlAewD
+ fQH6A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wN9AfoDagHtA1ABmwMvAUkEAANCAXIDYwHVAXcB
+ bQFqAfkB/wHJAZkC/wG8AX8C/wGuAWYC/wGkAVMC/wGfAUoC/wGfAUsC/wGjAVEC/wGnAVgB/wN8AfgD
+ XQHHAzsBYgQAQP8QAAMPARMDRwGCA2QB2wJ+AW8B/ANnAeoDVAGoAygBOxwAAwUBBgMSARcDOgFgA1EB
+ nwNfAdMDZwHvA2MB9gNiAe4DXgHSA1EBngM5AV8DEQEWAwUBBgwAAzwBZQNeAdIB/wHvAeAC/wHcAbwC
+ /wHNAZ8C/wHBAYoC/wG7AX8C/wG/AYYC/wHNAaEC/wHpAdYB/wNcAcQDNQFVCAABQgFNAT4HAAE+AwAB
+ KAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/wEAAcABAwYAAYABAWYAAYABAQYAAcABAwgAAf8B/AIAAcAB
+ AwIAAf8B/AIAAYABAQIAAf8B+QYAAf8B+QYAAfABEwYAAcABAwYAAYABAQL/BAABgAEBAcABAQUAAQEB
+ gAYAAQEHAAEBBwABAQcAAQEGAAGAAQEGAAHAAQMCAAGAAQECAAHwAR8BwAEBAcABAws=
+
+
+
\ No newline at end of file
diff --git a/qtcnet-client/Forms/MainForm.cs b/qtcnet-client/Forms/MainForm.cs
index fa86b5d..8472ed7 100644
--- a/qtcnet-client/Forms/MainForm.cs
+++ b/qtcnet-client/Forms/MainForm.cs
@@ -45,6 +45,7 @@ namespace qtcnet_client
private readonly UpdateService _updateService;
private readonly AudioService _audioService;
+ private bool IsAdmin = false;
public MainForm(IApiService apiService,
IGatewayService gatewayService,
LoggingService loggingService,
@@ -643,6 +644,27 @@ namespace qtcnet_client
Controls.Add(CurrentProfileControl);
Controls.Add(MainTabControl);
+ if(_apiService.CurrentUser.Role == "Admin")
+ {
+ // create a link label that opens the admin panel when clicked
+ LinkLabel llblAdminPanel = new()
+ {
+ Location = new(325, 9),
+ Text = "Admin Panel",
+ BackColor = Color.Transparent,
+ };
+
+ llblAdminPanel.Click += (sender, e) =>
+ {
+ // open the admin panel
+ AdminPanelForm adminPanelForm = new(_apiService);
+ adminPanelForm.ShowDialog();
+ adminPanelForm.Dispose();
+ };
+
+ Controls.Add(llblAdminPanel);
+ }
+
ResumeLayout(true);
// minimize main window if start minimized is on
diff --git a/qtcnet-client/Properties/DataSources/QtCNETAPI.Dtos.User.UserInformationDto.datasource b/qtcnet-client/Properties/DataSources/QtCNETAPI.Dtos.User.UserInformationDto.datasource
new file mode 100644
index 0000000..d812ff6
--- /dev/null
+++ b/qtcnet-client/Properties/DataSources/QtCNETAPI.Dtos.User.UserInformationDto.datasource
@@ -0,0 +1,10 @@
+
+
+
+ QtCNETAPI.Dtos.User.UserInformationDto, QtCNETAPI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/qtcnet-client/Properties/DataSources/QtCNETAPI.Models.Room.datasource b/qtcnet-client/Properties/DataSources/QtCNETAPI.Models.Room.datasource
new file mode 100644
index 0000000..63da3c5
--- /dev/null
+++ b/qtcnet-client/Properties/DataSources/QtCNETAPI.Models.Room.datasource
@@ -0,0 +1,10 @@
+
+
+
+ QtCNETAPI.Models.Room, QtCNETAPI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file