浏览代码

рефакторинг, личный кабинет

ganahrhr 4 年之前
父节点
当前提交
c4d432c9f6
共有 8 个文件被更改,包括 150 次插入85 次删除
  1. 66 68
      Models/Account.cs
  2. 1 1
      Models/Blockchain.cs
  3. 4 4
      MySQLConnector.cs
  4. 62 0
      Pages/Account.razor
  5. 4 4
      Pages/Blockchains.razor
  6. 7 7
      Pages/DocEdit.razor
  7. 1 1
      Pages/_Host.cshtml
  8. 5 0
      Shared/NavMenu.razor

+ 66 - 68
Models/Account.cs

@@ -1,68 +1,66 @@
-using System;
-using System.Numerics;
-using System.Threading.Tasks;
-using System.Collections.Generic;
-
-namespace HyperCube.Models
-{
-    public enum Role { Admin = 0, Verifier, User }
-
-    public class Account
-    {
-        public static Dictionary<string, Account> loaded = new();
-        public static Account current;
-        public string eth_address { get; set; }
-
-        /// <summary>
-        /// Internal ID
-        /// </summary>
-        public uint ID { get; set; }
-        /// <summary>
-        /// ASP Identity ID
-        /// </summary>
-        public string UUID { get; set; }
-        public string Name { get; set; }
-        public string Email { get; set; }
-        public Role AccRole { get; set; }
-
-        public string ETH_Address { get; set; }
-
-        public Account()
-        {
-        }
-
-        public static Account GetCurrent()
-        {
-            return current;
-        }
-
-        public static Account Find(string email)
-        {
-            if (email == null)
-                return null;
-            if (loaded.ContainsKey(email))
-                return loaded[email];
-            else
-                return null;
-        }
-
-        public static BigInteger ConvertBalance(string hex)
-        {
-            string newHex = hex.Remove(0, 2);
-            var balance = System.Numerics.BigInteger.Parse("0"+ newHex, System.Globalization.NumberStyles.HexNumber );
-            Console.WriteLine($"ConvertBalance {hex} {balance}");
-            return balance;
-        }
-
-        public static async void InitializeAccounts()
-        {
-            loaded = await MySQLConnector.Instance().SQLSelectASPUsers();
-            Console.WriteLine("InitializeAccounts");
-        }
-
-        public async Task GetEthAddress()
-        {
-            var addr = await Blockchain.GetMain().CreateBlockchainAccount(this);
-        }
-    }
-}
+using System;
+using System.Numerics;
+using System.Threading.Tasks;
+using System.Collections.Generic;
+
+namespace HyperCube.Models
+{
+    public enum Role { Admin = 0, Verifier, User }
+
+    public class AccountModel
+    {
+        public static Dictionary<string, AccountModel> Loaded = new();
+        public static AccountModel Current;
+        public string eth_address { get; set; }
+
+        /// <summary>
+        /// Internal ID
+        /// </summary>
+        public uint ID { get; set; }
+        /// <summary>
+        /// ASP Identity ID
+        /// </summary>
+        public string UUID { get; set; }
+        public string Name { get; set; }
+        public string Email { get; set; }
+        public Role AccRole { get; set; }
+
+        public AccountModel()
+        {
+        }
+
+        public static AccountModel GetCurrent()
+        {
+            return Current;
+        }
+
+        public static AccountModel Find(string email)
+        {
+            if (email == null)
+                return null;
+            if (Loaded.ContainsKey(email))
+                return Loaded[email];
+            else
+                return null;
+        }
+
+        public static BigInteger ConvertBalance(string hex)
+        {
+            string newHex = hex.Remove(0, 2);
+            var balance = System.Numerics.BigInteger.Parse("0"+ newHex, System.Globalization.NumberStyles.HexNumber );
+            Console.WriteLine($"ConvertBalance {hex} {balance}");
+            return balance;
+        }
+
+        public static async void InitializeAccounts()
+        {
+            Loaded = await MySQLConnector.Instance().SQLSelectASPUsers();
+            Console.WriteLine("InitializeAccounts");
+        }
+
+        public async Task GetEthAddress()
+        {
+            var addr = await Blockchain.GetMain().CreateBlockchainAccount(this);
+        }
+    }
+}

+ 1 - 1
Models/Blockchain.cs

@@ -28,7 +28,7 @@ namespace HyperCube.Models
             this.port = port;
         }
 
-        public async Task<string> CreateBlockchainAccount(Account account)
+        public async Task<string> CreateBlockchainAccount(AccountModel account)
         {
             var res = await GetMain().RunFunction("personal_newAccount", "\"password\"");
 

+ 4 - 4
MySQLConnector.cs

@@ -59,10 +59,10 @@ namespace HyperCube
             return lastID;
         }        
 
-        public async Task<Dictionary<string, Account>> SQLSelectASPUsers()
+        public async Task<Dictionary<string, AccountModel>> SQLSelectASPUsers()
         {
             string sql = "select * from aspnetusers";
-            Dictionary<string, Account> accs = new();
+            Dictionary<string, AccountModel> accs = new();
 
             bool connected = IsConnect();
             if (connected)
@@ -72,7 +72,7 @@ namespace HyperCube
 
                 while (rdr.Read())
                 {
-                    Account newacc = new Account();
+                    AccountModel newacc = new AccountModel();
                     newacc.UUID = rdr.GetString(0); 
                     newacc.Name = rdr.GetString(1);
                     newacc.Email = rdr.GetString(3);
@@ -190,7 +190,7 @@ namespace HyperCube
                     articleModel.Annotation = rdr.GetString(5);
                     articleModel.Keywords = rdr.GetString(6);
                     articleModel.Status = (ArticleStatus)rdr.GetInt16(7);
-                    articleModel.Rating = rdr.GetInt16(8);
+                    if (!rdr.IsDBNull(8)) articleModel.Rating = rdr.GetInt16(8);
                 }
                 await Task.WhenAll();
                 rdr.Close();

+ 62 - 0
Pages/Account.razor

@@ -0,0 +1,62 @@
+@page "/account"
+@using HyperCube.Models;
+@using Microsoft.AspNetCore.Identity;
+@inject AuthenticationStateProvider AuthenticationStateProvider
+@inject UserManager<IdentityUser> UserManager;
+
+@attribute [Authorize]
+
+<h3>Личный кабинет</h3>
+
+<EditForm Model="@account">
+    <table class="table-bordered" cellspacing="5" cellpadding="5">
+        <tbody>
+            <tr>
+                <td>UUID:</td>
+                <td>@account.UUID</td>
+            </tr>
+            <tr>
+                <td>Name:</td>
+                <td>@account.Name</td>
+            </tr>
+            <tr>
+                <td>Email:</td>
+                <td>@account.Email</td>
+            </tr>
+            <tr>
+                <td>ETH Address:</td>
+                <td>@account.eth_address</td>
+            </tr>
+        </tbody>
+    </table>
+</EditForm>
+
+@code {
+    private AccountModel account = new();
+
+    protected override async Task OnInitializedAsync()
+    {
+        account = await GetCurrentAcc();
+    }
+
+    private async Task<AccountModel> GetCurrentAcc()
+    {
+        AccountModel account = new();
+
+        var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
+        var user = authState.User;
+
+        if (user.Identity.IsAuthenticated)
+        {
+            var currentUser = await UserManager.GetUserAsync(user);
+            var acc = AccountModel.Find(currentUser.Email);
+            if (acc != null)
+                account = acc;
+
+            account.AccRole = Role.User;
+            return account;
+        }
+
+        return null;
+    }
+}

+ 4 - 4
Pages/Blockchains.razor

@@ -100,7 +100,7 @@
         <option value="0">[Select Account]</option>
         @if (Blockchain.loaded.Count > 0)
         {
-            @foreach (var acc in Account.loaded.Values)
+            @foreach (var acc in AccountModel.Loaded.Values)
             {
                 <option value="@acc.Email">
                     [@acc.Email] @acc.Name
@@ -132,7 +132,7 @@
         var addr = Blockchain.GetMain().address;
         if (accountSelected != "")
         {
-            var acc = Account.Find(accountSelected);
+            var acc = AccountModel.Find(accountSelected);
             if (acc != null)
             {
                 addr = acc.eth_address;
@@ -140,14 +140,14 @@
         }
 
         var res = await Blockchain.GetMain().GetBalance(addr);
-        var balanceInt = Account.ConvertBalance(res);
+        var balanceInt = AccountModel.ConvertBalance(res);
         balance = balanceInt.ToString();
         //Console.WriteLine($"GetBalance {balance}");
     }
 
     private async Task CreateBlockchainAccount()
     {
-        Account account = Account.Find(accountSelected);
+        AccountModel account = AccountModel.Find(accountSelected);
         if (account != null)
         {
             var res = await Blockchain.GetMain().CreateBlockchainAccount(account);

+ 7 - 7
Pages/DocEdit.razor

@@ -92,7 +92,7 @@
     {
         try
         {
-            var myacc = Account.current;
+            var myacc = AccountModel.Current;
             Console.WriteLine($"Verify {myacc.Name}");
 
             if (Blockchain.GetMain().contractNames.ContainsKey("Verify"))
@@ -150,7 +150,7 @@
             stringSQL = $"UPDATE articles " +
                 $"SET filename='{articleModel.Filename}', article_name='{articleModel.Name}', authors='{articleModel.Authors}', " +
                     $"date_publish='{articleModel.PublishDate.ToString("yyyy-MM-dd")}', annotation='{articleModel.Annotation}', " +
-                    $"keywords='{articleModel.Keywords}' rating='{articleModel.Rating}'" +
+                    $"keywords='{articleModel.Keywords}', rating={articleModel.Rating} " +
                 $"WHERE id={docID}";
             dbCon.SQLInsert(stringSQL);
         }
@@ -235,13 +235,13 @@
 
     public async void InitializeAccount()
     {
-        Account.current = await GetCurrentAcc();
-        Console.WriteLine("InitializeAccount in DocEdit "+ Account.current.Name);
+        AccountModel.Current = await GetCurrentAcc();
+        Console.WriteLine("InitializeAccount in DocEdit "+ AccountModel.Current.Name);
     }
 
-    private async Task<Account> GetCurrentAcc()
+    private async Task<AccountModel> GetCurrentAcc()
     {
-        Account account = new();
+        AccountModel account = new();
 
         var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
         var user = authState.User;
@@ -253,7 +253,7 @@
             account.Name = currentUser.UserName;
             account.Email = currentUser.Email;
 
-            var acc = Account.Find(account.Email);
+            var acc = AccountModel.Find(account.Email);
             if (acc != null)
                 account = acc;
             ///tmp

+ 1 - 1
Pages/_Host.cshtml

@@ -4,7 +4,7 @@
 @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
 @{
     Layout = null;
-    HyperCube.Models.Account.InitializeAccounts();
+    HyperCube.Models.AccountModel.InitializeAccounts();
 }
 
 

+ 5 - 0
Shared/NavMenu.razor

@@ -27,6 +27,11 @@
                 <span class="oi oi-list-rich" aria-hidden="true"></span> Blockchain
             </NavLink>
         </li>
+        <li class="nav-item px-3">
+            <NavLink class="nav-link" href="account">
+                <span class="oi oi-account-login" aria-hidden="true"></span> Личный кабинет
+            </NavLink>
+        </li>
         @*<li class="nav-item px-3">
             <NavLink class="nav-link" href="fetchdata">
                 <span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data