From e11d453e272a76184a395638ef262678edb4eb7a Mon Sep 17 00:00:00 2001 From: VegaZ Date: Tue, 9 Oct 2018 21:02:05 +0200 Subject: [PATCH] Add TransferMoney Test --- Model/DatabaseContext.cs | 3 +- Server/Commands/Admin.cs | 16 +++++++ Server/Entities/FactionBankAccount.cs | 31 ++++++++++++++ Server/Extensions/ClientExtension.cs | 16 +++++++ Server/Logs/BankAccountTransactionHistory.cs | 2 + Server/Managers/BankManager.cs | 44 ++++++++++++++++++++ 6 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 Server/Entities/FactionBankAccount.cs create mode 100644 Server/Managers/BankManager.cs diff --git a/Model/DatabaseContext.cs b/Model/DatabaseContext.cs index f4b77eb8..827f7f71 100644 --- a/Model/DatabaseContext.cs +++ b/Model/DatabaseContext.cs @@ -39,11 +39,12 @@ namespace reallife_gamemode.Model //User public DbSet Users { get; set; } public DbSet UserVehicles { get; set; } - public DbSet BankAccounts { get; set; } + public DbSet UserBankAccounts { get; set; } public DbSet Bans { get; set; } //Faction public DbSet Factions { get; set; } + public DbSet FactionBankAccounts { get; set; } public DbSet FactionRanks { get; set; } public DbSet FactionVehicles { get; set; } diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index 25a3005f..915c52b1 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -13,6 +13,7 @@ using reallife_gamemode.Server.Events; using reallife_gamemode.Server.Extensions; using reallife_gamemode.Server.Services; using reallife_gamemode.Server.Util; +using reallife_gamemode.Server.Managers; /** * @overview Life of German Reallife - Admin Commands (Admin.cs) @@ -1097,6 +1098,21 @@ namespace reallife_gamemode.Server.Commands } } } + //TODO + [Command("pay")] + public void getType(Client player, string receiver, float amount) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + using (var getUser = new DatabaseContext()) + { + User receiverUser = getUser.Users.FirstOrDefault(u => u.Name == receiver); + BankManager.TransferUserMoneyToUser(player.GetUser(), receiverUser, amount, "/PAY"); + } + } /* [Command("restart")] diff --git a/Server/Entities/FactionBankAccount.cs b/Server/Entities/FactionBankAccount.cs new file mode 100644 index 00000000..c8207568 --- /dev/null +++ b/Server/Entities/FactionBankAccount.cs @@ -0,0 +1,31 @@ +using GTANetworkAPI; +using reallife_gamemode.Server.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +/** +* @overview Life of German Reallife - Entities FactionBankAccount (FactionBankAccount.cs) +* @author VegaZ +* @copyright (c) 2008 - 2018 Life of German +*/ +namespace reallife_gamemode.Server.Entities +{ + public class FactionBankAccount + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + [ForeignKey("Faction")] + public int FactionId { get; set; } + public Faction Faction { get; set; } + [StringLength(12)] + public string Bic { get; set; } + [StringLength(32)] + public string Iban { get; set; } + public float Balance { get; set; } + public bool Active { get; set; } + } +} diff --git a/Server/Extensions/ClientExtension.cs b/Server/Extensions/ClientExtension.cs index b9c3c4e8..f93a66f4 100644 --- a/Server/Extensions/ClientExtension.cs +++ b/Server/Extensions/ClientExtension.cs @@ -34,6 +34,22 @@ namespace reallife_gamemode.Server.Extensions } } + public static UserBankAccount GetUserBankAccount(this User user, DatabaseContext context = null) + { + using (DatabaseContext dbContext = new DatabaseContext()) + if (context == null) + { + using (context = new DatabaseContext()) + { + return context.UserBankAccounts.FirstOrDefault(u => u.UserId == user.Id); + } + } + else + { + return context.UserBankAccounts.FirstOrDefault(u => u.UserId == user.Id); + } + } + public static bool IsLoggedIn(this Client player) { return player.HasData("isLoggedIn") ? player.GetData("isLoggedIn") : false; diff --git a/Server/Logs/BankAccountTransactionHistory.cs b/Server/Logs/BankAccountTransactionHistory.cs index ac14e6c1..ccbd1700 100644 --- a/Server/Logs/BankAccountTransactionHistory.cs +++ b/Server/Logs/BankAccountTransactionHistory.cs @@ -28,6 +28,8 @@ namespace reallife_gamemode.Server.Logs public float NewSenderBalance { get; set; } public float NewReceiverBalance { get; set; } public float Fee { get; set; } + [StringLength(32)] + public string Origin { get; set; } [Timestamp] public byte[] Timestamp { get; set; } } diff --git a/Server/Managers/BankManager.cs b/Server/Managers/BankManager.cs new file mode 100644 index 00000000..5a737ee9 --- /dev/null +++ b/Server/Managers/BankManager.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GTANetworkAPI; +using reallife_gamemode.Server.Entities; +using reallife_gamemode.Server.Extensions; + +/** +* @overview Life of German Reallife - Managers BankManager (BankManager.cs) +* @author VegaZ +* @copyright (c) 2008 - 2018 Life of German +*/ + + +namespace reallife_gamemode.Server.Managers +{ + public class BankManager : Script + { + public static void TransferUserMoneyToUser(User sender, User receiver, float amount, string origin) + { + using (var transferMoney = new Model.DatabaseContext()) + { + var transactionLog = new Logs.BankAccountTransactionHistory + { + Sender = sender.Name, + SenderBalance = sender.GetUserBankAccount().Balance, + MoneySent = amount, + Receiver = receiver.Name, + ReceiverBalance = receiver.GetUserBankAccount().Balance, + NewReceiverBalance = receiver.GetUserBankAccount().Balance += amount, + NewSenderBalance = sender.GetUserBankAccount().Balance -= amount, + Fee = 0, + Origin = origin + }; + + transferMoney.BankAccountTransactionLogs.Add(transactionLog); + sender.GetUserBankAccount().Balance -= amount; + receiver.GetUserBankAccount().Balance += amount; + transferMoney.SaveChanges(); + } + } + } +}