diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs
index d3c259ff..5691d03b 100644
--- a/Server/Commands/Admin.cs
+++ b/Server/Commands/Admin.cs
@@ -1631,7 +1631,7 @@ namespace reallife_gamemode.Server.Commands
using (var dbContext = new DatabaseContext())
{
- target.GetUser().GetUserBankAccount(dbContext).Balance = amount;
+ target.GetUser().GetBankAccount(dbContext).Balance = amount;
dbContext.SaveChanges();
}
player.SendChatMessage("~b~[ADMIN]~s~ Du hast das Geld von " + target.Name + " auf ~g~$" + amount + "~s~ gesetzt.");
@@ -1655,7 +1655,7 @@ namespace reallife_gamemode.Server.Commands
using (var dbContext = new DatabaseContext())
{
- target.GetUser().GetUserBankAccount(dbContext).Balance += amount;
+ target.GetUser().GetBankAccount(dbContext).Balance += amount;
dbContext.SaveChanges();
}
player.SendChatMessage("~b~[ADMIN]~s~ Du hast " + target.Name + " ~g~$" + amount + "~s~ gegeben.");
@@ -1752,7 +1752,14 @@ namespace reallife_gamemode.Server.Commands
using (var getFaction = new DatabaseContext())
{
Entities.Faction receiverUser = getFaction.Factions.FirstOrDefault(u => u.Name == receiver);
- BankManager.TransferUserMoneyToFaction(player.GetUser(), receiverUser, amount, "/FPAY");
+
+ if(receiverUser == null)
+ {
+ player.SendChatMessage("~r~[FEHLER]~s~ Diese Fraktion existiert nicht.");
+ return;
+ }
+
+ BankManager.TransferMoney(player.GetUser(), receiverUser, amount, "/FPAY");
}
}
@@ -1774,7 +1781,7 @@ namespace reallife_gamemode.Server.Commands
{
ShopVehicle sVehicle = getShopVehicle.ShopVehicles.FirstOrDefault(u => u.Id == shopVehicleId);
Entities.Faction receiverUser = getShopVehicle.Factions.FirstOrDefault(u => u.Name == "LSPD");
- BankManager.TransferUserMoneyToFaction(player.GetUser(), receiverUser, sVehicle.Price, "Fahrzeug gekauft: " + sVehicle.ModelName);
+ BankManager.TransferMoney(player.GetUser(), receiverUser, sVehicle.Price, "Fahrzeug gekauft: " + sVehicle.ModelName);
//TODO Anpassen
Vehicle boughtVehicle = NAPI.Vehicle.CreateVehicle(sVehicle.Model, new Vector3(sVehicle.PositionX, sVehicle.PositionY + 10, sVehicle.PositionZ + 0.5), sVehicle.Heading,
sVehicle.PrimaryColor, sVehicle.SecondaryColor, "LoG", sVehicle.Alpha, false, true, 0);
diff --git a/Server/Entities/Faction.cs b/Server/Entities/Faction.cs
index 88db5333..9dc14faa 100644
--- a/Server/Entities/Faction.cs
+++ b/Server/Entities/Faction.cs
@@ -1,8 +1,11 @@
using Microsoft.EntityFrameworkCore;
+using reallife_gamemode.Model;
+using reallife_gamemode.Server.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
using System.Text;
/**
@@ -13,14 +16,28 @@ using System.Text;
namespace reallife_gamemode.Server.Entities
{
- public class Faction
+ public class Faction : IBankAccountOwner
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[StringLength(32)]
public string Name { get; set; }
- public int BankAccount { get; set; }
public bool StateOwned { get; set; }
+
+ public IBankAccount GetBankAccount(DatabaseContext databaseContext = null)
+ {
+ if (databaseContext == null)
+ {
+ using (databaseContext = new DatabaseContext())
+ {
+ return databaseContext.FactionBankAccounts.FirstOrDefault(u => u.FactionId == this.Id);
+ }
+ }
+ else
+ {
+ return databaseContext.FactionBankAccounts.FirstOrDefault(u => u.FactionId == this.Id);
+ }
+ }
}
}
diff --git a/Server/Entities/FactionBankAccount.cs b/Server/Entities/FactionBankAccount.cs
index 7abac2be..a4be3a30 100644
--- a/Server/Entities/FactionBankAccount.cs
+++ b/Server/Entities/FactionBankAccount.cs
@@ -13,7 +13,7 @@ using System.Text;
*/
namespace reallife_gamemode.Server.Entities
{
- public class FactionBankAccount
+ public class FactionBankAccount : IBankAccount
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
diff --git a/Server/Entities/User.cs b/Server/Entities/User.cs
index dd7c4d1f..839d45bc 100644
--- a/Server/Entities/User.cs
+++ b/Server/Entities/User.cs
@@ -16,7 +16,7 @@ using System.Text;
namespace reallife_gamemode.Server.Entities
{
- public class User
+ public class User : IBankAccountOwner
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
@@ -28,8 +28,8 @@ namespace reallife_gamemode.Server.Entities
[StringLength(64)]
public string Password { get; set; }
public int LogUserId { get; set; }
- [Timestamp]
- public byte[] RegistrationDate { get; set; }
+ [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
+ public DateTime RegistrationDate { get; set; }
[EmailAddress]
[StringLength(64)]
@@ -131,5 +131,20 @@ namespace reallife_gamemode.Server.Entities
}
public bool IsAdmin(AdminLevel level) => AdminLevel >= level;
+
+ public IBankAccount GetBankAccount(DatabaseContext databaseContext = null)
+ {
+ if (databaseContext == null)
+ {
+ using (databaseContext = new DatabaseContext())
+ {
+ return databaseContext.UserBankAccounts.FirstOrDefault(u => u.UserId == this.Id);
+ }
+ }
+ else
+ {
+ return databaseContext.UserBankAccounts.FirstOrDefault(u => u.UserId == this.Id);
+ }
+ }
}
}
diff --git a/Server/Entities/UserBankAccount.cs b/Server/Entities/UserBankAccount.cs
index 25ba6c37..4efcfbc3 100644
--- a/Server/Entities/UserBankAccount.cs
+++ b/Server/Entities/UserBankAccount.cs
@@ -17,8 +17,9 @@ using System.Linq;
namespace reallife_gamemode.Server.Entities
{
- public class UserBankAccount
+ public class UserBankAccount : IBankAccount
{
+ [NotMapped]
private int _balance;
[Key]
diff --git a/Server/Extensions/FactionExtension.cs b/Server/Extensions/FactionExtension.cs
deleted file mode 100644
index db5f6022..00000000
--- a/Server/Extensions/FactionExtension.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using GTANetworkAPI;
-using Microsoft.EntityFrameworkCore;
-using reallife_gamemode.Model;
-using reallife_gamemode.Server.Entities;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-/**
-* @overview Life of German Reallife - Faction Extension (FactionExtension.cs)
-* @author VegaZ
-* @copyright (c) 2008 - 2018 Life of German
-*/
-
-namespace reallife_gamemode.Server.Extensions
-{
- public static class FactionExtension
- {
- ///
- /// Gibt das Bankkonto einer Fraktion zurück
- ///
- /// Die Fraktion, dessen Bankkonto man bekommen möchte
- /// Ein eventuell vorhandener Datenbank-Context, falls man Änderungen in der Datenbank vornehmen will
- ///
- public static FactionBankAccount GetFactionBankAccount(this Faction faction, DatabaseContext context = null)
- {
- if (context == null)
- {
- using (context = new DatabaseContext())
- {
- return context.FactionBankAccounts.FirstOrDefault(u => u.FactionId == faction.Id);
- }
- }
- else
- {
- return context.FactionBankAccounts.FirstOrDefault(u => u.FactionId == faction.Id);
- }
- }
- }
-}
diff --git a/Server/Extensions/UserExtension.cs b/Server/Extensions/UserExtension.cs
deleted file mode 100644
index 566810b1..00000000
--- a/Server/Extensions/UserExtension.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using GTANetworkAPI;
-using Microsoft.EntityFrameworkCore;
-using reallife_gamemode.Model;
-using reallife_gamemode.Server.Entities;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-/**
-* @overview Life of German Reallife - User Extension (UserExtension.cs)
-* @author VegaZ
-* @copyright (c) 2008 - 2018 Life of German
-*/
-
-namespace reallife_gamemode.Server.Extensions
-{
- public static class UserExtension
- {
- ///
- /// Gibt das Bankkonto eines Users zurück
- ///
- /// Der User, dessen Bankkonto man bekommen möchte
- /// Ein eventuell vorhandener Datenbank-Context, falls man Änderungen in der Datenbank vornehmen will
- ///
- public static UserBankAccount GetUserBankAccount(this User user, DatabaseContext context = null)
- {
- 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);
- }
- }
-
- ///
- /// Gibt den Character eines Users zurück
- ///
- /// Der Client, dessen Character man bekommen möchte
- /// Ein eventuell vorhandener Datenbank-Context, falls man Änderungen in der Datenbank vornehmen will
- ///
- public static Character GetUserCharacter(this User user, DatabaseContext context = null)
- {
- if (context == null)
- {
- using (context = new DatabaseContext())
- {
- return context.Characters.FirstOrDefault(u => u.UserId == user.Id);
- }
- }
- else
- {
- return context.Characters.FirstOrDefault(u => u.UserId == user.Id);
- }
- }
- }
-}
diff --git a/Server/Logs/BankAccountTransactionHistory.cs b/Server/Logs/BankAccountTransactionHistory.cs
index 425d324f..24426a7f 100644
--- a/Server/Logs/BankAccountTransactionHistory.cs
+++ b/Server/Logs/BankAccountTransactionHistory.cs
@@ -30,7 +30,7 @@ namespace reallife_gamemode.Server.Logs
public int Fee { get; set; }
[StringLength(32)]
public string Origin { get; set; }
- [Timestamp]
- public byte[] Timestamp { get; set; }
+ [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
+ public DateTime Timestamp { get; set; }
}
}
diff --git a/Server/Managers/BankManager.cs b/Server/Managers/BankManager.cs
index 279515e4..4d4b1d77 100644
--- a/Server/Managers/BankManager.cs
+++ b/Server/Managers/BankManager.cs
@@ -5,6 +5,7 @@ using System.Text;
using GTANetworkAPI;
using reallife_gamemode.Server.Entities;
using reallife_gamemode.Server.Extensions;
+using reallife_gamemode.Server.Util;
/**
* @overview Life of German Reallife - Managers BankManager (BankManager.cs)
@@ -17,127 +18,42 @@ namespace reallife_gamemode.Server.Managers
{
public class BankManager : Script
{
- ///
- /// Transferiert Geld von einem User zu einem anderen User
- ///
- /// Der Sender des Geldes
- /// Der Empfänger des Geldes
- /// Der Geldbetrag
- /// Der Überweisungsgrund
- public static void TransferUserMoneyToUser(User sender, User receiver, int amount, string origin)
+ public static TransactionResult TransferMoney(IBankAccountOwner sender, IBankAccountOwner receiver, int amount, string origin)
{
using (var transferMoney = new Model.DatabaseContext())
{
+ if (amount < 0) return TransactionResult.NEGATIVE_MONEY_SENT;
+
+ IBankAccount senderAccount = sender.GetBankAccount(transferMoney);
+ IBankAccount receiverAccount = receiver.GetBankAccount(transferMoney);
+
+ if (senderAccount == null) return TransactionResult.SENDER_NO_BANKACCOUNT;
+ if (receiverAccount == null) return TransactionResult.RECEIVER_NO_BANKACCOUNT;
+
+ if (senderAccount.Balance < amount) return TransactionResult.SENDER_NOT_ENOUGH_MONEY;
+
var transactionLog = new Logs.BankAccountTransactionHistory
{
Sender = sender.Name,
- SenderBalance = sender.GetUserBankAccount().Balance,
- MoneySent = amount,
+ SenderBalance = senderAccount.Balance,
Receiver = receiver.Name,
- ReceiverBalance = receiver.GetUserBankAccount().Balance,
- NewReceiverBalance = receiver.GetUserBankAccount().Balance + amount,
- NewSenderBalance = sender.GetUserBankAccount().Balance - amount,
+ ReceiverBalance = receiverAccount.Balance,
+ NewReceiverBalance = receiverAccount.Balance + amount,
+ NewSenderBalance = senderAccount.Balance - amount,
+ MoneySent = amount,
Fee = 0,
Origin = origin
};
+ // add log
transferMoney.BankAccountTransactionLogs.Add(transactionLog);
- sender.GetUserBankAccount(transferMoney).Balance -= amount;
- receiver.GetUserBankAccount(transferMoney).Balance += amount;
+
+ senderAccount.Balance -= amount;
+ receiverAccount.Balance += amount;
+
transferMoney.SaveChanges();
- }
- }
- ///
- /// Transferiert Geld von einem User zu einer Fraktion
- ///
- /// Der Sender des Geldes
- /// Der Empfänger des Geldes
- /// Der Geldbetrag
- /// Der Überweisungsgrund
- public static void TransferUserMoneyToFaction(User sender, Faction receiver, int 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.BankAccount,
- NewReceiverBalance = receiver.BankAccount + amount,
- NewSenderBalance = sender.GetUserBankAccount().Balance - amount,
- Fee = 0,
- Origin = origin
- };
-
- transferMoney.BankAccountTransactionLogs.Add(transactionLog);
- sender.GetUserBankAccount(transferMoney).Balance -= amount;
- receiver.BankAccount += amount;
- transferMoney.SaveChanges();
- }
- }
-
- ///
- /// Transferiert Geld von einer Fraktion zu einem User
- ///
- /// Der Sender des Geldes
- /// Der Empfänger des Geldes
- /// Der Geldbetrag
- /// Der Überweisungsgrund
- public static void TransferFactionMoneyToUser(Faction sender, User receiver, int amount, string origin)
- {
- using (var transferMoney = new Model.DatabaseContext())
- {
- var transactionLog = new Logs.BankAccountTransactionHistory
- {
- Sender = sender.Name,
- SenderBalance = sender.BankAccount,
- MoneySent = amount,
- Receiver = receiver.Name,
- ReceiverBalance = receiver.GetUserBankAccount().Balance,
- NewReceiverBalance = receiver.GetUserBankAccount().Balance + amount,
- NewSenderBalance = sender.BankAccount - amount,
- Fee = 0,
- Origin = origin
- };
-
- transferMoney.BankAccountTransactionLogs.Add(transactionLog);
- sender.BankAccount -= amount;
- receiver.GetUserBankAccount(transferMoney).Balance += amount;
- transferMoney.SaveChanges();
- }
- }
-
- ///
- /// Transferiert Geld von einer Fraktion zu einer anderen Fraktion
- ///
- /// Der Sender des Geldes
- /// Der Empfänger des Geldes
- /// Der Geldbetrag
- /// Der Überweisungsgrund
- public static void TransferFactionMoneyToFaction(Faction sender, Faction receiver, int amount, string origin)
- {
- using (var transferMoney = new Model.DatabaseContext())
- {
- var transactionLog = new Logs.BankAccountTransactionHistory
- {
- Sender = sender.Name,
- SenderBalance = sender.GetFactionBankAccount().Balance,
- MoneySent = amount,
- Receiver = receiver.Name,
- ReceiverBalance = receiver.BankAccount,
- NewReceiverBalance = receiver.BankAccount + amount,
- NewSenderBalance = sender.BankAccount - amount,
- Fee = 0,
- Origin = origin
- };
-
- transferMoney.BankAccountTransactionLogs.Add(transactionLog);
- sender.BankAccount -= amount;
- receiver.BankAccount += amount;
- transferMoney.SaveChanges();
+ return TransactionResult.SUCCESS;
}
}
}
diff --git a/Server/Util/IBankAccount.cs b/Server/Util/IBankAccount.cs
new file mode 100644
index 00000000..4a8b4a2c
--- /dev/null
+++ b/Server/Util/IBankAccount.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace reallife_gamemode.Server.Util
+{
+ public interface IBankAccount
+ {
+ int Balance { get; set; }
+ }
+}
diff --git a/Server/Util/IBankAccountOwner.cs b/Server/Util/IBankAccountOwner.cs
new file mode 100644
index 00000000..a13c7969
--- /dev/null
+++ b/Server/Util/IBankAccountOwner.cs
@@ -0,0 +1,14 @@
+using reallife_gamemode.Model;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace reallife_gamemode.Server.Util
+{
+ public interface IBankAccountOwner
+ {
+ string Name { get; }
+
+ IBankAccount GetBankAccount(DatabaseContext databaseContext = null);
+ }
+}
diff --git a/Server/Util/TransactionResult.cs b/Server/Util/TransactionResult.cs
new file mode 100644
index 00000000..7ce9b001
--- /dev/null
+++ b/Server/Util/TransactionResult.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace reallife_gamemode.Server.Util
+{
+ public enum TransactionResult
+ {
+ SUCCESS,
+ SENDER_NO_BANKACCOUNT,
+ RECEIVER_NO_BANKACCOUNT,
+ SENDER_NOT_ENOUGH_MONEY,
+ NEGATIVE_MONEY_SENT
+ }
+}