refactor: add validation data annotatison to database models
This commit is contained in:
parent
acb7daf0cd
commit
cbba5c7372
@ -11,7 +11,7 @@ using TicketOffice.Data;
|
||||
namespace TicketOffice.Migrations
|
||||
{
|
||||
[DbContext(typeof(TicketOfficeContext))]
|
||||
[Migration("20220330145408_InitialCreate")]
|
||||
[Migration("20220331173119_InitialCreate")]
|
||||
partial class InitialCreate
|
||||
{
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
@ -33,6 +33,7 @@ namespace TicketOffice.Migrations
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasMaxLength(24)
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<int>("RouteId")
|
||||
@ -91,22 +92,27 @@ namespace TicketOffice.Migrations
|
||||
|
||||
b.Property<string>("Email")
|
||||
.IsRequired()
|
||||
.HasMaxLength(48)
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("FirstName")
|
||||
.HasMaxLength(24)
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool>("IsManager")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("LastName")
|
||||
.HasMaxLength(24)
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Password")
|
||||
.IsRequired()
|
||||
.HasMaxLength(32)
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Patronymic")
|
||||
.HasMaxLength(24)
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.HasKey("Id");
|
@ -29,11 +29,11 @@ namespace TicketOffice.Migrations
|
||||
{
|
||||
Id = table.Column<int>(type: "INTEGER", nullable: false)
|
||||
.Annotation("Sqlite:Autoincrement", true),
|
||||
FirstName = table.Column<string>(type: "TEXT", nullable: true),
|
||||
LastName = table.Column<string>(type: "TEXT", nullable: true),
|
||||
Patronymic = table.Column<string>(type: "TEXT", nullable: true),
|
||||
Email = table.Column<string>(type: "TEXT", nullable: false),
|
||||
Password = table.Column<string>(type: "TEXT", nullable: false),
|
||||
FirstName = table.Column<string>(type: "TEXT", maxLength: 24, nullable: true),
|
||||
LastName = table.Column<string>(type: "TEXT", maxLength: 24, nullable: true),
|
||||
Patronymic = table.Column<string>(type: "TEXT", maxLength: 24, nullable: true),
|
||||
Email = table.Column<string>(type: "TEXT", maxLength: 48, nullable: false),
|
||||
Password = table.Column<string>(type: "TEXT", maxLength: 32, nullable: false),
|
||||
IsManager = table.Column<bool>(type: "INTEGER", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
@ -47,7 +47,7 @@ namespace TicketOffice.Migrations
|
||||
{
|
||||
Id = table.Column<int>(type: "INTEGER", nullable: false)
|
||||
.Annotation("Sqlite:Autoincrement", true),
|
||||
Name = table.Column<string>(type: "TEXT", nullable: false),
|
||||
Name = table.Column<string>(type: "TEXT", maxLength: 24, nullable: false),
|
||||
ArrivalTime = table.Column<DateTime>(type: "TEXT", nullable: true),
|
||||
DepartureTime = table.Column<DateTime>(type: "TEXT", nullable: true),
|
||||
RouteId = table.Column<int>(type: "INTEGER", nullable: false)
|
@ -31,6 +31,7 @@ namespace TicketOffice.Migrations
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasMaxLength(24)
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<int>("RouteId")
|
||||
@ -89,22 +90,27 @@ namespace TicketOffice.Migrations
|
||||
|
||||
b.Property<string>("Email")
|
||||
.IsRequired()
|
||||
.HasMaxLength(48)
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("FirstName")
|
||||
.HasMaxLength(24)
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool>("IsManager")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("LastName")
|
||||
.HasMaxLength(24)
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Password")
|
||||
.IsRequired()
|
||||
.HasMaxLength(32)
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Patronymic")
|
||||
.HasMaxLength(24)
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
@ -1,15 +1,29 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace TicketOffice.Models;
|
||||
|
||||
public class City
|
||||
{
|
||||
[Key]
|
||||
public int Id { get; set; }
|
||||
|
||||
[MaxLength(24, ErrorMessage = "Назва міста не може бути більше 24 символів"),
|
||||
MinLength(2, ErrorMessage = "Назва міста не може бути менше 2 символів")]
|
||||
[Display(Name = "Назва міста")]
|
||||
[Required(ErrorMessage = "Поле має бути заповненим")]
|
||||
public string Name { get; set; }
|
||||
|
||||
[Display(Name = "Дата відправлення")]
|
||||
[DataType(DataType.Date)]
|
||||
public DateTime? ArrivalTime { get; set; }
|
||||
|
||||
[Display(Name = "Дата прибуття")]
|
||||
[DataType(DataType.Date)]
|
||||
public DateTime? DepartureTime { get; set; }
|
||||
|
||||
|
||||
[ForeignKey("Route")]
|
||||
public int RouteId { get; set; }
|
||||
public Route Route { get; set; }
|
||||
}
|
@ -1,14 +1,27 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace TicketOffice.Models;
|
||||
|
||||
public class Route
|
||||
{
|
||||
[Key]
|
||||
public int Id { get; set; }
|
||||
|
||||
|
||||
[Required(ErrorMessage = "Поле має бути заповненим")]
|
||||
[Display(Name = "Номер")]
|
||||
[Range(1, 256)]
|
||||
public int Number { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "Поле має бути заповненим")]
|
||||
[Display(Name = "Ємність")]
|
||||
[Range(5, 40)]
|
||||
public int Capacity { get; set; }
|
||||
|
||||
|
||||
[Required]
|
||||
public ICollection<City> Cities { get; set; }
|
||||
public ICollection<Ticket>? Tickets { get; set; }
|
||||
}
|
@ -8,7 +8,8 @@ public class SeedData
|
||||
public static void Initialize(IServiceProvider serviceProvider)
|
||||
{
|
||||
using var context =
|
||||
new TicketOfficeContext(serviceProvider.GetRequiredService<DbContextOptions<TicketOfficeContext>>());
|
||||
new TicketOfficeContext(serviceProvider
|
||||
.GetRequiredService<DbContextOptions<TicketOfficeContext>>());
|
||||
|
||||
if (context == null)
|
||||
{
|
||||
|
@ -1,12 +1,18 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace TicketOffice.Models;
|
||||
|
||||
public class Ticket
|
||||
{
|
||||
[Key]
|
||||
public int Id { get; set; }
|
||||
|
||||
[ForeignKey("User")]
|
||||
public int UserId { get; set; }
|
||||
public User User { get; set; }
|
||||
|
||||
[ForeignKey("Route")]
|
||||
public int RouteId { get; set; }
|
||||
public Route Route { get; set; }
|
||||
}
|
@ -1,18 +1,50 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Net.Mail;
|
||||
|
||||
namespace TicketOffice.Models;
|
||||
|
||||
public class User
|
||||
{
|
||||
[Key]
|
||||
public int Id { get; set; }
|
||||
|
||||
[MaxLength(24, ErrorMessage = "Ім'я не може бути більше 24 символів"),
|
||||
MinLength(4, ErrorMessage = "Ім'я не може бути менше 4 символів")]
|
||||
[Display(Name = "Ім'я")]
|
||||
public string? FirstName { get; set; }
|
||||
|
||||
[MaxLength(24, ErrorMessage = "Прізвище не може бути більше 24 символів"),
|
||||
MinLength(4, ErrorMessage = "Прізвище не може бути менше 4 символів")]
|
||||
[Display(Name = "Прізвище")]
|
||||
public string? LastName { get; set; }
|
||||
|
||||
[MaxLength(24, ErrorMessage = "Ім'я по батькові не може бути більше 24 символів"),
|
||||
MinLength(4, ErrorMessage = "Ім'я по батькові не може бути менше 4 символів")]
|
||||
[Display(Name = "По батькові")]
|
||||
public string? Patronymic { get; set; }
|
||||
|
||||
|
||||
[MaxLength(48, ErrorMessage = "E-mail не може бути більше 48 символів"),
|
||||
MinLength(6, ErrorMessage = "E-mail не може бути менше 6 символів")]
|
||||
[Required(ErrorMessage = "Поле має бути заповненим")]
|
||||
[Display(Name = "E-mail")]
|
||||
[DataType(DataType.EmailAddress)]
|
||||
[RegularExpression(@"^[^@\s]+@[^@\s]+\.[^@\s]+$",
|
||||
ErrorMessage = "E-mail невалідний")]
|
||||
public string Email { get; set; }
|
||||
|
||||
[MaxLength(32, ErrorMessage = "Пароль не може бути більше 32 символів"),
|
||||
MinLength(8, ErrorMessage = "Пороль не може бути менше 8 символів")]
|
||||
[Required(ErrorMessage = "Поле має бути заповненим")]
|
||||
[Display(Name = "Пароль")]
|
||||
[DataType(DataType.Password)]
|
||||
[RegularExpression(@"^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$",
|
||||
ErrorMessage = "Пароль має містити 1 маленьку та велику літери, 1 цифру, 1 спеціальний символ (#, $, @ та ін.), бути написаний латиницею та мати більше 8 символів")]
|
||||
public string Password { get; set; }
|
||||
|
||||
|
||||
public ICollection<Ticket>? Tickets { get; set; }
|
||||
|
||||
[Required]
|
||||
public bool IsManager { get; set; }
|
||||
}
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user