60 lines
1.7 KiB
C#
60 lines
1.7 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Hutopy.Web.Features.Contents.Data;
|
|
|
|
public class ContentDbContext(
|
|
DbContextOptions<ContentDbContext> options)
|
|
: DbContext(options)
|
|
{
|
|
public const string SchemaName = "Content";
|
|
|
|
public DbSet<Content> Contents => Set<Content>();
|
|
public DbSet<Creator> Creators => Set<Creator>();
|
|
public DbSet<Subscription> Subscriptions => Set<Subscription>();
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
{
|
|
modelBuilder.HasDefaultSchema("Content");
|
|
|
|
modelBuilder
|
|
.Entity<Content>()
|
|
.Property(c => c.CreatedAt)
|
|
.ValueGeneratedOnAdd()
|
|
.HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
|
|
modelBuilder
|
|
.Entity<Creator>()
|
|
.OwnsOne<About>(x => x.About);
|
|
|
|
modelBuilder
|
|
.Entity<Creator>()
|
|
.OwnsOne<SocialNetworks>(x => x.SocialNetworks)
|
|
.ToTable(nameof(SocialNetworks));
|
|
|
|
modelBuilder
|
|
.Entity<Creator>()
|
|
.OwnsOne<ProfileColors>(x => x.ProfileColors)
|
|
.ToTable(nameof(ProfileColors));
|
|
|
|
modelBuilder
|
|
.Entity<Creator>()
|
|
.OwnsOne<StoredDataUrls>(x => x.StoredDataUrls)
|
|
.ToTable(nameof(StoredDataUrls));
|
|
}
|
|
|
|
public async Task<Creator?> FindByCreatorAliasAsync(
|
|
string creatorAlias,
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
ArgumentException.ThrowIfNullOrEmpty(creatorAlias);
|
|
|
|
var user = await Creators.SingleOrDefaultAsync(creator =>
|
|
EF.Functions.Like(
|
|
creatorAlias,
|
|
creator.Name),
|
|
cancellationToken: cancellationToken);
|
|
|
|
return user;
|
|
}
|
|
}
|