Zakharov_Rostislav 2024-04-29 13:55:21 +04:00
commit 6b405f61c6
15 changed files with 1336 additions and 20 deletions

View File

@ -12,7 +12,7 @@ namespace BankContracts.BindingModels
public int Id { get; set; }
public string Number { get; set; } = string.Empty;
public int Money { get; set; }
public DateOnly ReleaseDate { get; set; } = DateOnly.FromDateTime(DateTime.Now);
public DateTime ReleaseDate { get; set; } = DateTime.Now;
public int ManagerId { get; set; }
}
}

View File

@ -13,8 +13,8 @@ namespace BankContracts.BindingModels
public string Number { get; set; } = string.Empty;
public string Cvv { get; set; } = string.Empty;
public string Pin { get; set; } = string.Empty;
public DateOnly ReleaseDate { get; set; }
public DateOnly ExpirationDate { get; set; }
public DateTime ReleaseDate { get; set; }
public DateTime ExpirationDate { get; set; }
public int ClientId { get; set; }
public int? AccountId { get; set; }
}

View File

@ -10,7 +10,7 @@ namespace BankContracts.SearchModels
{
public int? Id { get; set; }
public string? Number { get; set; }
public DateOnly? ReleaseDate { get; set; }
public DateTime? ReleaseDate { get; set; }
public int? ManagerId { get; set; }
}
}

View File

@ -11,7 +11,7 @@ namespace BankContracts.SearchModels
public int? Id { get; set; }
public string? Number { get; set; }
public int? ClientId { get; set; }
public DateOnly? ReleaseDate { get; set; }
public DateOnly? ExpirationDate { get; set; }
public DateTime? ReleaseDate { get; set; }
public DateTime? ExpirationDate { get; set; }
}
}

View File

@ -16,7 +16,7 @@ namespace BankContracts.ViewModels
[DisplayName("Деньги на счёте")]
public int Money { get; set; }
[DisplayName("Дата открытия")]
public DateOnly ReleaseDate { get; set; } = DateOnly.FromDateTime(DateTime.Now);
public DateTime ReleaseDate { get; set; } = DateTime.Now;
[DisplayName("Менеджер")]
public string ManagerName { get; set; } = string.Empty;
public int ManagerId { get; set; }

View File

@ -18,9 +18,9 @@ namespace BankContracts.ViewModels
[DisplayName("PIN-код")]
public string Pin { get; set; } = string.Empty;
[DisplayName("Дата выпуска")]
public DateOnly ReleaseDate { get; set; }
public DateTime ReleaseDate { get; set; }
[DisplayName("Дата окончания действия")]
public DateOnly ExpirationDate { get; set; }
public DateTime ExpirationDate { get; set; }
public int ClientId { get; set; }
[DisplayName("Держатель карты")]
public string ClientName { get; set; } = string.Empty;

View File

@ -10,7 +10,7 @@ namespace BankDataModels.Models
{
string Number { get; set; }
int Money { get; set; }
DateOnly ReleaseDate { get; set; }
DateTime ReleaseDate { get; set; }
int ManagerId { get; set; }
}
}

View File

@ -11,8 +11,8 @@ namespace BankDataModels.Models
string Number { get; set; }
string Cvv { get; set; }
string Pin { get; set; }
DateOnly ReleaseDate { get; set; }
DateOnly ExpirationDate { get; set; }
DateTime ReleaseDate { get; set; }
DateTime ExpirationDate { get; set; }
int ClientId { get; set; }
int? AccountId { get; set; }
}

View File

@ -15,6 +15,27 @@ namespace BankDatabaseImplement
base.OnConfiguring(optionsBuilder);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Transfer>()
.HasOne(t => t.SenderAccount)
.WithMany(a => a.SenderTransfers)
.HasForeignKey(t => t.SenderAccountId);
modelBuilder.Entity<Transfer>()
.HasOne(t => t.RecipientAccount)
.WithMany(a => a.RecipientTransfers)
.HasForeignKey(t => t.RecipientAccountId);
modelBuilder.Entity<Operation>()
.HasOne(t => t.SenderCard)
.WithMany(a => a.SenderOperations)
.HasForeignKey(t => t.SenderCardId);
modelBuilder.Entity<Operation>()
.HasOne(t => t.RecipientCard)
.WithMany(a => a.RecipientOperations)
.HasForeignKey(t => t.RecipientCardId);
base.OnModelCreating(modelBuilder);
}
public virtual DbSet<Client> Clients { get; set; }
public virtual DbSet<Card> Cards { get; set; }
public virtual DbSet<Operation> Operations { get; set; }

View File

@ -0,0 +1,474 @@
// <auto-generated />
using System;
using BankDatabaseImplement;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace BankDatabaseImplement.Migrations
{
[DbContext(typeof(BankDatabase))]
[Migration("20240429090634_InitialCreate")]
partial class InitialCreate
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.17")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("BankDatabaseImplement.Models.Account", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int>("ManagerId")
.HasColumnType("int");
b.Property<int>("Money")
.HasColumnType("int");
b.Property<string>("Number")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("ReleaseDate")
.HasColumnType("datetime2");
b.HasKey("Id");
b.HasIndex("ManagerId");
b.ToTable("Accounts");
});
modelBuilder.Entity("BankDatabaseImplement.Models.AccountWithdrawal", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int>("AccountId")
.HasColumnType("int");
b.Property<int>("Sum")
.HasColumnType("int");
b.Property<int>("WithdrawalId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("AccountId");
b.HasIndex("WithdrawalId");
b.ToTable("AccountWithdrawals");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Card", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int?>("AccountId")
.IsRequired()
.HasColumnType("int");
b.Property<int>("ClientId")
.HasColumnType("int");
b.Property<string>("Cvv")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("ExpirationDate")
.HasColumnType("datetime2");
b.Property<string>("Number")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Pin")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("ReleaseDate")
.HasColumnType("datetime2");
b.HasKey("Id");
b.HasIndex("AccountId");
b.HasIndex("ClientId");
b.ToTable("Cards");
});
modelBuilder.Entity("BankDatabaseImplement.Models.CardRequest", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int>("CardId")
.HasColumnType("int");
b.Property<int>("RequestId")
.HasColumnType("int");
b.Property<int>("Sum")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("CardId");
b.HasIndex("RequestId");
b.ToTable("CardRequests");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Client", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("Email")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Fio")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Password")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("Clients");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Manager", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("Email")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Fio")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Password")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("Managers");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Operation", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<DateTime>("OperationTime")
.HasColumnType("datetime2");
b.Property<int>("RecipientCardId")
.HasColumnType("int");
b.Property<int?>("SenderCardId")
.IsRequired()
.HasColumnType("int");
b.Property<int>("Sum")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("RecipientCardId");
b.HasIndex("SenderCardId");
b.ToTable("Operations");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Request", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<DateTime>("RequestTime")
.HasColumnType("datetime2");
b.Property<int>("Status")
.HasColumnType("int");
b.Property<int>("Sum")
.HasColumnType("int");
b.HasKey("Id");
b.ToTable("Requests");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Transfer", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int?>("OperationId")
.IsRequired()
.HasColumnType("int");
b.Property<int>("RecipientAccountId")
.HasColumnType("int");
b.Property<int>("SenderAccountId")
.HasColumnType("int");
b.Property<int>("Sum")
.HasColumnType("int");
b.Property<DateTime>("TransferTime")
.HasColumnType("datetime2");
b.HasKey("Id");
b.HasIndex("OperationId");
b.HasIndex("RecipientAccountId");
b.HasIndex("SenderAccountId");
b.ToTable("Transfers");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Withdrawal", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int?>("RequestId")
.IsRequired()
.HasColumnType("int");
b.Property<DateTime>("WithdrawalTime")
.HasColumnType("datetime2");
b.HasKey("Id");
b.HasIndex("RequestId");
b.ToTable("Withdrawals");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Account", b =>
{
b.HasOne("BankDatabaseImplement.Models.Manager", "Manager")
.WithMany("Accounts")
.HasForeignKey("ManagerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Manager");
});
modelBuilder.Entity("BankDatabaseImplement.Models.AccountWithdrawal", b =>
{
b.HasOne("BankDatabaseImplement.Models.Account", "Account")
.WithMany("AccountWithdrawals")
.HasForeignKey("AccountId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("BankDatabaseImplement.Models.Withdrawal", "Withdrawal")
.WithMany("Accounts")
.HasForeignKey("WithdrawalId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Account");
b.Navigation("Withdrawal");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Card", b =>
{
b.HasOne("BankDatabaseImplement.Models.Account", "Account")
.WithMany()
.HasForeignKey("AccountId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("BankDatabaseImplement.Models.Client", "Client")
.WithMany("Cards")
.HasForeignKey("ClientId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Account");
b.Navigation("Client");
});
modelBuilder.Entity("BankDatabaseImplement.Models.CardRequest", b =>
{
b.HasOne("BankDatabaseImplement.Models.Card", "Card")
.WithMany("CardRequests")
.HasForeignKey("CardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("BankDatabaseImplement.Models.Request", "Request")
.WithMany("Cards")
.HasForeignKey("RequestId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Card");
b.Navigation("Request");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Operation", b =>
{
b.HasOne("BankDatabaseImplement.Models.Card", "RecipientCard")
.WithMany("RecipientOperations")
.HasForeignKey("RecipientCardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("BankDatabaseImplement.Models.Card", "SenderCard")
.WithMany("SenderOperations")
.HasForeignKey("SenderCardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("RecipientCard");
b.Navigation("SenderCard");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Transfer", b =>
{
b.HasOne("BankDatabaseImplement.Models.Operation", "Operation")
.WithMany()
.HasForeignKey("OperationId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("BankDatabaseImplement.Models.Account", "RecipientAccount")
.WithMany("RecipientTransfers")
.HasForeignKey("RecipientAccountId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("BankDatabaseImplement.Models.Account", "SenderAccount")
.WithMany("SenderTransfers")
.HasForeignKey("SenderAccountId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Operation");
b.Navigation("RecipientAccount");
b.Navigation("SenderAccount");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Withdrawal", b =>
{
b.HasOne("BankDatabaseImplement.Models.Request", "Request")
.WithMany()
.HasForeignKey("RequestId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Request");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Account", b =>
{
b.Navigation("AccountWithdrawals");
b.Navigation("RecipientTransfers");
b.Navigation("SenderTransfers");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Card", b =>
{
b.Navigation("CardRequests");
b.Navigation("RecipientOperations");
b.Navigation("SenderOperations");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Client", b =>
{
b.Navigation("Cards");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Manager", b =>
{
b.Navigation("Accounts");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Request", b =>
{
b.Navigation("Cards");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Withdrawal", b =>
{
b.Navigation("Accounts");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,349 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace BankDatabaseImplement.Migrations
{
/// <inheritdoc />
public partial class InitialCreate : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Clients",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Fio = table.Column<string>(type: "nvarchar(max)", nullable: false),
Email = table.Column<string>(type: "nvarchar(max)", nullable: false),
Password = table.Column<string>(type: "nvarchar(max)", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Clients", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Managers",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Fio = table.Column<string>(type: "nvarchar(max)", nullable: false),
Email = table.Column<string>(type: "nvarchar(max)", nullable: false),
Password = table.Column<string>(type: "nvarchar(max)", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Managers", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Requests",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Sum = table.Column<int>(type: "int", nullable: false),
RequestTime = table.Column<DateTime>(type: "datetime2", nullable: false),
Status = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Requests", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Accounts",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Number = table.Column<string>(type: "nvarchar(max)", nullable: false),
Money = table.Column<int>(type: "int", nullable: false),
ReleaseDate = table.Column<DateTime>(type: "datetime2", nullable: false),
ManagerId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Accounts", x => x.Id);
table.ForeignKey(
name: "FK_Accounts_Managers_ManagerId",
column: x => x.ManagerId,
principalTable: "Managers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Withdrawals",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
WithdrawalTime = table.Column<DateTime>(type: "datetime2", nullable: false),
RequestId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Withdrawals", x => x.Id);
table.ForeignKey(
name: "FK_Withdrawals_Requests_RequestId",
column: x => x.RequestId,
principalTable: "Requests",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Cards",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Number = table.Column<string>(type: "nvarchar(max)", nullable: false),
Cvv = table.Column<string>(type: "nvarchar(max)", nullable: false),
Pin = table.Column<string>(type: "nvarchar(max)", nullable: false),
ReleaseDate = table.Column<DateTime>(type: "datetime2", nullable: false),
ExpirationDate = table.Column<DateTime>(type: "datetime2", nullable: false),
ClientId = table.Column<int>(type: "int", nullable: false),
AccountId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Cards", x => x.Id);
table.ForeignKey(
name: "FK_Cards_Accounts_AccountId",
column: x => x.AccountId,
principalTable: "Accounts",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_Cards_Clients_ClientId",
column: x => x.ClientId,
principalTable: "Clients",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AccountWithdrawals",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
AccountId = table.Column<int>(type: "int", nullable: false),
WithdrawalId = table.Column<int>(type: "int", nullable: false),
Sum = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AccountWithdrawals", x => x.Id);
table.ForeignKey(
name: "FK_AccountWithdrawals_Accounts_AccountId",
column: x => x.AccountId,
principalTable: "Accounts",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_AccountWithdrawals_Withdrawals_WithdrawalId",
column: x => x.WithdrawalId,
principalTable: "Withdrawals",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "CardRequests",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CardId = table.Column<int>(type: "int", nullable: false),
RequestId = table.Column<int>(type: "int", nullable: false),
Sum = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_CardRequests", x => x.Id);
table.ForeignKey(
name: "FK_CardRequests_Cards_CardId",
column: x => x.CardId,
principalTable: "Cards",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_CardRequests_Requests_RequestId",
column: x => x.RequestId,
principalTable: "Requests",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Operations",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Sum = table.Column<int>(type: "int", nullable: false),
OperationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
SenderCardId = table.Column<int>(type: "int", nullable: false),
RecipientCardId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Operations", x => x.Id);
table.ForeignKey(
name: "FK_Operations_Cards_RecipientCardId",
column: x => x.RecipientCardId,
principalTable: "Cards",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_Operations_Cards_SenderCardId",
column: x => x.SenderCardId,
principalTable: "Cards",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Transfers",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Sum = table.Column<int>(type: "int", nullable: false),
TransferTime = table.Column<DateTime>(type: "datetime2", nullable: false),
OperationId = table.Column<int>(type: "int", nullable: false),
SenderAccountId = table.Column<int>(type: "int", nullable: false),
RecipientAccountId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Transfers", x => x.Id);
table.ForeignKey(
name: "FK_Transfers_Accounts_RecipientAccountId",
column: x => x.RecipientAccountId,
principalTable: "Accounts",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_Transfers_Accounts_SenderAccountId",
column: x => x.SenderAccountId,
principalTable: "Accounts",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_Transfers_Operations_OperationId",
column: x => x.OperationId,
principalTable: "Operations",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_Accounts_ManagerId",
table: "Accounts",
column: "ManagerId");
migrationBuilder.CreateIndex(
name: "IX_AccountWithdrawals_AccountId",
table: "AccountWithdrawals",
column: "AccountId");
migrationBuilder.CreateIndex(
name: "IX_AccountWithdrawals_WithdrawalId",
table: "AccountWithdrawals",
column: "WithdrawalId");
migrationBuilder.CreateIndex(
name: "IX_CardRequests_CardId",
table: "CardRequests",
column: "CardId");
migrationBuilder.CreateIndex(
name: "IX_CardRequests_RequestId",
table: "CardRequests",
column: "RequestId");
migrationBuilder.CreateIndex(
name: "IX_Cards_AccountId",
table: "Cards",
column: "AccountId");
migrationBuilder.CreateIndex(
name: "IX_Cards_ClientId",
table: "Cards",
column: "ClientId");
migrationBuilder.CreateIndex(
name: "IX_Operations_RecipientCardId",
table: "Operations",
column: "RecipientCardId");
migrationBuilder.CreateIndex(
name: "IX_Operations_SenderCardId",
table: "Operations",
column: "SenderCardId");
migrationBuilder.CreateIndex(
name: "IX_Transfers_OperationId",
table: "Transfers",
column: "OperationId");
migrationBuilder.CreateIndex(
name: "IX_Transfers_RecipientAccountId",
table: "Transfers",
column: "RecipientAccountId");
migrationBuilder.CreateIndex(
name: "IX_Transfers_SenderAccountId",
table: "Transfers",
column: "SenderAccountId");
migrationBuilder.CreateIndex(
name: "IX_Withdrawals_RequestId",
table: "Withdrawals",
column: "RequestId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "AccountWithdrawals");
migrationBuilder.DropTable(
name: "CardRequests");
migrationBuilder.DropTable(
name: "Transfers");
migrationBuilder.DropTable(
name: "Withdrawals");
migrationBuilder.DropTable(
name: "Operations");
migrationBuilder.DropTable(
name: "Requests");
migrationBuilder.DropTable(
name: "Cards");
migrationBuilder.DropTable(
name: "Accounts");
migrationBuilder.DropTable(
name: "Clients");
migrationBuilder.DropTable(
name: "Managers");
}
}
}

View File

@ -0,0 +1,471 @@
// <auto-generated />
using System;
using BankDatabaseImplement;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace BankDatabaseImplement.Migrations
{
[DbContext(typeof(BankDatabase))]
partial class BankDatabaseModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.17")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("BankDatabaseImplement.Models.Account", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int>("ManagerId")
.HasColumnType("int");
b.Property<int>("Money")
.HasColumnType("int");
b.Property<string>("Number")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("ReleaseDate")
.HasColumnType("datetime2");
b.HasKey("Id");
b.HasIndex("ManagerId");
b.ToTable("Accounts");
});
modelBuilder.Entity("BankDatabaseImplement.Models.AccountWithdrawal", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int>("AccountId")
.HasColumnType("int");
b.Property<int>("Sum")
.HasColumnType("int");
b.Property<int>("WithdrawalId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("AccountId");
b.HasIndex("WithdrawalId");
b.ToTable("AccountWithdrawals");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Card", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int?>("AccountId")
.IsRequired()
.HasColumnType("int");
b.Property<int>("ClientId")
.HasColumnType("int");
b.Property<string>("Cvv")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("ExpirationDate")
.HasColumnType("datetime2");
b.Property<string>("Number")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Pin")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("ReleaseDate")
.HasColumnType("datetime2");
b.HasKey("Id");
b.HasIndex("AccountId");
b.HasIndex("ClientId");
b.ToTable("Cards");
});
modelBuilder.Entity("BankDatabaseImplement.Models.CardRequest", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int>("CardId")
.HasColumnType("int");
b.Property<int>("RequestId")
.HasColumnType("int");
b.Property<int>("Sum")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("CardId");
b.HasIndex("RequestId");
b.ToTable("CardRequests");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Client", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("Email")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Fio")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Password")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("Clients");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Manager", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("Email")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Fio")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Password")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("Managers");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Operation", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<DateTime>("OperationTime")
.HasColumnType("datetime2");
b.Property<int>("RecipientCardId")
.HasColumnType("int");
b.Property<int?>("SenderCardId")
.IsRequired()
.HasColumnType("int");
b.Property<int>("Sum")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("RecipientCardId");
b.HasIndex("SenderCardId");
b.ToTable("Operations");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Request", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<DateTime>("RequestTime")
.HasColumnType("datetime2");
b.Property<int>("Status")
.HasColumnType("int");
b.Property<int>("Sum")
.HasColumnType("int");
b.HasKey("Id");
b.ToTable("Requests");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Transfer", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int?>("OperationId")
.IsRequired()
.HasColumnType("int");
b.Property<int>("RecipientAccountId")
.HasColumnType("int");
b.Property<int>("SenderAccountId")
.HasColumnType("int");
b.Property<int>("Sum")
.HasColumnType("int");
b.Property<DateTime>("TransferTime")
.HasColumnType("datetime2");
b.HasKey("Id");
b.HasIndex("OperationId");
b.HasIndex("RecipientAccountId");
b.HasIndex("SenderAccountId");
b.ToTable("Transfers");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Withdrawal", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int?>("RequestId")
.IsRequired()
.HasColumnType("int");
b.Property<DateTime>("WithdrawalTime")
.HasColumnType("datetime2");
b.HasKey("Id");
b.HasIndex("RequestId");
b.ToTable("Withdrawals");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Account", b =>
{
b.HasOne("BankDatabaseImplement.Models.Manager", "Manager")
.WithMany("Accounts")
.HasForeignKey("ManagerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Manager");
});
modelBuilder.Entity("BankDatabaseImplement.Models.AccountWithdrawal", b =>
{
b.HasOne("BankDatabaseImplement.Models.Account", "Account")
.WithMany("AccountWithdrawals")
.HasForeignKey("AccountId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("BankDatabaseImplement.Models.Withdrawal", "Withdrawal")
.WithMany("Accounts")
.HasForeignKey("WithdrawalId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Account");
b.Navigation("Withdrawal");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Card", b =>
{
b.HasOne("BankDatabaseImplement.Models.Account", "Account")
.WithMany()
.HasForeignKey("AccountId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("BankDatabaseImplement.Models.Client", "Client")
.WithMany("Cards")
.HasForeignKey("ClientId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Account");
b.Navigation("Client");
});
modelBuilder.Entity("BankDatabaseImplement.Models.CardRequest", b =>
{
b.HasOne("BankDatabaseImplement.Models.Card", "Card")
.WithMany("CardRequests")
.HasForeignKey("CardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("BankDatabaseImplement.Models.Request", "Request")
.WithMany("Cards")
.HasForeignKey("RequestId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Card");
b.Navigation("Request");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Operation", b =>
{
b.HasOne("BankDatabaseImplement.Models.Card", "RecipientCard")
.WithMany("RecipientOperations")
.HasForeignKey("RecipientCardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("BankDatabaseImplement.Models.Card", "SenderCard")
.WithMany("SenderOperations")
.HasForeignKey("SenderCardId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("RecipientCard");
b.Navigation("SenderCard");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Transfer", b =>
{
b.HasOne("BankDatabaseImplement.Models.Operation", "Operation")
.WithMany()
.HasForeignKey("OperationId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("BankDatabaseImplement.Models.Account", "RecipientAccount")
.WithMany("RecipientTransfers")
.HasForeignKey("RecipientAccountId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("BankDatabaseImplement.Models.Account", "SenderAccount")
.WithMany("SenderTransfers")
.HasForeignKey("SenderAccountId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Operation");
b.Navigation("RecipientAccount");
b.Navigation("SenderAccount");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Withdrawal", b =>
{
b.HasOne("BankDatabaseImplement.Models.Request", "Request")
.WithMany()
.HasForeignKey("RequestId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Request");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Account", b =>
{
b.Navigation("AccountWithdrawals");
b.Navigation("RecipientTransfers");
b.Navigation("SenderTransfers");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Card", b =>
{
b.Navigation("CardRequests");
b.Navigation("RecipientOperations");
b.Navigation("SenderOperations");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Client", b =>
{
b.Navigation("Cards");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Manager", b =>
{
b.Navigation("Accounts");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Request", b =>
{
b.Navigation("Cards");
});
modelBuilder.Entity("BankDatabaseImplement.Models.Withdrawal", b =>
{
b.Navigation("Accounts");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -21,7 +21,7 @@ namespace BankDatabaseImplement.Models
[Required]
public int Money { get; set; }
[Required]
public DateOnly ReleaseDate { get; set; }
public DateTime ReleaseDate { get; set; }
[Required]
public int ManagerId { get; set; }
public virtual Manager? Manager { get; private set; }
@ -39,7 +39,7 @@ namespace BankDatabaseImplement.Models
{
Id = model.Id,
Number = model.Number,
ReleaseDate = DateOnly.FromDateTime(DateTime.Now),
ReleaseDate = DateTime.Now,
ManagerId = model.ManagerId,
Money = 0,
};

View File

@ -22,9 +22,9 @@ namespace BankDatabaseImplement.Models
[Required]
public string Pin { get; set; } = string.Empty;
[Required]
public DateOnly ReleaseDate { get; set; }
public DateTime ReleaseDate { get; set; }
[Required]
public DateOnly ExpirationDate { get; set; }
public DateTime ExpirationDate { get; set; }
[Required]
public int ClientId { get; set; }
public virtual Client? Client { get; private set; }
@ -47,8 +47,8 @@ namespace BankDatabaseImplement.Models
Number = model.Number,
Cvv = model.Cvv,
Pin = model.Pin,
ReleaseDate = DateOnly.FromDateTime(DateTime.Now),
ExpirationDate = DateOnly.FromDateTime(DateTime.Now).AddYears(3),
ReleaseDate = DateTime.Now,
ExpirationDate = DateTime.Now.AddYears(3),
ClientId = model.ClientId,
AccountId = model.AccountId,
};

View File

@ -4,6 +4,7 @@ using BankDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -22,10 +23,10 @@ namespace BankDatabaseImplement.Models
public virtual Operation? Operation { get; set; } = null;
[Required]
public int SenderAccountId { get; set; }
public virtual Account? SenderAccount { get; set; }
public virtual Account? SenderAccount { get; private set; }
[Required]
public int RecipientAccountId { get; set; }
public virtual Account? RecipientAccount { get; set; }
public virtual Account? RecipientAccount { get; private set; }
public static Transfer? Create(TransferBindingModel model)
{