# Task 2: Create Database Models ## Task Description **Files:** - Create: `src/Fengling.AuthService/Data/ApplicationDbContext.cs` - Create: `src/Fengling.AuthService/Models/ApplicationUser.cs` - Create: `src/Fengling.AuthService/Models/ApplicationRole.cs` - Create: `src/Fengling.AuthService/Data/Migrations/20250201_InitialCreate.cs` ## Implementation Steps ### Step 1: Create ApplicationUser model Create: `src/Fengling.AuthService/Models/ApplicationUser.cs` ```csharp using Microsoft.AspNetCore.Identity; namespace Fengling.AuthService.Models; public class ApplicationUser : IdentityUser { public string? RealName { get; set; } public string? Phone { get; set; } public long TenantId { get; set; } public DateTime CreatedTime { get; set; } = DateTime.UtcNow; public DateTime? UpdatedTime { get; set; } public bool IsDeleted { get; set; } } ``` ### Step 2: Create ApplicationRole model Create: `src/Fengling.AuthService/Models/ApplicationRole.cs` ```csharp using Microsoft.AspNetCore.Identity; namespace Fengling.AuthService.Models; public class ApplicationRole : IdentityRole { public string? Description { get; set; } public DateTime CreatedTime { get; set; } = DateTime.UtcNow; } ``` ### Step 3: Create ApplicationDbContext Create: `src/Fengling.AuthService/Data/ApplicationDbContext.cs` ```csharp using Fengling.AuthService.Models; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; namespace Fengling.AuthService.Data; public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); builder.Entity(entity => { entity.Property(e => e.RealName).HasMaxLength(100); entity.Property(e => e.Phone).HasMaxLength(20); entity.HasIndex(e => e.TenantId); entity.HasIndex(e => e.Phone).IsUnique(); }); builder.Entity(entity => { entity.Property(e => e.Description).HasMaxLength(200); }); } } ``` ### Step 4: Add migration Run: ```bash cd /Users/movingsam/Fengling.Refactory.Buiding/src/Fengling.AuthService dotnet ef migrations add InitialCreate -o Data/Migrations ``` ### Step 5: Update database Run: ```bash dotnet ef database update ``` ### Step 6: Commit ```bash git add src/Fengling.AuthService/Models/ src/Fengling.AuthService/Data/ git commit -m "feat(auth): add user and role models with EF Core migrations" ``` ## Context This task creates the database models for users and roles with multi-tenant support. We're using ASP.NET Core Identity with long primary keys (IdentityUser) and adding custom properties like RealName, Phone, and TenantId for multi-tenant isolation. **Tech Stack**: EF Core 9.0, PostgreSQL, ASP.NET Core Identity ## Verification - [ ] ApplicationUser model created with long key type and custom properties - [ ] ApplicationRole model created with description property - [ ] ApplicationDbContext configured with proper entity configurations - [ ] EF Core migration generated successfully - [ ] Database updated with schema - [ ] Committed to git ## Notes - Using long (Int64) as key type for better scalability - TenantId added to ApplicationUser for multi-tenant support - Phone number has unique index constraint