БД - gro1vy/DeliverServiceAPI GitHub Wiki

User

Данная модель используется для хранения информации о пользователе в базе данных, отдельно стоит отметить, что пароль хранится в захэшированном виде. Про использование бд в проекте можно узнать в вики в раздели 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; }
}

Rating

Данная модель используется для хранения информации об оценке, которую поставил пользователь конкретному блюду, в базе данных. Про использование бд в проекте можно узнать в вики в раздели 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; }
}

Order

Данная модель используется для хранения информации о конкретном заказе пользователя в базе данных, стоит отметить, что в 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; }
}

RegionTimeZone

Данная модель используется для хранения информации о разности времени в конкретном регионе с Москвой в базе данных. Про использование бд в проекте можно узнать в вики в раздели 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; }
}

House

Данная модель используется для хранения информации о доме в базе данных, причем используются только идентификаторы и 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; }
}

Hierarchy

Данная модель используется для хранения информации о ребенке родительского элемента из 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; }
}

AddressElement

Данная модель используется для хранения информации о адресном элементе в базе данных, в 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; }
}

DishInCart

Данная модель используется для хранения информации о блюде, которое было добавлено в корзину пользователя, в базе данных, причем в зависимости от 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; }
}

Dish

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; }
}

RefreshTokens

Данная модель используется для хранения информации об 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; }
}

ApplicationDbContext

Ниже представлен контекст бд используемый в проекте. В нем в полях указаны все модели, которые были перечислены выше, также можно увидеть в 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();
    }
}
⚠️ **GitHub.com Fallback** ⚠️