БД - gro1vy/DeliverServiceAPI GitHub Wiki
Данная модель используется для хранения информации о пользователе в базе данных, отдельно стоит отметить, что пароль хранится в захэшированном виде. Про использование бд в проекте можно узнать в вики в раздели Entity Framework. Также про контекст бд, используемый в проекте, можно узнать ниже.
public class User
{
public Guid Id { get; set; }
[MinLength(1)]
public string FullName { get; set; }
public string HashPassword { get; set; }
public DateTime? BirthDate { get; set; }
public Gender Gender { get; set; }
public string? PhoneNumber { get; set; }
[EmailAddress]
public string Email { get; set; }
public Guid? AddressId { get; set; }
}
Данная модель используется для хранения информации об оценке, которую поставил пользователь конкретному блюду, в базе данных. Про использование бд в проекте можно узнать в вики в раздели Entity Framework. Также про контекст бд, используемый в проекте, можно узнать ниже.
public class Rating
{
public Guid UserId { get; set; }
public Guid DishId { get; set; }
public double Value { get; set; }
public User User { get; set; }
public Dish Dish { get; set; }
}
Данная модель используется для хранения информации о конкретном заказе пользователя в базе данных, стоит отметить, что в AddressId хранится Guid House. Про использование бд в проекте можно узнать в вики в раздели Entity Framework. Также про контекст бд, используемый в проекте, можно узнать ниже.
public class Order
{
public Guid Id { get; set; }
public Guid UserId { get; set; }
public DateTime DeliveryTime { get; set; }
public DateTime OrderTime { get; set; }
public double Price { get; set; }
public Guid AddressId { get; set; }
public Status Status { get; set; }
public User User { get; set; }
}
Данная модель используется для хранения информации о разности времени в конкретном регионе с Москвой в базе данных. Про использование бд в проекте можно узнать в вики в раздели Entity Framework. Также про контекст бд, используемый в проекте, можно узнать ниже.
public class RegionTimeZone
{
public Guid Id { get; set; }
public int RegionId { get; set; }
public string Region { get; set; }
public int TimeDifferenceWithMoscow { get; set; }
}
Данная модель используется для хранения информации о доме в базе данных, причем используются только идентификаторы и FullName. Про использование бд в проекте можно узнать в вики в раздели Entity Framework. Также про контекст бд, используемый в проекте, можно узнать ниже.
public class House
{
public int Id { get; set; }
public int Objectid { get; set; }
public Guid Objectguid { get; set; }
public string FullName { get; set; } = string.Empty;
public string? Housenum { get; set; }
public string? Addnum1 { get; set; }
public string? Addnum2 { get; set; }
public int? Housetype { get; set; }
public int? Addtype1 { get; set; }
public int? Addtype2 { get; set; }
public int Isactive { get; set; }
}
Данная модель используется для хранения информации о ребенке родительского элемента из AddressElement в базе данных. Про использование бд в проекте можно узнать в вики в раздели Entity Framework. Также про контекст бд, используемый в проекте, можно узнать ниже.
public class Hierarchy
{
public int Id { get; set; }
public int Objectid { get; set; }
public int Parentobjid { get; set; }
public int Isactive { get; set; }
public string Path { get; set; }
}
Данная модель используется для хранения информации о адресном элементе в базе данных, в Name хранится название элемента, а в Typename его тип. Про использование бд в проекте можно узнать в вики в раздели Entity Framework. Также про контекст бд, используемый в проекте, можно узнать ниже.
public class AddressElement
{
public int Id { get; set; }
public int Objectid { get; set; }
public Guid Objectguid { get; set; }
public string Name { get; set; }
public string Typename { get; set; }
public string Level { get; set; }
public int Isactive { get; set; }
}
Данная модель используется для хранения информации о блюде, которое было добавлено в корзину пользователя, в базе данных, причем в зависимости от Order, это блюдо может находится либо в текущей корзине, либо в корзине сделанного заказа, соотвественно, если Order null, то первое, иначе второе. Про использование бд в проекте можно узнать в вики в раздели Entity Framework. Также про контекст бд, используемый в проекте, можно узнать ниже.
public class DishInCart
{
public Guid Id { get; set; }
public Guid UserId { get; set; }
public Guid DishId { get; set; }
public Guid? OrderId { get; set; }
public int Count { get; set; }
public User User { get; set; }
public Dish Dish { get; set; }
public Order? Order { get; set; }
}
public class Dish
{
public Guid Id { get; set; }
public string Name { get; set; }
public double Price { get; set; }
public string Description { get; set; }
public bool IsVegetairian { get; set; }
public string Image { get; set; }
public decimal? Rating { get; set; }
public DishCategory Category { get; set; }
}
Данная модель используется для хранения информации об refresh токене и JTI access токена, который был выдан с помощью refresh токена, AccessTokenJTI хранит Guid access токена, то есть уникальный идентификатор. Про использование бд в проекте можно узнать в вики в раздели Entity Framework. Также про контекст бд, используемый в проекте, можно узнать ниже.
public class RefreshTokens
{
public int Id { get; set; }
public Guid UserId { get; set; }
public string RefreshToken { get; set; }
public Guid AccessTokenJTI { get; set; }
public DateTime Expires { get; set; }
public User User { get; set; }
}
Ниже представлен контекст бд используемый в проекте. В нем в полях указаны все модели, которые были перечислены выше, также можно увидеть в OnModelCreating, какие связи имеют некоторые модели друг с другом. Про использование бд в проекте можно узнать в вики в раздели Entity Framework.
public class ApplicationDbContext : DbContext
{
public DbSet<Dish> Dishes { get; set; }
// Остальные выше перечисленные модели
// ...
public DbSet<DeletedTokens> DeletedTokens { get; set; }
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options){ }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Adding restrictions for the Rating link
modelBuilder.Entity<Rating>()
.HasOne(rating => rating.Dish)
.WithMany(/*dish => dish.Ratings*/)
.HasForeignKey(rating => rating.DishId)
.IsRequired();
modelBuilder.Entity<Rating>()
.HasOne(rating => rating.User)
.WithMany(/*user => user.Ratings*/)
.HasForeignKey(rating => rating.UserId)
.IsRequired();
modelBuilder.Entity<Rating>()
.HasKey(rating => new { rating.DishId, rating.UserId });
// Adding restrictions for the DishInCart link
modelBuilder.Entity<DishInCart>()
.HasOne(dishInCart => dishInCart.Dish)
.WithMany()
.HasForeignKey(dishInCart => dishInCart.DishId)
.IsRequired();
modelBuilder.Entity<DishInCart>()
.HasOne(dishInCart => dishInCart.User)
.WithMany()
.HasForeignKey(dishInCart => dishInCart.UserId)
.IsRequired();
modelBuilder.Entity<DishInCart>()
.HasKey(dishInCart => dishInCart.Id);
// Adding restrictions for the Order link
modelBuilder.Entity<Order>()
.HasOne(order => order.User)
.WithMany(/*user => user.Orders*/)
.HasForeignKey(order => order.UserId)
.IsRequired();
}
}