mirror of
https://github.com/RedWizardsLab/EchoHub.git
synced 2026-09-04 23:34:10 +02:00
- Introduced Attachment model to handle file attachments associated with messages. - Updated ModerationController to manage message deletions and attachment cleanup. - Enhanced ChatService to include attachments in message retrieval. - Implemented migration for legacy single-attachment messages to the new Attachments model. - Added unit tests for attachment handling in message formatting and parsing. - Updated database context and migrations to support new Attachments table.
332 lines
11 KiB
C#
332 lines
11 KiB
C#
// <auto-generated />
|
|
using System;
|
|
using EchoHub.Server.Data;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
using Microsoft.EntityFrameworkCore.Migrations;
|
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
|
|
#nullable disable
|
|
|
|
namespace EchoHub.Server.Data.Migrations
|
|
{
|
|
[DbContext(typeof(EchoHubDbContext))]
|
|
[Migration("20260716020211_AddMessageAttachments")]
|
|
partial class AddMessageAttachments
|
|
{
|
|
/// <inheritdoc />
|
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
{
|
|
#pragma warning disable 612, 618
|
|
modelBuilder.HasAnnotation("ProductVersion", "10.0.3");
|
|
|
|
modelBuilder.Entity("EchoHub.Core.Models.Attachment", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("AsciiPreview")
|
|
.HasMaxLength(64000)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("FileName")
|
|
.IsRequired()
|
|
.HasMaxLength(255)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("FileSize")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int>("Kind")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid>("MessageId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Url")
|
|
.IsRequired()
|
|
.HasMaxLength(500)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("MessageId");
|
|
|
|
b.ToTable("Attachments");
|
|
});
|
|
|
|
modelBuilder.Entity("EchoHub.Core.Models.Channel", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<Guid>("CreatedByUserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("EncryptionSalt")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("IsPublic")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(100)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("PasswordHash")
|
|
.HasMaxLength(100)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Topic")
|
|
.HasMaxLength(500)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("WrappedRoomKey")
|
|
.HasMaxLength(200)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("Name")
|
|
.IsUnique();
|
|
|
|
b.ToTable("Channels");
|
|
});
|
|
|
|
modelBuilder.Entity("EchoHub.Core.Models.ChannelMembership", b =>
|
|
{
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("ChannelId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("JoinedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.HasKey("UserId", "ChannelId");
|
|
|
|
b.HasIndex("ChannelId");
|
|
|
|
b.HasIndex("UserId");
|
|
|
|
b.ToTable("ChannelMemberships");
|
|
});
|
|
|
|
modelBuilder.Entity("EchoHub.Core.Models.Message", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("AttachmentFileName")
|
|
.HasMaxLength(255)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long?>("AttachmentFileSize")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("AttachmentUrl")
|
|
.HasMaxLength(500)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("ChannelId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Content")
|
|
.IsRequired()
|
|
.HasMaxLength(16000)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("EmbedJson")
|
|
.HasMaxLength(32000)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("SenderUserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("SenderUsername")
|
|
.IsRequired()
|
|
.HasMaxLength(50)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("SentAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int>("Type")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("ChannelId");
|
|
|
|
b.HasIndex("SentAt");
|
|
|
|
b.ToTable("Messages");
|
|
});
|
|
|
|
modelBuilder.Entity("EchoHub.Core.Models.RefreshToken", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long>("ExpiresAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long?>("RevokedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("TokenHash")
|
|
.IsRequired()
|
|
.HasMaxLength(128)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("TokenHash");
|
|
|
|
b.HasIndex("UserId");
|
|
|
|
b.ToTable("RefreshTokens");
|
|
});
|
|
|
|
modelBuilder.Entity("EchoHub.Core.Models.User", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("AvatarAscii")
|
|
.HasMaxLength(10000)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Bio")
|
|
.HasMaxLength(500)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<long>("CreatedAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("DisplayName")
|
|
.HasMaxLength(100)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<bool>("IsBanned")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<bool>("IsMuted")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long>("LastSeenAt")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<long?>("MutedUntil")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("NicknameColor")
|
|
.HasMaxLength(7)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("PasswordHash")
|
|
.IsRequired()
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<int>("Role")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<int>("Status")
|
|
.HasColumnType("INTEGER");
|
|
|
|
b.Property<string>("StatusMessage")
|
|
.HasMaxLength(100)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.Property<string>("Username")
|
|
.IsRequired()
|
|
.HasMaxLength(50)
|
|
.HasColumnType("TEXT");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("Username")
|
|
.IsUnique();
|
|
|
|
b.ToTable("Users");
|
|
});
|
|
|
|
modelBuilder.Entity("EchoHub.Core.Models.Attachment", b =>
|
|
{
|
|
b.HasOne("EchoHub.Core.Models.Message", "Message")
|
|
.WithMany("Attachments")
|
|
.HasForeignKey("MessageId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.Navigation("Message");
|
|
});
|
|
|
|
modelBuilder.Entity("EchoHub.Core.Models.ChannelMembership", b =>
|
|
{
|
|
b.HasOne("EchoHub.Core.Models.Channel", null)
|
|
.WithMany()
|
|
.HasForeignKey("ChannelId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.HasOne("EchoHub.Core.Models.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
});
|
|
|
|
modelBuilder.Entity("EchoHub.Core.Models.Message", b =>
|
|
{
|
|
b.HasOne("EchoHub.Core.Models.Channel", "Channel")
|
|
.WithMany("Messages")
|
|
.HasForeignKey("ChannelId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.Navigation("Channel");
|
|
});
|
|
|
|
modelBuilder.Entity("EchoHub.Core.Models.RefreshToken", b =>
|
|
{
|
|
b.HasOne("EchoHub.Core.Models.User", "User")
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.Navigation("User");
|
|
});
|
|
|
|
modelBuilder.Entity("EchoHub.Core.Models.Channel", b =>
|
|
{
|
|
b.Navigation("Messages");
|
|
});
|
|
|
|
modelBuilder.Entity("EchoHub.Core.Models.Message", b =>
|
|
{
|
|
b.Navigation("Attachments");
|
|
});
|
|
#pragma warning restore 612, 618
|
|
}
|
|
}
|
|
}
|