- Added JWT configuration to appsettings.json for secure token handling. - Updated config.json to include OAuth provider details for Microsoft, Google, and PocketId. - Added Microsoft icon SVG for UI representation. - Refactored app.config.ts to use a custom AuthInterceptor for managing access tokens. - Enhanced auth route guard to handle asynchronous authentication checks. - Created new auth models for structured request and response handling. - Developed a callback component to manage user login states and transitions. - Updated side-login component to support multiple OAuth providers with loading states. - Implemented authentication service methods for handling OAuth login flows and token management. - Added error handling and user feedback for authentication processes.
58 lines
2.2 KiB
C#
Executable File
58 lines
2.2 KiB
C#
Executable File
using Microsoft.EntityFrameworkCore;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Api.Models
|
|
{
|
|
public class Product
|
|
{
|
|
public int Id { get; set; }
|
|
public string? Name { get; set; }
|
|
public decimal Price { get; set; }
|
|
}
|
|
|
|
public class AppDbContext : DbContext
|
|
{
|
|
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
|
|
public DbSet<Product> Products { get; set; }
|
|
public DbSet<WebMessage> WebMessages { get; set; }
|
|
public DbSet<User> Users { get; set; }
|
|
public DbSet<UserOAuthProvider> UserOAuthProviders { get; set; }
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
{
|
|
base.OnModelCreating(modelBuilder);
|
|
|
|
// Configure User entity
|
|
modelBuilder.Entity<User>(entity =>
|
|
{
|
|
entity.HasKey(e => e.Id);
|
|
entity.HasIndex(e => e.Email).IsUnique();
|
|
entity.Property(e => e.Email).IsRequired().HasMaxLength(255);
|
|
entity.Property(e => e.FirstName).HasMaxLength(255);
|
|
entity.Property(e => e.LastName).HasMaxLength(255);
|
|
entity.Property(e => e.ProfilePictureUrl).HasMaxLength(500);
|
|
});
|
|
|
|
// Configure UserOAuthProvider entity
|
|
modelBuilder.Entity<UserOAuthProvider>(entity =>
|
|
{
|
|
entity.HasKey(e => e.Id);
|
|
entity.HasIndex(e => new { e.Provider, e.ProviderId }).IsUnique();
|
|
entity.Property(e => e.ProviderId).IsRequired().HasMaxLength(255);
|
|
entity.Property(e => e.ProviderEmail).HasMaxLength(255);
|
|
entity.Property(e => e.ProviderName).HasMaxLength(255);
|
|
|
|
entity.HasOne(e => e.User)
|
|
.WithMany(u => u.OAuthProviders)
|
|
.HasForeignKey(e => e.UserId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
});
|
|
|
|
// Seed data
|
|
modelBuilder.Entity<Product>().HasData(
|
|
new Product { Id = 1, Name = "Sample Product", Price = 9.99M }
|
|
);
|
|
}
|
|
}
|
|
}
|