Merge branch 'main' of https://git.is.ulstu.ru/Artyom_Yashin/PIbd-23_Yashin_A_Zakharov_R_CourseWork_Bank
This commit is contained in:
commit
c3baf8cfb9
@ -12,7 +12,6 @@ namespace BankContracts.BindingModels
|
||||
public int Id { get; set; }
|
||||
public DateTime WithdrawalTime { get; set; } = DateTime.Now;
|
||||
public int? RequestId { get; set; }
|
||||
|
||||
public Dictionary<int, IAccountModel> WithdrawalAccounts = new Dictionary<int, IAccountModel>();
|
||||
public Dictionary<int, (IAccountModel, int)> WithdrawalAccounts { get; set; } = new();
|
||||
}
|
||||
}
|
||||
|
@ -9,7 +9,8 @@ namespace BankContracts.SearchModels
|
||||
public class TransferSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
public DateTime? TransferTime { get; set; }
|
||||
public DateTime? DateTo { get; set; }
|
||||
public DateTime? DateFrom { get; set; }
|
||||
public int? OperationId { get; set; }
|
||||
public int? SenderAccountId { get; set; }
|
||||
public int? RecipientAccountId { get; set; }
|
||||
|
@ -9,7 +9,8 @@ namespace BankContracts.SearchModels
|
||||
public class WithdrawalSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
public DateTime? WithdrawalTime { get; set; }
|
||||
public DateTime? DateTo { get; set; }
|
||||
public DateTime? DateFrom { get; set; }
|
||||
public int? RequestId { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -11,11 +11,11 @@ namespace BankContracts.StoragesContracts
|
||||
{
|
||||
public interface ITransferStorage
|
||||
{
|
||||
List<WithdrawalViewModel> GetFullList();
|
||||
List<WithdrawalViewModel> GetFilteredList(WithdrawalSearchModel model);
|
||||
WithdrawalViewModel? GetElement(WithdrawalSearchModel model);
|
||||
WithdrawalViewModel? Insert(WithdrawalBindingModel model);
|
||||
WithdrawalViewModel? Update(WithdrawalBindingModel model);
|
||||
WithdrawalViewModel? Delete(WithdrawalBindingModel model);
|
||||
List<TransferViewModel> GetFullList();
|
||||
List<TransferViewModel> GetFilteredList(TransferSearchModel model);
|
||||
TransferViewModel? GetElement(TransferSearchModel model);
|
||||
TransferViewModel? Insert(TransferBindingModel model);
|
||||
TransferViewModel? Update(TransferBindingModel model);
|
||||
TransferViewModel? Delete(TransferBindingModel model);
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +19,5 @@ namespace BankContracts.ViewModels
|
||||
[DisplayName("Статус заявки")]
|
||||
public RequestStatus Status { get; set; }
|
||||
public Dictionary<int, ICardModel> CardRequests { get; set; } = new();
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,6 @@ namespace BankContracts.ViewModels
|
||||
public DateTime WithdrawalTime { get; set; } = DateTime.Now;
|
||||
[DisplayName("Номер заявки")]
|
||||
public int? RequestId { get; set; }
|
||||
public Dictionary<int, IAccountModel> WithdrawalAccounts = new Dictionary<int, IAccountModel>();
|
||||
public Dictionary<int, (IAccountModel, int)> WithdrawalAccounts { get; set; } = new();
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,6 @@ namespace BankDataModels.Models
|
||||
{
|
||||
DateTime WithdrawalTime { get; set; }
|
||||
int? RequestId { get; set; }
|
||||
Dictionary<int, IAccountModel> WithdrawalAccounts { get; }
|
||||
Dictionary<int, (IAccountModel, int)> WithdrawalAccounts { get; }
|
||||
}
|
||||
}
|
||||
|
111
Bank/BankDatabaseImplement/Implements/AccountStorage.cs
Normal file
111
Bank/BankDatabaseImplement/Implements/AccountStorage.cs
Normal file
@ -0,0 +1,111 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Implements
|
||||
{
|
||||
internal class AccountStorage : IAccountStorage
|
||||
{
|
||||
public List<AccountViewModel> GetFullList()
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
return context.Accounts
|
||||
.Include(x => x.ManagerId)
|
||||
.Include(x => x.AccountWithdrawals)
|
||||
.Include(x => x.SenderTransfers)
|
||||
.Include(x => x.RecipientTransfers)
|
||||
.Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
|
||||
public List<AccountViewModel> GetFilteredList(AccountSearchModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
return context.Accounts
|
||||
.Include(x => x.ManagerId)
|
||||
.Include(x => x.AccountWithdrawals)
|
||||
.Include(x => x.SenderTransfers)
|
||||
.Include(x => x.RecipientTransfers)
|
||||
.Where(x =>
|
||||
(!model.Id.HasValue || x.Id == model.Id) &&
|
||||
(!model.ManagerId.HasValue || x.ManagerId == model.ManagerId) &&
|
||||
(string.IsNullOrEmpty(model.Number) || x.Number == model.Number)
|
||||
)
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public AccountViewModel? GetElement(AccountSearchModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
if (model == null || (!model.Id.HasValue && string.IsNullOrEmpty(model.Number)))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return context.Accounts
|
||||
.Include(x => x.ManagerId)
|
||||
.Include(x => x.AccountWithdrawals)
|
||||
.Include(x => x.SenderTransfers)
|
||||
.Include(x => x.RecipientTransfers)
|
||||
.FirstOrDefault(x =>
|
||||
(!model.Id.HasValue || x.Id == model.Id) &&
|
||||
(string.IsNullOrEmpty(model.Number) || x.Number == model.Number)
|
||||
)?.GetViewModel;
|
||||
}
|
||||
|
||||
public AccountViewModel? Insert(AccountBindingModel model)
|
||||
{
|
||||
var newAccount = Account.Create(model);
|
||||
if (newAccount == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new BankDatabase();
|
||||
context.Accounts.Add(newAccount);
|
||||
context.SaveChanges();
|
||||
return newAccount.GetViewModel;
|
||||
}
|
||||
|
||||
public AccountViewModel? Update(AccountBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var account = context.Accounts
|
||||
.Include(x => x.ManagerId)
|
||||
.Include(x => x.AccountWithdrawals)
|
||||
.Include(x => x.SenderTransfers)
|
||||
.Include(x => x.RecipientTransfers)
|
||||
.FirstOrDefault(x => x.Id == model.Id);
|
||||
if (account == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
account.Update(model);
|
||||
context.SaveChanges();
|
||||
return account.GetViewModel;
|
||||
}
|
||||
|
||||
public AccountViewModel? Delete(AccountBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var account = context.Accounts
|
||||
.Include(x => x.ManagerId)
|
||||
.Include(x => x.AccountWithdrawals)
|
||||
.Include(x => x.SenderTransfers).Include(x => x.RecipientTransfers)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (account != null)
|
||||
{
|
||||
context.Accounts.Remove(account);
|
||||
context.SaveChanges();
|
||||
return account.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
95
Bank/BankDatabaseImplement/Implements/ManagerStorage.cs
Normal file
95
Bank/BankDatabaseImplement/Implements/ManagerStorage.cs
Normal file
@ -0,0 +1,95 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Implements
|
||||
{
|
||||
public class ManagerStorage : IManagerStorage
|
||||
{
|
||||
public List<ManagerViewModel> GetFullList()
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
return context.Managers.Include(x => x.Accounts).Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
|
||||
public List<ManagerViewModel> GetFilteredList(ManagerSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Fio) && string.IsNullOrEmpty(model.Email) && string.IsNullOrEmpty(model.Password))
|
||||
{
|
||||
return new();
|
||||
}
|
||||
using var context = new BankDatabase();
|
||||
return context.Managers
|
||||
.Include(x => x.Accounts)
|
||||
.Where(x =>
|
||||
string.IsNullOrEmpty(model.Fio) || x.Fio.Contains(model.Fio) &&
|
||||
(string.IsNullOrEmpty(model.Email) || x.Email.Contains(model.Email)) &&
|
||||
(string.IsNullOrEmpty(model.Password) || x.Password.Contains(model.Password)))
|
||||
.Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
|
||||
public ManagerViewModel? GetElement(ManagerSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Fio) && string.IsNullOrEmpty(model.Email) && !model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new BankDatabase();
|
||||
return context.Managers
|
||||
.Include(x => x.Accounts)
|
||||
.FirstOrDefault(x =>
|
||||
(string.IsNullOrEmpty(model.Fio) || x.Fio == model.Fio) &&
|
||||
(!model.Id.HasValue || x.Id == model.Id) &&
|
||||
(string.IsNullOrEmpty(model.Email) || x.Email == model.Email) &&
|
||||
(string.IsNullOrEmpty(model.Password) || x.Password == model.Password))?
|
||||
.GetViewModel;
|
||||
}
|
||||
|
||||
public ManagerViewModel? Insert(ManagerBindingModel model)
|
||||
{
|
||||
var newManager = Manager.Create(model);
|
||||
if (newManager == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new BankDatabase();
|
||||
context.Managers.Add(newManager);
|
||||
context.SaveChanges();
|
||||
return newManager.GetViewModel;
|
||||
}
|
||||
|
||||
public ManagerViewModel? Update(ManagerBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var manager = context.Managers.FirstOrDefault(x => x.Id == model.Id);
|
||||
if (manager == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
manager.Update(model);
|
||||
context.SaveChanges();
|
||||
return manager.GetViewModel;
|
||||
}
|
||||
|
||||
public ManagerViewModel? Delete(ManagerBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var element = context.Managers.Include(x => x.Accounts).FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Managers.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
104
Bank/BankDatabaseImplement/Implements/TransferStorage.cs
Normal file
104
Bank/BankDatabaseImplement/Implements/TransferStorage.cs
Normal file
@ -0,0 +1,104 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Implements
|
||||
{
|
||||
public class TransferStorage : ITransferStorage
|
||||
{
|
||||
public List<TransferViewModel> GetFullList()
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
return context.Transfers
|
||||
.Include(x => x.SenderAccount)
|
||||
.Include(x => x.RecipientAccount)
|
||||
.Include (x => x.Operation)
|
||||
.Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
|
||||
public List<TransferViewModel> GetFilteredList(TransferSearchModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
return context.Transfers
|
||||
.Include(x => x.SenderAccount)
|
||||
.Include(x => x.RecipientAccount)
|
||||
.Include(x => x.Operation)
|
||||
.Where(x =>
|
||||
(!model.Id.HasValue || x.Id == model.Id) &&
|
||||
(!model.SenderAccountId.HasValue || x.SenderAccountId == model.SenderAccountId) &&
|
||||
(!model.RecipientAccountId.HasValue || x.RecipientAccountId == model.RecipientAccountId) &&
|
||||
(!model.OperationId.HasValue || x.OperationId == model.OperationId) &&
|
||||
(!model.DateFrom.HasValue || x.TransferTime >= model.DateFrom) &&
|
||||
(!model.DateTo.HasValue || x.TransferTime <= model.DateTo)
|
||||
).Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
|
||||
public TransferViewModel? GetElement(TransferSearchModel model)
|
||||
{
|
||||
if (!model.Id.HasValue)
|
||||
return null;
|
||||
using var context = new BankDatabase();
|
||||
return context.Transfers
|
||||
.Include(x => x.SenderAccount)
|
||||
.Include(x => x.RecipientAccount)
|
||||
.Include(x => x.Operation)
|
||||
.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id)?
|
||||
.GetViewModel;
|
||||
}
|
||||
|
||||
public TransferViewModel? Insert(TransferBindingModel model)
|
||||
{
|
||||
var newTransfer = Transfer.Create(model);
|
||||
if (newTransfer == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new BankDatabase();
|
||||
context.Transfers.Add(newTransfer);
|
||||
context.SaveChanges();
|
||||
return newTransfer.GetViewModel;
|
||||
}
|
||||
|
||||
public TransferViewModel? Update(TransferBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var operation = context.Transfers
|
||||
.Include(x => x.SenderAccount)
|
||||
.Include(x => x.RecipientAccount)
|
||||
.Include(x => x.Operation)
|
||||
.FirstOrDefault(x => x.Id == model.Id);
|
||||
if (operation == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
operation.Update(model);
|
||||
context.SaveChanges();
|
||||
return operation.GetViewModel;
|
||||
}
|
||||
|
||||
public TransferViewModel? Delete(TransferBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var transfer = context.Transfers
|
||||
.Include(x => x.SenderAccount)
|
||||
.Include(x => x.RecipientAccount)
|
||||
.Include(x => x.Operation)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (transfer != null)
|
||||
{
|
||||
context.Transfers.Remove(transfer);
|
||||
context.SaveChanges();
|
||||
return transfer.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
114
Bank/BankDatabaseImplement/Implements/WithdrawalStorage.cs
Normal file
114
Bank/BankDatabaseImplement/Implements/WithdrawalStorage.cs
Normal file
@ -0,0 +1,114 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Implements
|
||||
{
|
||||
public class WithdrawalStorage : IWithdrawalStorage
|
||||
{
|
||||
public List<WithdrawalViewModel> GetFullList()
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
return context.Withdrawals
|
||||
.Include(x => x.Request)
|
||||
.Include(x => x.Accounts)
|
||||
.ThenInclude(x => x.Account)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<WithdrawalViewModel> GetFilteredList(WithdrawalSearchModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
return context.Withdrawals
|
||||
.Include(x => x.Request)
|
||||
.Include(x => x.Accounts)
|
||||
.ThenInclude(x => x.Account)
|
||||
.Where(x =>
|
||||
(!model.Id.HasValue || x.Id == model.Id) &&
|
||||
(!model.RequestId.HasValue || x.RequestId == model.RequestId) &&
|
||||
(!model.DateFrom.HasValue || x.WithdrawalTime >= model.DateFrom) &&
|
||||
(!model.DateTo.HasValue || x.WithdrawalTime <= model.DateTo))
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public WithdrawalViewModel? GetElement(WithdrawalSearchModel model)
|
||||
{
|
||||
if (!model.Id.HasValue)
|
||||
return null;
|
||||
using var context = new BankDatabase();
|
||||
return context.Withdrawals
|
||||
.Include(x => x.Request)
|
||||
.Include(x => x.Accounts)
|
||||
.ThenInclude(x => x.Account)
|
||||
.FirstOrDefault(x => x.Id == model.Id)?
|
||||
.GetViewModel;
|
||||
}
|
||||
|
||||
public WithdrawalViewModel? Insert(WithdrawalBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var newWithdrawal = Withdrawal.Create(context, model);
|
||||
if (newWithdrawal == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
context.Withdrawals.Add(newWithdrawal);
|
||||
context.SaveChanges();
|
||||
return newWithdrawal.GetViewModel;
|
||||
}
|
||||
|
||||
public WithdrawalViewModel? Update(WithdrawalBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
var Withdrawal = context.Withdrawals.FirstOrDefault(rec =>
|
||||
rec.Id == model.Id);
|
||||
if (Withdrawal == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
Withdrawal.Update(model);
|
||||
context.SaveChanges();
|
||||
Withdrawal.UpdateAccounts(context, model);
|
||||
transaction.Commit();
|
||||
return Withdrawal.GetViewModel;
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public WithdrawalViewModel? Delete(WithdrawalBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var element = context.Withdrawals
|
||||
.Include(x => x.Request)
|
||||
.Include(x => x.Accounts)
|
||||
.ThenInclude(x => x.Account)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Withdrawals.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -14,6 +14,8 @@ namespace BankDatabaseImplement.Models
|
||||
public int AccountId { get; set; }
|
||||
[Required]
|
||||
public int WithdrawalId { get; set; }
|
||||
[Required]
|
||||
public int Sum { get; set; }
|
||||
public virtual Account Account { get; set; } = new();
|
||||
public virtual Withdrawal Withdrawal { get; set; } = new();
|
||||
}
|
||||
|
@ -21,15 +21,18 @@ namespace BankDatabaseImplement.Models
|
||||
public virtual Request? Request { get; set; } = null;
|
||||
[ForeignKey("WithdrawalId")]
|
||||
public virtual List<AccountWithdrawal> Accounts { get; set; } = new();
|
||||
private Dictionary<int, IAccountModel>? _withdrawalAccounts { get; set; } = null;
|
||||
private Dictionary<int, (IAccountModel, int)>? _withdrawalAccounts { get; set; } = null;
|
||||
[NotMapped]
|
||||
public Dictionary<int, IAccountModel> WithdrawalAccounts
|
||||
public Dictionary<int, (IAccountModel, int)> WithdrawalAccounts
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_withdrawalAccounts == null)
|
||||
{
|
||||
_withdrawalAccounts = Accounts.ToDictionary(x => x.AccountId, x => x.Account as IAccountModel);
|
||||
_withdrawalAccounts = Accounts.ToDictionary(
|
||||
x => x.AccountId,
|
||||
x => (x.Account as IAccountModel, x.Sum)
|
||||
);
|
||||
}
|
||||
return _withdrawalAccounts;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user