diff --git a/src/DevBetterWeb.Core/Entities/Member.cs b/src/DevBetterWeb.Core/Entities/Member.cs
index 2dceefd86..a618a10f3 100644
--- a/src/DevBetterWeb.Core/Entities/Member.cs
+++ b/src/DevBetterWeb.Core/Entities/Member.cs
@@ -346,7 +346,7 @@ public void ExtendCurrentSubscription(DateTime newEndDate)
MemberSubscription s = MemberSubscriptions[i];
if (s.Dates.Contains(DateTime.Today))
{
- s.Dates = new DateTimeRange(s.Dates.StartDate, newEndDate);
+ s.Dates.UpdateEnd(newEndDate);
RegisterDomainEvent(new SubscriptionUpdatedEvent(this, s));
}
}
diff --git a/src/DevBetterWeb.Core/Services/MemberSubscriptionRenewalService.cs b/src/DevBetterWeb.Core/Services/MemberSubscriptionRenewalService.cs
index 125e938f7..8b7a7edcb 100644
--- a/src/DevBetterWeb.Core/Services/MemberSubscriptionRenewalService.cs
+++ b/src/DevBetterWeb.Core/Services/MemberSubscriptionRenewalService.cs
@@ -30,6 +30,7 @@ public async Task ExtendMemberSubscription(string email, System.DateTime subscri
if (member is null) throw new MemberWithEmailNotFoundException(email);
member.ExtendCurrentSubscription(subscriptionEndDate);
+ await _memberRepository.UpdateAsync(member);
await _memberRepository.SaveChangesAsync();
_logger.LogInformation($"Extended {member.UserFullName} subscription to {subscriptionEndDate.ToShortDateString}");
diff --git a/src/DevBetterWeb.Core/ValueObjects/DateTimeRange.cs b/src/DevBetterWeb.Core/ValueObjects/DateTimeRange.cs
index 650f9128d..cafb1e3ee 100644
--- a/src/DevBetterWeb.Core/ValueObjects/DateTimeRange.cs
+++ b/src/DevBetterWeb.Core/ValueObjects/DateTimeRange.cs
@@ -17,13 +17,18 @@ public DateTimeRange(DateTime startDate, DateTime? endDate)
EndDate = endDate;
}
- ///
- /// Returns total number of days in the DateTimeRange.
- /// If no EndDate has been specified, will use provided endDateToUseIfMissing instead.
- ///
- ///
- ///
- public int ToDays(DateTime endDateToUseIfMissing)
+ public void UpdateEnd(DateTime endDate)
+ {
+ EndDate = endDate;
+ }
+
+ ///
+ /// Returns total number of days in the DateTimeRange.
+ /// If no EndDate has been specified, will use provided endDateToUseIfMissing instead.
+ ///
+ ///
+ ///
+ public int ToDays(DateTime endDateToUseIfMissing)
{
var end = EndDate ?? endDateToUseIfMissing;
@@ -48,14 +53,13 @@ public int ToDaysInRangeThroughPeriodEndDate(DateTime periodEndDate)
public bool Contains(DateTime date)
{
- if (date >= StartDate && date <= EndDate)
- {
- return true;
- }
- return false;
+ if (date < StartDate) return false;
+ if (EndDate == null) return true;
+
+ return date <= EndDate;
}
- protected override IEnumerable GetEqualityComponents()
+ protected override IEnumerable GetEqualityComponents()
{
yield return StartDate;
yield return EndDate ?? DateTime.MaxValue;
diff --git a/src/DevBetterWeb.Infrastructure/Data/Config/MemberSubscriptionConfig.cs b/src/DevBetterWeb.Infrastructure/Data/Config/MemberSubscriptionConfig.cs
index 288486b15..43f0035be 100644
--- a/src/DevBetterWeb.Infrastructure/Data/Config/MemberSubscriptionConfig.cs
+++ b/src/DevBetterWeb.Infrastructure/Data/Config/MemberSubscriptionConfig.cs
@@ -8,7 +8,7 @@ class MemberSubscriptionConfig : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
- builder.OwnsOne(x => x.Dates)
- .ToTable("MemberSubscriptionDates");
- }
+ builder
+ .ComplexProperty(x => x.Dates);
+ }
}
diff --git a/src/DevBetterWeb.Infrastructure/Data/Migrations/20250505144319_ComplexPropertyForDates.Designer.cs b/src/DevBetterWeb.Infrastructure/Data/Migrations/20250505144319_ComplexPropertyForDates.Designer.cs
new file mode 100644
index 000000000..532d2bcf1
--- /dev/null
+++ b/src/DevBetterWeb.Infrastructure/Data/Migrations/20250505144319_ComplexPropertyForDates.Designer.cs
@@ -0,0 +1,939 @@
+//
+using System;
+using System.Collections.Generic;
+using DevBetterWeb.Infrastructure.Data;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace DevBetterWeb.Infrastructure.Data.Migrations
+{
+ [DbContext(typeof(AppDbContext))]
+ [Migration("20250505144319_ComplexPropertyForDates")]
+ partial class ComplexPropertyForDates
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "9.0.4")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("BookMember", b =>
+ {
+ b.Property("BooksReadId")
+ .HasColumnType("int");
+
+ b.Property("MembersWhoHaveReadId")
+ .HasColumnType("int");
+
+ b.HasKey("BooksReadId", "MembersWhoHaveReadId");
+
+ b.HasIndex("MembersWhoHaveReadId");
+
+ b.ToTable("BookMember");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.ArchiveVideo", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("AnimatedThumbnailUri")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DateCreated")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("DateUploaded")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Duration")
+ .HasColumnType("int");
+
+ b.Property("Status")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Title")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("VideoId")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("VideoUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("Views")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.ToTable("ArchiveVideos");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.BillingActivity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("MemberId")
+ .HasMaxLength(500)
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("MemberId");
+
+ b.ToTable("BillingActivities");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.Book", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Author")
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
+
+ b.Property("BookCategoryId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasDefaultValue(1);
+
+ b.Property("Details")
+ .HasMaxLength(2000)
+ .HasColumnType("nvarchar(2000)");
+
+ b.Property("MemberWhoUploadId")
+ .HasColumnType("int");
+
+ b.Property("PurchaseUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("Title")
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("BookCategoryId");
+
+ b.HasIndex("MemberWhoUploadId");
+
+ b.ToTable("Books");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.BookCategory", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Title")
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
+
+ b.HasKey("Id");
+
+ b.ToTable("BookCategories");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.CoachingSession", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("StartAt")
+ .HasColumnType("datetime2");
+
+ b.HasKey("Id");
+
+ b.ToTable("CoachingSessions", (string)null);
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.DailyCheck", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Date")
+ .HasColumnType("datetime2");
+
+ b.Property("TasksCompleted")
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
+
+ b.HasKey("Id");
+
+ b.ToTable("DailyChecks");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.Invitation", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Active")
+ .HasColumnType("bit");
+
+ b.Property("DateCreated")
+ .HasColumnType("datetime2");
+
+ b.Property("DateOfLastAdminPing")
+ .HasColumnType("datetime2");
+
+ b.Property("DateOfUserPing")
+ .HasColumnType("datetime2");
+
+ b.Property("Email")
+ .IsRequired()
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("InviteCode")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
+
+ b.Property("PaymentHandlerSubscriptionId")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Invitations");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.Member", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("AboutInfo")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Address")
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
+
+ b.Property("BlogUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("BlueskyUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("CityLatitude")
+ .HasColumnType("decimal(18,2)");
+
+ b.Property("CityLongitude")
+ .HasColumnType("decimal(18,2)");
+
+ b.Property("CodinGameUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("DateCreated")
+ .HasColumnType("datetime2");
+
+ b.Property("DiscordUsername")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("Email")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("FirstName")
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
+
+ b.Property("GitHubUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("LastName")
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
+
+ b.Property("LinkedInUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("MastodonUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("OtherUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("PEFriendCode")
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
+
+ b.Property("PEUsername")
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
+
+ b.Property("TwitchUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("TwitterUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("UserId")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
+
+ b.Property("YouTubeUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Members");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.MemberSubscription", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("MemberId")
+ .HasColumnType("int");
+
+ b.Property("MemberSubscriptionPlanId")
+ .HasColumnType("int");
+
+ b.ComplexProperty>("Dates", "DevBetterWeb.Core.Entities.MemberSubscription.Dates#DateTimeRange", b1 =>
+ {
+ b1.IsRequired();
+
+ b1.Property("EndDate")
+ .HasColumnType("datetime2");
+
+ b1.Property("StartDate")
+ .HasColumnType("datetime2");
+ });
+
+ b.HasKey("Id");
+
+ b.HasIndex("MemberId");
+
+ b.ToTable("MemberSubscriptions");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.MemberSubscriptionPlan", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.HasKey("Id");
+
+ b.ToTable("MemberSubscriptionPlan");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.MemberVideoProgress", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("ArchiveVideoId")
+ .HasColumnType("int");
+
+ b.Property("CurrentDuration")
+ .HasColumnType("int");
+
+ b.Property("MemberId")
+ .HasColumnType("int");
+
+ b.Property("VideoWatchedStatus")
+ .IsRequired()
+ .HasMaxLength(1)
+ .HasColumnType("nvarchar(1)")
+ .HasColumnName("VideoWatchedStatus");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ArchiveVideoId");
+
+ b.HasIndex("MemberId");
+
+ b.ToTable("MembersVideosProgress", (string)null);
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.Question", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("ArchiveVideoId")
+ .HasColumnType("int");
+
+ b.Property("CoachingSessionId")
+ .HasColumnType("int");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("MemberId")
+ .HasColumnType("int");
+
+ b.Property("QuestionText")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
+
+ b.Property("Votes")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CoachingSessionId");
+
+ b.HasIndex("MemberId");
+
+ b.ToTable("Questions", (string)null);
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.QuestionVote", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("MemberId")
+ .HasColumnType("int");
+
+ b.Property("QuestionId")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("MemberId");
+
+ b.HasIndex("QuestionId");
+
+ b.ToTable("QuestionVote");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.VideoComment", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Body")
+ .HasMaxLength(2000)
+ .HasColumnType("nvarchar(2000)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("MemberId")
+ .HasColumnType("int");
+
+ b.Property("ParentCommentId")
+ .HasColumnType("int");
+
+ b.Property("VideoId")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("MemberId");
+
+ b.HasIndex("ParentCommentId");
+
+ b.HasIndex("VideoId");
+
+ b.ToTable("VideoComments");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.ValueObjects.MemberFavoriteArchiveVideo", b =>
+ {
+ b.Property("MemberId")
+ .HasColumnType("int");
+
+ b.Property("ArchiveVideoId")
+ .HasColumnType("int");
+
+ b.HasKey("MemberId", "ArchiveVideoId");
+
+ b.HasIndex("ArchiveVideoId");
+
+ b.ToTable("MemberFavoriteArchiveVideos", (string)null);
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Infrastructure.Identity.Data.ApplicationUser", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("AccessFailedCount")
+ .HasColumnType("int");
+
+ b.Property("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DateCreated")
+ .HasColumnType("datetime2");
+
+ b.Property("Email")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("EmailConfirmed")
+ .HasColumnType("bit");
+
+ b.Property("LockoutEnabled")
+ .HasColumnType("bit");
+
+ b.Property("LockoutEnd")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("NormalizedEmail")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("NormalizedUserName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PasswordHash")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PhoneNumber")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PhoneNumberConfirmed")
+ .HasColumnType("bit");
+
+ b.Property("SecurityStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TwoFactorEnabled")
+ .HasColumnType("bit");
+
+ b.Property("UserName")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("ApplicationUser");
+ });
+
+ modelBuilder.Entity("BookMember", b =>
+ {
+ b.HasOne("DevBetterWeb.Core.Entities.Book", null)
+ .WithMany()
+ .HasForeignKey("BooksReadId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("DevBetterWeb.Core.Entities.Member", null)
+ .WithMany()
+ .HasForeignKey("MembersWhoHaveReadId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.BillingActivity", b =>
+ {
+ b.HasOne("DevBetterWeb.Core.Entities.Member", null)
+ .WithMany("BillingActivities")
+ .HasForeignKey("MemberId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.OwnsOne("DevBetterWeb.Core.ValueObjects.BillingDetails", "Details", b1 =>
+ {
+ b1.Property("BillingActivityId")
+ .HasColumnType("int");
+
+ b1.Property("ActionVerbPastTense")
+ .HasMaxLength(100)
+ .HasColumnType("int");
+
+ b1.Property("Amount")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("decimal(18,4)")
+ .HasDefaultValue(0m);
+
+ b1.Property("BillingPeriod")
+ .HasMaxLength(100)
+ .HasColumnType("int");
+
+ b1.Property("Date")
+ .HasColumnType("datetime2");
+
+ b1.Property("MemberName")
+ .IsRequired()
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
+
+ b1.Property("SubscriptionPlanName")
+ .IsRequired()
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
+
+ b1.HasKey("BillingActivityId");
+
+ b1.ToTable("BillingActivities");
+
+ b1.WithOwner()
+ .HasForeignKey("BillingActivityId");
+ });
+
+ b.Navigation("Details")
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.Book", b =>
+ {
+ b.HasOne("DevBetterWeb.Core.Entities.BookCategory", "BookCategory")
+ .WithMany("Books")
+ .HasForeignKey("BookCategoryId");
+
+ b.HasOne("DevBetterWeb.Core.Entities.Member", "MemberWhoUpload")
+ .WithMany("UploadedBooks")
+ .HasForeignKey("MemberWhoUploadId");
+
+ b.Navigation("BookCategory");
+
+ b.Navigation("MemberWhoUpload");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.Member", b =>
+ {
+ b.OwnsOne("DevBetterWeb.Core.ValueObjects.Address", "ShippingAddress", b1 =>
+ {
+ b1.Property("MemberId")
+ .HasColumnType("int");
+
+ b1.Property("City")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)")
+ .HasDefaultValue("");
+
+ b1.Property("Country")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)")
+ .HasDefaultValue("");
+
+ b1.Property("PostalCode")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(12)
+ .HasColumnType("nvarchar(12)")
+ .HasDefaultValue("");
+
+ b1.Property("State")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)")
+ .HasDefaultValue("");
+
+ b1.Property("Street")
+ .IsRequired()
+ .ValueGeneratedOnAdd()
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)")
+ .HasDefaultValue("");
+
+ b1.HasKey("MemberId");
+
+ b1.ToTable("Members");
+
+ b1.WithOwner()
+ .HasForeignKey("MemberId");
+ });
+
+ b.OwnsOne("DevBetterWeb.Core.ValueObjects.Birthday", "Birthday", b1 =>
+ {
+ b1.Property("MemberId")
+ .HasColumnType("int");
+
+ b1.Property("Day")
+ .HasColumnType("int");
+
+ b1.Property("Month")
+ .HasColumnType("int");
+
+ b1.HasKey("MemberId");
+
+ b1.ToTable("Members");
+
+ b1.WithOwner()
+ .HasForeignKey("MemberId");
+ });
+
+ b.OwnsOne("DevBetterWeb.Core.ValueObjects.Geolocation", "CityLocation", b1 =>
+ {
+ b1.Property("MemberId")
+ .HasColumnType("int");
+
+ b1.Property("Latitude")
+ .HasColumnType("decimal(18,4)");
+
+ b1.Property("Longitude")
+ .HasColumnType("decimal(18,4)");
+
+ b1.HasKey("MemberId");
+
+ b1.ToTable("Members");
+
+ b1.WithOwner()
+ .HasForeignKey("MemberId");
+ });
+
+ b.Navigation("Birthday");
+
+ b.Navigation("CityLocation");
+
+ b.Navigation("ShippingAddress");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.MemberSubscription", b =>
+ {
+ b.HasOne("DevBetterWeb.Core.Entities.Member", null)
+ .WithMany("MemberSubscriptions")
+ .HasForeignKey("MemberId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.MemberSubscriptionPlan", b =>
+ {
+ b.OwnsOne("DevBetterWeb.Core.ValueObjects.MemberSubscriptionPlanDetails", "Details", b1 =>
+ {
+ b1.Property("MemberSubscriptionPlanId")
+ .HasColumnType("int");
+
+ b1.Property("BillingPeriod")
+ .HasMaxLength(100)
+ .HasColumnType("int");
+
+ b1.Property("Name")
+ .IsRequired()
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
+
+ b1.Property("PricePerBillingPeriod")
+ .HasMaxLength(100)
+ .HasColumnType("decimal(18,2)");
+
+ b1.HasKey("MemberSubscriptionPlanId");
+
+ b1.ToTable("MemberSubscriptionPlan");
+
+ b1.WithOwner()
+ .HasForeignKey("MemberSubscriptionPlanId");
+ });
+
+ b.Navigation("Details")
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.MemberVideoProgress", b =>
+ {
+ b.HasOne("DevBetterWeb.Core.Entities.ArchiveVideo", "Video")
+ .WithMany("MembersVideoProgress")
+ .HasForeignKey("ArchiveVideoId")
+ .IsRequired();
+
+ b.HasOne("DevBetterWeb.Core.Entities.Member", "Member")
+ .WithMany("MemberVideosProgress")
+ .HasForeignKey("MemberId")
+ .IsRequired();
+
+ b.Navigation("Member");
+
+ b.Navigation("Video");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.Question", b =>
+ {
+ b.HasOne("DevBetterWeb.Core.Entities.CoachingSession", "CoachingSession")
+ .WithMany("Questions")
+ .HasForeignKey("CoachingSessionId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("DevBetterWeb.Core.Entities.Member", "MemberWhoCreate")
+ .WithMany("Questions")
+ .HasForeignKey("MemberId")
+ .IsRequired();
+
+ b.Navigation("CoachingSession");
+
+ b.Navigation("MemberWhoCreate");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.QuestionVote", b =>
+ {
+ b.HasOne("DevBetterWeb.Core.Entities.Member", "Member")
+ .WithMany("QuestionVotes")
+ .HasForeignKey("MemberId")
+ .IsRequired();
+
+ b.HasOne("DevBetterWeb.Core.Entities.Question", "Question")
+ .WithMany("QuestionVotes")
+ .HasForeignKey("QuestionId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Member");
+
+ b.Navigation("Question");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.VideoComment", b =>
+ {
+ b.HasOne("DevBetterWeb.Core.Entities.Member", "MemberWhoCreate")
+ .WithMany("VideosComments")
+ .HasForeignKey("MemberId")
+ .IsRequired();
+
+ b.HasOne("DevBetterWeb.Core.Entities.VideoComment", "ParentComment")
+ .WithMany("Replies")
+ .HasForeignKey("ParentCommentId");
+
+ b.HasOne("DevBetterWeb.Core.Entities.ArchiveVideo", "Video")
+ .WithMany("Comments")
+ .HasForeignKey("VideoId")
+ .IsRequired();
+
+ b.Navigation("MemberWhoCreate");
+
+ b.Navigation("ParentComment");
+
+ b.Navigation("Video");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.ValueObjects.MemberFavoriteArchiveVideo", b =>
+ {
+ b.HasOne("DevBetterWeb.Core.Entities.ArchiveVideo", null)
+ .WithMany("MemberFavorites")
+ .HasForeignKey("ArchiveVideoId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("DevBetterWeb.Core.Entities.Member", null)
+ .WithMany("FavoriteArchiveVideos")
+ .HasForeignKey("MemberId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.ArchiveVideo", b =>
+ {
+ b.Navigation("Comments");
+
+ b.Navigation("MemberFavorites");
+
+ b.Navigation("MembersVideoProgress");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.BookCategory", b =>
+ {
+ b.Navigation("Books");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.CoachingSession", b =>
+ {
+ b.Navigation("Questions");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.Member", b =>
+ {
+ b.Navigation("BillingActivities");
+
+ b.Navigation("FavoriteArchiveVideos");
+
+ b.Navigation("MemberSubscriptions");
+
+ b.Navigation("MemberVideosProgress");
+
+ b.Navigation("QuestionVotes");
+
+ b.Navigation("Questions");
+
+ b.Navigation("UploadedBooks");
+
+ b.Navigation("VideosComments");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.Question", b =>
+ {
+ b.Navigation("QuestionVotes");
+ });
+
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.VideoComment", b =>
+ {
+ b.Navigation("Replies");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/src/DevBetterWeb.Infrastructure/Data/Migrations/20250505144319_ComplexPropertyForDates.cs b/src/DevBetterWeb.Infrastructure/Data/Migrations/20250505144319_ComplexPropertyForDates.cs
new file mode 100644
index 000000000..e8fc0df85
--- /dev/null
+++ b/src/DevBetterWeb.Infrastructure/Data/Migrations/20250505144319_ComplexPropertyForDates.cs
@@ -0,0 +1,62 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace DevBetterWeb.Infrastructure.Data.Migrations
+{
+ ///
+ public partial class ComplexPropertyForDates : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "MemberSubscriptionDates");
+
+ migrationBuilder.AddColumn(
+ name: "Dates_EndDate",
+ table: "MemberSubscriptions",
+ type: "datetime2",
+ nullable: true);
+
+ migrationBuilder.AddColumn(
+ name: "Dates_StartDate",
+ table: "MemberSubscriptions",
+ type: "datetime2",
+ nullable: false,
+ defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropColumn(
+ name: "Dates_EndDate",
+ table: "MemberSubscriptions");
+
+ migrationBuilder.DropColumn(
+ name: "Dates_StartDate",
+ table: "MemberSubscriptions");
+
+ migrationBuilder.CreateTable(
+ name: "MemberSubscriptionDates",
+ columns: table => new
+ {
+ MemberSubscriptionId = table.Column(type: "int", nullable: false),
+ EndDate = table.Column(type: "datetime2", nullable: true),
+ StartDate = table.Column(type: "datetime2", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_MemberSubscriptionDates", x => x.MemberSubscriptionId);
+ table.ForeignKey(
+ name: "FK_MemberSubscriptionDates_MemberSubscriptions_MemberSubscriptionId",
+ column: x => x.MemberSubscriptionId,
+ principalTable: "MemberSubscriptions",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+ }
+ }
+}
diff --git a/src/DevBetterWeb.Infrastructure/Data/Migrations/AppDbContextModelSnapshot.cs b/src/DevBetterWeb.Infrastructure/Data/Migrations/AppDbContextModelSnapshot.cs
index 7d212a6f5..c2ce7069b 100644
--- a/src/DevBetterWeb.Infrastructure/Data/Migrations/AppDbContextModelSnapshot.cs
+++ b/src/DevBetterWeb.Infrastructure/Data/Migrations/AppDbContextModelSnapshot.cs
@@ -1,5 +1,6 @@
//
using System;
+using System.Collections.Generic;
using DevBetterWeb.Infrastructure.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
@@ -10,937 +11,926 @@
namespace DevBetterWeb.Infrastructure.Data.Migrations
{
- [DbContext(typeof(AppDbContext))]
- partial class AppDbContextModelSnapshot : ModelSnapshot
- {
- protected override void BuildModel(ModelBuilder modelBuilder)
- {
+ [DbContext(typeof(AppDbContext))]
+ partial class AppDbContextModelSnapshot : ModelSnapshot
+ {
+ protected override void BuildModel(ModelBuilder modelBuilder)
+ {
#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "7.0.10")
- .HasAnnotation("Relational:MaxIdentifierLength", 128);
+ modelBuilder
+ .HasAnnotation("ProductVersion", "9.0.4")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
- SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+ SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
- modelBuilder.Entity("BookMember", b =>
- {
- b.Property("BooksReadId")
- .HasColumnType("int");
+ modelBuilder.Entity("BookMember", b =>
+ {
+ b.Property("BooksReadId")
+ .HasColumnType("int");
- b.Property("MembersWhoHaveReadId")
- .HasColumnType("int");
+ b.Property("MembersWhoHaveReadId")
+ .HasColumnType("int");
- b.HasKey("BooksReadId", "MembersWhoHaveReadId");
+ b.HasKey("BooksReadId", "MembersWhoHaveReadId");
- b.HasIndex("MembersWhoHaveReadId");
+ b.HasIndex("MembersWhoHaveReadId");
- b.ToTable("BookMember");
- });
+ b.ToTable("BookMember");
+ });
- modelBuilder.Entity("DevBetterWeb.Core.Entities.ArchiveVideo", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.ArchiveVideo", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
- b.Property("AnimatedThumbnailUri")
- .HasColumnType("nvarchar(max)");
+ b.Property("AnimatedThumbnailUri")
+ .HasColumnType("nvarchar(max)");
- b.Property("DateCreated")
- .HasColumnType("datetimeoffset");
+ b.Property("DateCreated")
+ .HasColumnType("datetimeoffset");
- b.Property("DateUploaded")
- .HasColumnType("datetimeoffset");
+ b.Property("DateUploaded")
+ .HasColumnType("datetimeoffset");
- b.Property("Description")
- .HasColumnType("nvarchar(max)");
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
- b.Property("Duration")
- .HasColumnType("int");
+ b.Property("Duration")
+ .HasColumnType("int");
- b.Property("Status")
- .HasColumnType("nvarchar(max)");
+ b.Property("Status")
+ .HasColumnType("nvarchar(max)");
- b.Property("Title")
- .HasMaxLength(200)
- .HasColumnType("nvarchar(200)");
+ b.Property("Title")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
- b.Property("VideoId")
- .HasColumnType("nvarchar(max)");
+ b.Property("VideoId")
+ .HasColumnType("nvarchar(max)");
- b.Property("VideoUrl")
- .HasMaxLength(200)
- .HasColumnType("nvarchar(200)");
+ b.Property("VideoUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
- b.Property("Views")
- .HasColumnType("int");
+ b.Property("Views")
+ .HasColumnType("int");
- b.HasKey("Id");
+ b.HasKey("Id");
- b.ToTable("ArchiveVideos");
- });
+ b.ToTable("ArchiveVideos");
+ });
- modelBuilder.Entity("DevBetterWeb.Core.Entities.BillingActivity", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.BillingActivity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
- b.Property("MemberId")
- .HasMaxLength(500)
- .HasColumnType("int");
+ b.Property("MemberId")
+ .HasMaxLength(500)
+ .HasColumnType("int");
- b.HasKey("Id");
+ b.HasKey("Id");
- b.HasIndex("MemberId");
+ b.HasIndex("MemberId");
- b.ToTable("BillingActivities");
- });
+ b.ToTable("BillingActivities");
+ });
- modelBuilder.Entity("DevBetterWeb.Core.Entities.Book", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.Book", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
- b.Property("Author")
- .HasMaxLength(100)
- .HasColumnType("nvarchar(100)");
+ b.Property("Author")
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
- b.Property("BookCategoryId")
- .ValueGeneratedOnAdd()
- .HasColumnType("int")
- .HasDefaultValue(1);
+ b.Property("BookCategoryId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasDefaultValue(1);
- b.Property("Details")
- .HasMaxLength(2000)
- .HasColumnType("nvarchar(2000)");
+ b.Property("Details")
+ .HasMaxLength(2000)
+ .HasColumnType("nvarchar(2000)");
- b.Property("MemberWhoUploadId")
- .HasColumnType("int");
+ b.Property("MemberWhoUploadId")
+ .HasColumnType("int");
- b.Property("PurchaseUrl")
- .HasMaxLength(200)
- .HasColumnType("nvarchar(200)");
+ b.Property("PurchaseUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
- b.Property("Title")
- .HasMaxLength(500)
- .HasColumnType("nvarchar(500)");
+ b.Property("Title")
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
- b.HasKey("Id");
+ b.HasKey("Id");
- b.HasIndex("BookCategoryId");
+ b.HasIndex("BookCategoryId");
- b.HasIndex("MemberWhoUploadId");
+ b.HasIndex("MemberWhoUploadId");
- b.ToTable("Books");
- });
+ b.ToTable("Books");
+ });
- modelBuilder.Entity("DevBetterWeb.Core.Entities.BookCategory", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.BookCategory", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
- b.Property("Title")
- .HasMaxLength(500)
- .HasColumnType("nvarchar(500)");
+ b.Property("Title")
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
- b.HasKey("Id");
+ b.HasKey("Id");
- b.ToTable("BookCategories");
- });
+ b.ToTable("BookCategories");
+ });
- modelBuilder.Entity("DevBetterWeb.Core.Entities.CoachingSession", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.CoachingSession", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
- b.Property("StartAt")
- .HasColumnType("datetime2");
+ b.Property("StartAt")
+ .HasColumnType("datetime2");
- b.HasKey("Id");
+ b.HasKey("Id");
- b.ToTable("CoachingSessions", (string)null);
- });
+ b.ToTable("CoachingSessions", (string)null);
+ });
- modelBuilder.Entity("DevBetterWeb.Core.Entities.DailyCheck", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.DailyCheck", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
- b.Property("Date")
- .HasColumnType("datetime2");
+ b.Property("Date")
+ .HasColumnType("datetime2");
- b.Property("TasksCompleted")
- .HasMaxLength(500)
- .HasColumnType("nvarchar(500)");
+ b.Property("TasksCompleted")
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
- b.HasKey("Id");
+ b.HasKey("Id");
- b.ToTable("DailyChecks");
- });
+ b.ToTable("DailyChecks");
+ });
- modelBuilder.Entity("DevBetterWeb.Core.Entities.Invitation", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.Invitation", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
- b.Property("Active")
- .HasColumnType("bit");
+ b.Property("Active")
+ .HasColumnType("bit");
- b.Property("DateCreated")
- .HasColumnType("datetime2");
+ b.Property("DateCreated")
+ .HasColumnType("datetime2");
- b.Property("DateOfLastAdminPing")
- .HasColumnType("datetime2");
+ b.Property("DateOfLastAdminPing")
+ .HasColumnType("datetime2");
- b.Property("DateOfUserPing")
- .HasColumnType("datetime2");
+ b.Property("DateOfUserPing")
+ .HasColumnType("datetime2");
- b.Property("Email")
- .IsRequired()
- .HasMaxLength(200)
- .HasColumnType("nvarchar(200)");
+ b.Property("Email")
+ .IsRequired()
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
- b.Property("InviteCode")
- .IsRequired()
- .HasMaxLength(500)
- .HasColumnType("nvarchar(500)");
+ b.Property("InviteCode")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
- b.Property("PaymentHandlerSubscriptionId")
- .IsRequired()
- .HasMaxLength(500)
- .HasColumnType("nvarchar(500)");
+ b.Property("PaymentHandlerSubscriptionId")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
- b.HasKey("Id");
+ b.HasKey("Id");
- b.ToTable("Invitations");
- });
+ b.ToTable("Invitations");
+ });
- modelBuilder.Entity("DevBetterWeb.Core.Entities.Member", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
+ modelBuilder.Entity("DevBetterWeb.Core.Entities.Member", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
- b.Property("AboutInfo")
- .HasColumnType("nvarchar(max)");
+ b.Property("AboutInfo")
+ .HasColumnType("nvarchar(max)");
- b.Property("Address")
- .HasMaxLength(500)
- .HasColumnType("nvarchar(500)");
+ b.Property("Address")
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
- b.Property("BlogUrl")
- .HasMaxLength(200)
- .HasColumnType("nvarchar(200)");
+ b.Property("BlogUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
- b.Property("BlueskyUrl")
- .HasMaxLength(200)
- .HasColumnType("nvarchar(200)");
+ b.Property("BlueskyUrl")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
- b.Property("CityLatitude")
- .HasColumnType("decimal(18,2)");
+ b.Property("CityLatitude")
+ .HasColumnType("decimal(18,2)");
- b.Property