diff --git a/.gitmodules b/.gitmodules
index 64bfa52..0d01056 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,4 @@
[submodule "LightlessAPI"]
path = LightlessAPI
url = https://git.lightless-sync.org/Lightless-Sync/LightlessAPI
- branch = main
+ branch = main
\ No newline at end of file
diff --git a/LightlessAPI b/LightlessAPI
index f6b0b99..418e647 160000
--- a/LightlessAPI
+++ b/LightlessAPI
@@ -1 +1 @@
-Subproject commit f6b0b999cf352faac0b678994d353b4713390619
+Subproject commit 418e647ef89a518dfd9faaaf831903f6c76de126
diff --git a/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Functions.cs b/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Functions.cs
index b7b816d..82e757a 100644
--- a/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Functions.cs
+++ b/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Functions.cs
@@ -209,7 +209,7 @@ public partial class LightlessHub
if (isOwnerResult.ReferredGroup == null) return (false, null);
- var groupPairSelf = await DbContext.GroupPairs.SingleOrDefaultAsync(g => g.GroupGID == gid && g.GroupUserUID == UserUID).ConfigureAwait(false);
+ var groupPairSelf = await DbContext.GroupPairs.SingleOrDefaultAsync(g => g.GroupGID == gid || g.Group.Alias == gid && g.GroupUserUID == UserUID).ConfigureAwait(false);
if (groupPairSelf == null || !groupPairSelf.IsModerator) return (false, null);
return (true, isOwnerResult.ReferredGroup);
@@ -217,7 +217,7 @@ public partial class LightlessHub
private async Task<(bool isValid, Group ReferredGroup)> TryValidateOwner(string gid)
{
- var group = await DbContext.Groups.SingleOrDefaultAsync(g => g.GID == gid).ConfigureAwait(false);
+ var group = await DbContext.Groups.SingleOrDefaultAsync(g => g.GID == gid || g.Alias == gid).ConfigureAwait(false);
if (group == null) return (false, null);
return (string.Equals(group.OwnerUID, UserUID, StringComparison.Ordinal), group);
diff --git a/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs b/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs
index 025554d..7d4dc38 100644
--- a/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs
+++ b/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs
@@ -746,23 +746,14 @@ public partial class LightlessHub
var cancellationToken = RequestAbortedToken;
var data = await DbContext.GroupProfiles
- .FirstOrDefaultAsync(g => g.GroupGID == dto.Group.GID)
+ .FirstOrDefaultAsync(g => g.Group.GID == dto.Group.GID || g.Group.Alias == dto.Group.GID, cancellationToken)
.ConfigureAwait(false);
- var profileDto = new GroupProfileDto(dto.Group, Description: null, Tags: null, PictureBase64: null);
+ var profileDto = new GroupProfileDto(dto.Group, Description: null, Tags: null, PictureBase64: null, IsNsfw: false, IsDisabled: false);
if (data is not null)
{
- profileDto = profileDto with
- {
- Description = data.Description,
- Tags = data.Tags,
- PictureBase64 = data.Base64GroupProfileImage,
- };
-
- await Clients.User(UserUID)
- .Client_GroupSendProfile(profileDto)
- .ConfigureAwait(false);
+ profileDto = data.ToDTO();
}
return profileDto;
@@ -779,15 +770,39 @@ public partial class LightlessHub
if (!hasRights) return;
var groupProfileDb = await DbContext.GroupProfiles
- .FirstOrDefaultAsync(g => g.GroupGID == dto.Group.GID,
+ .FirstOrDefaultAsync(g => g.Group.GID == dto.Group.GID || g.Group.Alias == dto.Group.GID,
RequestAbortedToken)
.ConfigureAwait(false);
if (groupProfileDb != null)
{
- groupProfileDb.Description = dto.Description;
- groupProfileDb.Tags = dto.Tags;
- groupProfileDb.Base64GroupProfileImage = dto.PictureBase64;
+ var groupPairs = DbContext.GroupPairs.Where(p => p.GroupGID == groupProfileDb.GroupGID).Select(p => p.GroupUserUID).ToList();
+
+ if (string.Equals("", dto.PictureBase64, StringComparison.OrdinalIgnoreCase))
+ {
+ groupProfileDb.Base64GroupProfileImage = null;
+ }
+ else if (dto.PictureBase64 != null)
+ {
+ groupProfileDb.Base64GroupProfileImage = dto.PictureBase64;
+ }
+
+ if (dto.Tags != null)
+ {
+ groupProfileDb.Tags = dto.Tags;
+ }
+
+ if (dto.Description != null)
+ {
+ groupProfileDb.Description = dto.Description;
+ }
+
+ if (dto.IsNsfw != null)
+ {
+ groupProfileDb.IsNSFW = dto.IsNsfw.Value;
+ }
+
+ await Clients.Users(groupPairs).Client_GroupSendProfile(groupProfileDb.ToDTO()).ConfigureAwait(false);
}
else
{
@@ -797,6 +812,8 @@ public partial class LightlessHub
Description = dto.Description,
Tags = dto.Tags,
Base64GroupProfileImage = dto.PictureBase64,
+ IsNSFW = false,
+ ProfileDisabled = false,
};
await DbContext.GroupProfiles.AddAsync(groupProfile,
@@ -990,6 +1007,4 @@ public partial class LightlessHub
return results;
}
-
-
}
\ No newline at end of file
diff --git a/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs b/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs
index 34bedac..0c1ae44 100644
--- a/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs
+++ b/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs
@@ -1,6 +1,7 @@
using LightlessSync.API.Data;
using LightlessSync.API.Data.Enum;
using LightlessSync.API.Data.Extensions;
+using LightlessSync.API.Dto.Group;
using LightlessSyncShared.Models;
using static LightlessSyncServer.Hubs.LightlessHub;
@@ -8,6 +9,11 @@ namespace LightlessSyncServer.Utils;
public static class Extensions
{
+ public static GroupProfileDto ToDTO(this GroupProfile groupProfile)
+ {
+ return new GroupProfileDto(groupProfile.Group.ToGroupData(), groupProfile.Description, groupProfile.Tags, groupProfile.Base64GroupProfileImage, groupProfile.IsNSFW, groupProfile.ProfileDisabled);
+ }
+
public static GroupData ToGroupData(this Group group)
{
return new GroupData(group.GID, group.Alias, group.CreatedDate);
diff --git a/LightlessSyncServer/LightlessSyncShared/Migrations/20251015173920_AddGroupDisabledAndNSFW.Designer.cs b/LightlessSyncServer/LightlessSyncShared/Migrations/20251015173920_AddGroupDisabledAndNSFW.Designer.cs
new file mode 100644
index 0000000..00631f9
--- /dev/null
+++ b/LightlessSyncServer/LightlessSyncShared/Migrations/20251015173920_AddGroupDisabledAndNSFW.Designer.cs
@@ -0,0 +1,1177 @@
+//
+using System;
+using LightlessSyncShared.Data;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace LightlessSyncServer.Migrations
+{
+ [DbContext(typeof(LightlessDbContext))]
+ [Migration("20251015173920_AddGroupDisabledAndNSFW")]
+ partial class AddGroupDisabledAndNSFW
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "9.0.0")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("LightlessSyncShared.Models.Auth", b =>
+ {
+ b.Property("HashedKey")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)")
+ .HasColumnName("hashed_key");
+
+ b.Property("IsBanned")
+ .HasColumnType("boolean")
+ .HasColumnName("is_banned");
+
+ b.Property("MarkForBan")
+ .HasColumnType("boolean")
+ .HasColumnName("mark_for_ban");
+
+ b.Property("PrimaryUserUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("primary_user_uid");
+
+ b.Property("UserUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("user_uid");
+
+ b.HasKey("HashedKey")
+ .HasName("pk_auth");
+
+ b.HasIndex("PrimaryUserUID")
+ .HasDatabaseName("ix_auth_primary_user_uid");
+
+ b.HasIndex("UserUID")
+ .HasDatabaseName("ix_auth_user_uid");
+
+ b.ToTable("auth", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.Banned", b =>
+ {
+ b.Property("CharacterIdentification")
+ .HasMaxLength(100)
+ .HasColumnType("character varying(100)")
+ .HasColumnName("character_identification");
+
+ b.Property("BannedUid")
+ .HasColumnType("text")
+ .HasColumnName("banned_uid");
+
+ b.Property("Reason")
+ .HasColumnType("text")
+ .HasColumnName("reason");
+
+ b.Property("Timestamp")
+ .IsConcurrencyToken()
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("bytea")
+ .HasColumnName("timestamp");
+
+ b.HasKey("CharacterIdentification")
+ .HasName("pk_banned_users");
+
+ b.ToTable("banned_users", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.BannedRegistrations", b =>
+ {
+ b.Property("DiscordIdOrLodestoneAuth")
+ .HasMaxLength(100)
+ .HasColumnType("character varying(100)")
+ .HasColumnName("discord_id_or_lodestone_auth");
+
+ b.HasKey("DiscordIdOrLodestoneAuth")
+ .HasName("pk_banned_registrations");
+
+ b.ToTable("banned_registrations", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.CharaData", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("text")
+ .HasColumnName("id");
+
+ b.Property("UploaderUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("uploader_uid");
+
+ b.Property("AccessType")
+ .HasColumnType("integer")
+ .HasColumnName("access_type");
+
+ b.Property("CreatedDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_date");
+
+ b.Property("CustomizeData")
+ .HasColumnType("text")
+ .HasColumnName("customize_data");
+
+ b.Property("Description")
+ .HasColumnType("text")
+ .HasColumnName("description");
+
+ b.Property("DownloadCount")
+ .HasColumnType("integer")
+ .HasColumnName("download_count");
+
+ b.Property("ExpiryDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("expiry_date");
+
+ b.Property("GlamourerData")
+ .HasColumnType("text")
+ .HasColumnName("glamourer_data");
+
+ b.Property("ManipulationData")
+ .HasColumnType("text")
+ .HasColumnName("manipulation_data");
+
+ b.Property("ShareType")
+ .HasColumnType("integer")
+ .HasColumnName("share_type");
+
+ b.Property("UpdatedDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("updated_date");
+
+ b.HasKey("Id", "UploaderUID")
+ .HasName("pk_chara_data");
+
+ b.HasIndex("Id")
+ .HasDatabaseName("ix_chara_data_id");
+
+ b.HasIndex("UploaderUID")
+ .HasDatabaseName("ix_chara_data_uploader_uid");
+
+ b.ToTable("chara_data", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.CharaDataAllowance", b =>
+ {
+ b.Property("ParentId")
+ .HasColumnType("text")
+ .HasColumnName("parent_id");
+
+ b.Property("ParentUploaderUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("parent_uploader_uid");
+
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AllowedGroupGID")
+ .HasColumnType("character varying(20)")
+ .HasColumnName("allowed_group_gid");
+
+ b.Property("AllowedUserUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("allowed_user_uid");
+
+ b.HasKey("ParentId", "ParentUploaderUID", "Id")
+ .HasName("pk_chara_data_allowance");
+
+ b.HasIndex("AllowedGroupGID")
+ .HasDatabaseName("ix_chara_data_allowance_allowed_group_gid");
+
+ b.HasIndex("AllowedUserUID")
+ .HasDatabaseName("ix_chara_data_allowance_allowed_user_uid");
+
+ b.HasIndex("ParentId")
+ .HasDatabaseName("ix_chara_data_allowance_parent_id");
+
+ b.ToTable("chara_data_allowance", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.CharaDataFile", b =>
+ {
+ b.Property("ParentId")
+ .HasColumnType("text")
+ .HasColumnName("parent_id");
+
+ b.Property("ParentUploaderUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("parent_uploader_uid");
+
+ b.Property("GamePath")
+ .HasColumnType("text")
+ .HasColumnName("game_path");
+
+ b.Property("FileCacheHash")
+ .HasColumnType("character varying(40)")
+ .HasColumnName("file_cache_hash");
+
+ b.HasKey("ParentId", "ParentUploaderUID", "GamePath")
+ .HasName("pk_chara_data_files");
+
+ b.HasIndex("FileCacheHash")
+ .HasDatabaseName("ix_chara_data_files_file_cache_hash");
+
+ b.HasIndex("ParentId")
+ .HasDatabaseName("ix_chara_data_files_parent_id");
+
+ b.ToTable("chara_data_files", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.CharaDataFileSwap", b =>
+ {
+ b.Property("ParentId")
+ .HasColumnType("text")
+ .HasColumnName("parent_id");
+
+ b.Property("ParentUploaderUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("parent_uploader_uid");
+
+ b.Property("GamePath")
+ .HasColumnType("text")
+ .HasColumnName("game_path");
+
+ b.Property("FilePath")
+ .HasColumnType("text")
+ .HasColumnName("file_path");
+
+ b.HasKey("ParentId", "ParentUploaderUID", "GamePath")
+ .HasName("pk_chara_data_file_swaps");
+
+ b.HasIndex("ParentId")
+ .HasDatabaseName("ix_chara_data_file_swaps_parent_id");
+
+ b.ToTable("chara_data_file_swaps", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.CharaDataOriginalFile", b =>
+ {
+ b.Property("ParentId")
+ .HasColumnType("text")
+ .HasColumnName("parent_id");
+
+ b.Property("ParentUploaderUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("parent_uploader_uid");
+
+ b.Property("GamePath")
+ .HasColumnType("text")
+ .HasColumnName("game_path");
+
+ b.Property("Hash")
+ .HasColumnType("text")
+ .HasColumnName("hash");
+
+ b.HasKey("ParentId", "ParentUploaderUID", "GamePath")
+ .HasName("pk_chara_data_orig_files");
+
+ b.HasIndex("ParentId")
+ .HasDatabaseName("ix_chara_data_orig_files_parent_id");
+
+ b.ToTable("chara_data_orig_files", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.CharaDataPose", b =>
+ {
+ b.Property("ParentId")
+ .HasColumnType("text")
+ .HasColumnName("parent_id");
+
+ b.Property("ParentUploaderUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("parent_uploader_uid");
+
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Description")
+ .HasColumnType("text")
+ .HasColumnName("description");
+
+ b.Property("PoseData")
+ .HasColumnType("text")
+ .HasColumnName("pose_data");
+
+ b.Property("WorldData")
+ .HasColumnType("text")
+ .HasColumnName("world_data");
+
+ b.HasKey("ParentId", "ParentUploaderUID", "Id")
+ .HasName("pk_chara_data_poses");
+
+ b.HasIndex("ParentId")
+ .HasDatabaseName("ix_chara_data_poses_parent_id");
+
+ b.ToTable("chara_data_poses", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.ClientPair", b =>
+ {
+ b.Property("UserUID")
+ .HasMaxLength(10)
+ .HasColumnType("character varying(10)")
+ .HasColumnName("user_uid");
+
+ b.Property("OtherUserUID")
+ .HasMaxLength(10)
+ .HasColumnType("character varying(10)")
+ .HasColumnName("other_user_uid");
+
+ b.Property("Timestamp")
+ .IsConcurrencyToken()
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("bytea")
+ .HasColumnName("timestamp");
+
+ b.HasKey("UserUID", "OtherUserUID")
+ .HasName("pk_client_pairs");
+
+ b.HasIndex("OtherUserUID")
+ .HasDatabaseName("ix_client_pairs_other_user_uid");
+
+ b.HasIndex("UserUID")
+ .HasDatabaseName("ix_client_pairs_user_uid");
+
+ b.ToTable("client_pairs", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.FileCache", b =>
+ {
+ b.Property("Hash")
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)")
+ .HasColumnName("hash");
+
+ b.Property("RawSize")
+ .HasColumnType("bigint")
+ .HasColumnName("raw_size");
+
+ b.Property("Size")
+ .HasColumnType("bigint")
+ .HasColumnName("size");
+
+ b.Property("Timestamp")
+ .IsConcurrencyToken()
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("bytea")
+ .HasColumnName("timestamp");
+
+ b.Property("UploadDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("upload_date");
+
+ b.Property("Uploaded")
+ .HasColumnType("boolean")
+ .HasColumnName("uploaded");
+
+ b.Property("UploaderUID")
+ .HasMaxLength(10)
+ .HasColumnType("character varying(10)")
+ .HasColumnName("uploader_uid");
+
+ b.HasKey("Hash")
+ .HasName("pk_file_caches");
+
+ b.HasIndex("UploaderUID")
+ .HasDatabaseName("ix_file_caches_uploader_uid");
+
+ b.ToTable("file_caches", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.ForbiddenUploadEntry", b =>
+ {
+ b.Property("Hash")
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)")
+ .HasColumnName("hash");
+
+ b.Property("ForbiddenBy")
+ .HasMaxLength(100)
+ .HasColumnType("character varying(100)")
+ .HasColumnName("forbidden_by");
+
+ b.Property("Timestamp")
+ .IsConcurrencyToken()
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("bytea")
+ .HasColumnName("timestamp");
+
+ b.HasKey("Hash")
+ .HasName("pk_forbidden_upload_entries");
+
+ b.ToTable("forbidden_upload_entries", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.Group", b =>
+ {
+ b.Property("GID")
+ .HasMaxLength(20)
+ .HasColumnType("character varying(20)")
+ .HasColumnName("gid");
+
+ b.Property("Alias")
+ .HasMaxLength(50)
+ .HasColumnType("character varying(50)")
+ .HasColumnName("alias");
+
+ b.Property("CreatedDate")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_date")
+ .HasDefaultValueSql("CURRENT_TIMESTAMP");
+
+ b.Property("HashedPassword")
+ .HasColumnType("text")
+ .HasColumnName("hashed_password");
+
+ b.Property("InvitesEnabled")
+ .HasColumnType("boolean")
+ .HasColumnName("invites_enabled");
+
+ b.Property("OwnerUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("owner_uid");
+
+ b.Property("PreferDisableAnimations")
+ .HasColumnType("boolean")
+ .HasColumnName("prefer_disable_animations");
+
+ b.Property("PreferDisableSounds")
+ .HasColumnType("boolean")
+ .HasColumnName("prefer_disable_sounds");
+
+ b.Property("PreferDisableVFX")
+ .HasColumnType("boolean")
+ .HasColumnName("prefer_disable_vfx");
+
+ b.HasKey("GID")
+ .HasName("pk_groups");
+
+ b.HasIndex("OwnerUID")
+ .HasDatabaseName("ix_groups_owner_uid");
+
+ b.ToTable("groups", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.GroupBan", b =>
+ {
+ b.Property("GroupGID")
+ .HasColumnType("character varying(20)")
+ .HasColumnName("group_gid");
+
+ b.Property("BannedUserUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("banned_user_uid");
+
+ b.Property("BannedByUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("banned_by_uid");
+
+ b.Property("BannedOn")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("banned_on");
+
+ b.Property("BannedReason")
+ .HasColumnType("text")
+ .HasColumnName("banned_reason");
+
+ b.HasKey("GroupGID", "BannedUserUID")
+ .HasName("pk_group_bans");
+
+ b.HasIndex("BannedByUID")
+ .HasDatabaseName("ix_group_bans_banned_by_uid");
+
+ b.HasIndex("BannedUserUID")
+ .HasDatabaseName("ix_group_bans_banned_user_uid");
+
+ b.HasIndex("GroupGID")
+ .HasDatabaseName("ix_group_bans_group_gid");
+
+ b.ToTable("group_bans", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.GroupPair", b =>
+ {
+ b.Property("GroupGID")
+ .HasColumnType("character varying(20)")
+ .HasColumnName("group_gid");
+
+ b.Property("GroupUserUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("group_user_uid");
+
+ b.Property("FromFinder")
+ .HasColumnType("boolean")
+ .HasColumnName("from_finder");
+
+ b.Property("IsModerator")
+ .HasColumnType("boolean")
+ .HasColumnName("is_moderator");
+
+ b.Property("IsPinned")
+ .HasColumnType("boolean")
+ .HasColumnName("is_pinned");
+
+ b.Property("JoinedGroupOn")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("joined_group_on");
+
+ b.HasKey("GroupGID", "GroupUserUID")
+ .HasName("pk_group_pairs");
+
+ b.HasIndex("GroupGID")
+ .HasDatabaseName("ix_group_pairs_group_gid");
+
+ b.HasIndex("GroupUserUID")
+ .HasDatabaseName("ix_group_pairs_group_user_uid");
+
+ b.ToTable("group_pairs", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.GroupPairPreferredPermission", b =>
+ {
+ b.Property("UserUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("user_uid");
+
+ b.Property("GroupGID")
+ .HasColumnType("character varying(20)")
+ .HasColumnName("group_gid");
+
+ b.Property("DisableAnimations")
+ .HasColumnType("boolean")
+ .HasColumnName("disable_animations");
+
+ b.Property("DisableSounds")
+ .HasColumnType("boolean")
+ .HasColumnName("disable_sounds");
+
+ b.Property("DisableVFX")
+ .HasColumnType("boolean")
+ .HasColumnName("disable_vfx");
+
+ b.Property("IsPaused")
+ .HasColumnType("boolean")
+ .HasColumnName("is_paused");
+
+ b.HasKey("UserUID", "GroupGID")
+ .HasName("pk_group_pair_preferred_permissions");
+
+ b.HasIndex("GroupGID")
+ .HasDatabaseName("ix_group_pair_preferred_permissions_group_gid");
+
+ b.HasIndex("UserUID")
+ .HasDatabaseName("ix_group_pair_preferred_permissions_user_uid");
+
+ b.ToTable("group_pair_preferred_permissions", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.GroupProfile", b =>
+ {
+ b.Property("GroupGID")
+ .HasMaxLength(20)
+ .HasColumnType("character varying(20)")
+ .HasColumnName("group_gid");
+
+ b.Property("Base64GroupProfileImage")
+ .HasColumnType("text")
+ .HasColumnName("base64group_profile_image");
+
+ b.Property("Description")
+ .HasColumnType("text")
+ .HasColumnName("description");
+
+ b.Property("IsNSFW")
+ .HasColumnType("boolean")
+ .HasColumnName("is_nsfw");
+
+ b.Property("ProfileDisabled")
+ .HasColumnType("boolean")
+ .HasColumnName("profile_disabled");
+
+ b.Property("Tags")
+ .HasColumnType("text")
+ .HasColumnName("tags");
+
+ b.HasKey("GroupGID")
+ .HasName("pk_group_profiles");
+
+ b.HasIndex("GroupGID")
+ .HasDatabaseName("ix_group_profiles_group_gid");
+
+ b.ToTable("group_profiles", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.GroupTempInvite", b =>
+ {
+ b.Property("GroupGID")
+ .HasColumnType("character varying(20)")
+ .HasColumnName("group_gid");
+
+ b.Property("Invite")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)")
+ .HasColumnName("invite");
+
+ b.Property("ExpirationDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("expiration_date");
+
+ b.HasKey("GroupGID", "Invite")
+ .HasName("pk_group_temp_invites");
+
+ b.HasIndex("GroupGID")
+ .HasDatabaseName("ix_group_temp_invites_group_gid");
+
+ b.HasIndex("Invite")
+ .HasDatabaseName("ix_group_temp_invites_invite");
+
+ b.ToTable("group_temp_invites", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.LodeStoneAuth", b =>
+ {
+ b.Property("DiscordId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("numeric(20,0)")
+ .HasColumnName("discord_id");
+
+ b.Property("HashedLodestoneId")
+ .HasMaxLength(100)
+ .HasColumnType("character varying(100)")
+ .HasColumnName("hashed_lodestone_id");
+
+ b.Property("LodestoneAuthString")
+ .HasMaxLength(100)
+ .HasColumnType("character varying(100)")
+ .HasColumnName("lodestone_auth_string");
+
+ b.Property("StartedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("started_at");
+
+ b.Property("UserUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("user_uid");
+
+ b.HasKey("DiscordId")
+ .HasName("pk_lodestone_auth");
+
+ b.HasIndex("UserUID")
+ .HasDatabaseName("ix_lodestone_auth_user_uid");
+
+ b.ToTable("lodestone_auth", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.User", b =>
+ {
+ b.Property("UID")
+ .HasMaxLength(10)
+ .HasColumnType("character varying(10)")
+ .HasColumnName("uid");
+
+ b.Property("Alias")
+ .HasMaxLength(15)
+ .HasColumnType("character varying(15)")
+ .HasColumnName("alias");
+
+ b.Property("HasVanity")
+ .HasColumnType("boolean")
+ .HasColumnName("has_vanity");
+
+ b.Property("IsAdmin")
+ .HasColumnType("boolean")
+ .HasColumnName("is_admin");
+
+ b.Property("IsModerator")
+ .HasColumnType("boolean")
+ .HasColumnName("is_moderator");
+
+ b.Property("LastLoggedIn")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("last_logged_in");
+
+ b.Property("TextColorHex")
+ .HasMaxLength(9)
+ .HasColumnType("character varying(9)")
+ .HasColumnName("text_color_hex");
+
+ b.Property("TextGlowColorHex")
+ .HasMaxLength(9)
+ .HasColumnType("character varying(9)")
+ .HasColumnName("text_glow_color_hex");
+
+ b.Property("Timestamp")
+ .IsConcurrencyToken()
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("bytea")
+ .HasColumnName("timestamp");
+
+ b.HasKey("UID")
+ .HasName("pk_users");
+
+ b.ToTable("users", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.UserDefaultPreferredPermission", b =>
+ {
+ b.Property("UserUID")
+ .HasMaxLength(10)
+ .HasColumnType("character varying(10)")
+ .HasColumnName("user_uid");
+
+ b.Property("DisableGroupAnimations")
+ .HasColumnType("boolean")
+ .HasColumnName("disable_group_animations");
+
+ b.Property("DisableGroupSounds")
+ .HasColumnType("boolean")
+ .HasColumnName("disable_group_sounds");
+
+ b.Property("DisableGroupVFX")
+ .HasColumnType("boolean")
+ .HasColumnName("disable_group_vfx");
+
+ b.Property("DisableIndividualAnimations")
+ .HasColumnType("boolean")
+ .HasColumnName("disable_individual_animations");
+
+ b.Property("DisableIndividualSounds")
+ .HasColumnType("boolean")
+ .HasColumnName("disable_individual_sounds");
+
+ b.Property("DisableIndividualVFX")
+ .HasColumnType("boolean")
+ .HasColumnName("disable_individual_vfx");
+
+ b.Property("IndividualIsSticky")
+ .HasColumnType("boolean")
+ .HasColumnName("individual_is_sticky");
+
+ b.HasKey("UserUID")
+ .HasName("pk_user_default_preferred_permissions");
+
+ b.HasIndex("UserUID")
+ .HasDatabaseName("ix_user_default_preferred_permissions_user_uid");
+
+ b.ToTable("user_default_preferred_permissions", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.UserPermissionSet", b =>
+ {
+ b.Property("UserUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("user_uid");
+
+ b.Property("OtherUserUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("other_user_uid");
+
+ b.Property("DisableAnimations")
+ .HasColumnType("boolean")
+ .HasColumnName("disable_animations");
+
+ b.Property("DisableSounds")
+ .HasColumnType("boolean")
+ .HasColumnName("disable_sounds");
+
+ b.Property("DisableVFX")
+ .HasColumnType("boolean")
+ .HasColumnName("disable_vfx");
+
+ b.Property("IsPaused")
+ .HasColumnType("boolean")
+ .HasColumnName("is_paused");
+
+ b.Property("Sticky")
+ .HasColumnType("boolean")
+ .HasColumnName("sticky");
+
+ b.HasKey("UserUID", "OtherUserUID")
+ .HasName("pk_user_permission_sets");
+
+ b.HasIndex("OtherUserUID")
+ .HasDatabaseName("ix_user_permission_sets_other_user_uid");
+
+ b.HasIndex("UserUID")
+ .HasDatabaseName("ix_user_permission_sets_user_uid");
+
+ b.HasIndex("UserUID", "OtherUserUID", "IsPaused")
+ .HasDatabaseName("ix_user_permission_sets_user_uid_other_user_uid_is_paused");
+
+ b.ToTable("user_permission_sets", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.UserProfileData", b =>
+ {
+ b.Property("UserUID")
+ .HasColumnType("character varying(10)")
+ .HasColumnName("user_uid");
+
+ b.Property("Base64ProfileImage")
+ .HasColumnType("text")
+ .HasColumnName("base64profile_image");
+
+ b.Property("FlaggedForReport")
+ .HasColumnType("boolean")
+ .HasColumnName("flagged_for_report");
+
+ b.Property("IsNSFW")
+ .HasColumnType("boolean")
+ .HasColumnName("is_nsfw");
+
+ b.Property("ProfileDisabled")
+ .HasColumnType("boolean")
+ .HasColumnName("profile_disabled");
+
+ b.Property("UserDescription")
+ .HasColumnType("text")
+ .HasColumnName("user_description");
+
+ b.HasKey("UserUID")
+ .HasName("pk_user_profile_data");
+
+ b.ToTable("user_profile_data", (string)null);
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.Auth", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.User", "PrimaryUser")
+ .WithMany()
+ .HasForeignKey("PrimaryUserUID")
+ .HasConstraintName("fk_auth_users_primary_user_uid");
+
+ b.HasOne("LightlessSyncShared.Models.User", "User")
+ .WithMany()
+ .HasForeignKey("UserUID")
+ .HasConstraintName("fk_auth_users_user_uid");
+
+ b.Navigation("PrimaryUser");
+
+ b.Navigation("User");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.CharaData", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.User", "Uploader")
+ .WithMany()
+ .HasForeignKey("UploaderUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_chara_data_users_uploader_uid");
+
+ b.Navigation("Uploader");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.CharaDataAllowance", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.Group", "AllowedGroup")
+ .WithMany()
+ .HasForeignKey("AllowedGroupGID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .HasConstraintName("fk_chara_data_allowance_groups_allowed_group_gid");
+
+ b.HasOne("LightlessSyncShared.Models.User", "AllowedUser")
+ .WithMany()
+ .HasForeignKey("AllowedUserUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .HasConstraintName("fk_chara_data_allowance_users_allowed_user_uid");
+
+ b.HasOne("LightlessSyncShared.Models.CharaData", "Parent")
+ .WithMany("AllowedIndividiuals")
+ .HasForeignKey("ParentId", "ParentUploaderUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_chara_data_allowance_chara_data_parent_id_parent_uploader_u");
+
+ b.Navigation("AllowedGroup");
+
+ b.Navigation("AllowedUser");
+
+ b.Navigation("Parent");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.CharaDataFile", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.FileCache", "FileCache")
+ .WithMany()
+ .HasForeignKey("FileCacheHash")
+ .OnDelete(DeleteBehavior.Cascade)
+ .HasConstraintName("fk_chara_data_files_files_file_cache_hash");
+
+ b.HasOne("LightlessSyncShared.Models.CharaData", "Parent")
+ .WithMany("Files")
+ .HasForeignKey("ParentId", "ParentUploaderUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_chara_data_files_chara_data_parent_id_parent_uploader_uid");
+
+ b.Navigation("FileCache");
+
+ b.Navigation("Parent");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.CharaDataFileSwap", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.CharaData", "Parent")
+ .WithMany("FileSwaps")
+ .HasForeignKey("ParentId", "ParentUploaderUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_chara_data_file_swaps_chara_data_parent_id_parent_uploader_");
+
+ b.Navigation("Parent");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.CharaDataOriginalFile", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.CharaData", "Parent")
+ .WithMany("OriginalFiles")
+ .HasForeignKey("ParentId", "ParentUploaderUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_chara_data_orig_files_chara_data_parent_id_parent_uploader_");
+
+ b.Navigation("Parent");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.CharaDataPose", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.CharaData", "Parent")
+ .WithMany("Poses")
+ .HasForeignKey("ParentId", "ParentUploaderUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_chara_data_poses_chara_data_parent_id_parent_uploader_uid");
+
+ b.Navigation("Parent");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.ClientPair", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.User", "OtherUser")
+ .WithMany()
+ .HasForeignKey("OtherUserUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_client_pairs_users_other_user_uid");
+
+ b.HasOne("LightlessSyncShared.Models.User", "User")
+ .WithMany()
+ .HasForeignKey("UserUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_client_pairs_users_user_uid");
+
+ b.Navigation("OtherUser");
+
+ b.Navigation("User");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.FileCache", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.User", "Uploader")
+ .WithMany()
+ .HasForeignKey("UploaderUID")
+ .HasConstraintName("fk_file_caches_users_uploader_uid");
+
+ b.Navigation("Uploader");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.Group", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.User", "Owner")
+ .WithMany()
+ .HasForeignKey("OwnerUID")
+ .HasConstraintName("fk_groups_users_owner_uid");
+
+ b.Navigation("Owner");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.GroupBan", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.User", "BannedBy")
+ .WithMany()
+ .HasForeignKey("BannedByUID")
+ .HasConstraintName("fk_group_bans_users_banned_by_uid");
+
+ b.HasOne("LightlessSyncShared.Models.User", "BannedUser")
+ .WithMany()
+ .HasForeignKey("BannedUserUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_group_bans_users_banned_user_uid");
+
+ b.HasOne("LightlessSyncShared.Models.Group", "Group")
+ .WithMany()
+ .HasForeignKey("GroupGID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_group_bans_groups_group_gid");
+
+ b.Navigation("BannedBy");
+
+ b.Navigation("BannedUser");
+
+ b.Navigation("Group");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.GroupPair", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.Group", "Group")
+ .WithMany()
+ .HasForeignKey("GroupGID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_group_pairs_groups_group_gid");
+
+ b.HasOne("LightlessSyncShared.Models.User", "GroupUser")
+ .WithMany()
+ .HasForeignKey("GroupUserUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_group_pairs_users_group_user_uid");
+
+ b.Navigation("Group");
+
+ b.Navigation("GroupUser");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.GroupPairPreferredPermission", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.Group", "Group")
+ .WithMany()
+ .HasForeignKey("GroupGID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_group_pair_preferred_permissions_groups_group_gid");
+
+ b.HasOne("LightlessSyncShared.Models.User", "User")
+ .WithMany()
+ .HasForeignKey("UserUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_group_pair_preferred_permissions_users_user_uid");
+
+ b.Navigation("Group");
+
+ b.Navigation("User");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.GroupProfile", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.Group", "Group")
+ .WithOne("Profile")
+ .HasForeignKey("LightlessSyncShared.Models.GroupProfile", "GroupGID")
+ .HasConstraintName("fk_group_profiles_groups_group_gid");
+
+ b.Navigation("Group");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.GroupTempInvite", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.Group", "Group")
+ .WithMany()
+ .HasForeignKey("GroupGID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_group_temp_invites_groups_group_gid");
+
+ b.Navigation("Group");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.LodeStoneAuth", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.User", "User")
+ .WithMany()
+ .HasForeignKey("UserUID")
+ .HasConstraintName("fk_lodestone_auth_users_user_uid");
+
+ b.Navigation("User");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.UserDefaultPreferredPermission", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.User", "User")
+ .WithMany()
+ .HasForeignKey("UserUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_user_default_preferred_permissions_users_user_uid");
+
+ b.Navigation("User");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.UserPermissionSet", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.User", "OtherUser")
+ .WithMany()
+ .HasForeignKey("OtherUserUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_user_permission_sets_users_other_user_uid");
+
+ b.HasOne("LightlessSyncShared.Models.User", "User")
+ .WithMany()
+ .HasForeignKey("UserUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_user_permission_sets_users_user_uid");
+
+ b.Navigation("OtherUser");
+
+ b.Navigation("User");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.UserProfileData", b =>
+ {
+ b.HasOne("LightlessSyncShared.Models.User", "User")
+ .WithMany()
+ .HasForeignKey("UserUID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_user_profile_data_users_user_uid");
+
+ b.Navigation("User");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.CharaData", b =>
+ {
+ b.Navigation("AllowedIndividiuals");
+
+ b.Navigation("FileSwaps");
+
+ b.Navigation("Files");
+
+ b.Navigation("OriginalFiles");
+
+ b.Navigation("Poses");
+ });
+
+ modelBuilder.Entity("LightlessSyncShared.Models.Group", b =>
+ {
+ b.Navigation("Profile");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/LightlessSyncServer/LightlessSyncShared/Migrations/20251015173920_AddGroupDisabledAndNSFW.cs b/LightlessSyncServer/LightlessSyncShared/Migrations/20251015173920_AddGroupDisabledAndNSFW.cs
new file mode 100644
index 0000000..201e1b0
--- /dev/null
+++ b/LightlessSyncServer/LightlessSyncShared/Migrations/20251015173920_AddGroupDisabledAndNSFW.cs
@@ -0,0 +1,40 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace LightlessSyncServer.Migrations
+{
+ ///
+ public partial class AddGroupDisabledAndNSFW : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.AddColumn(
+ name: "is_nsfw",
+ table: "group_profiles",
+ type: "boolean",
+ nullable: false,
+ defaultValue: false);
+
+ migrationBuilder.AddColumn(
+ name: "profile_disabled",
+ table: "group_profiles",
+ type: "boolean",
+ nullable: false,
+ defaultValue: false);
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropColumn(
+ name: "is_nsfw",
+ table: "group_profiles");
+
+ migrationBuilder.DropColumn(
+ name: "profile_disabled",
+ table: "group_profiles");
+ }
+ }
+}
diff --git a/LightlessSyncServer/LightlessSyncShared/Migrations/LightlessDbContextModelSnapshot.cs b/LightlessSyncServer/LightlessSyncShared/Migrations/LightlessDbContextModelSnapshot.cs
index 578c910..eef5c03 100644
--- a/LightlessSyncServer/LightlessSyncShared/Migrations/LightlessDbContextModelSnapshot.cs
+++ b/LightlessSyncServer/LightlessSyncShared/Migrations/LightlessDbContextModelSnapshot.cs
@@ -597,6 +597,14 @@ namespace LightlessSyncServer.Migrations
.HasColumnType("text")
.HasColumnName("description");
+ b.Property("IsNSFW")
+ .HasColumnType("boolean")
+ .HasColumnName("is_nsfw");
+
+ b.Property("ProfileDisabled")
+ .HasColumnType("boolean")
+ .HasColumnName("profile_disabled");
+
b.Property("Tags")
.HasColumnType("text")
.HasColumnName("tags");
diff --git a/LightlessSyncServer/LightlessSyncShared/Models/GroupProfile.cs b/LightlessSyncServer/LightlessSyncShared/Models/GroupProfile.cs
index fdc1717..7cafdfe 100644
--- a/LightlessSyncServer/LightlessSyncShared/Models/GroupProfile.cs
+++ b/LightlessSyncServer/LightlessSyncShared/Models/GroupProfile.cs
@@ -15,4 +15,6 @@ public class GroupProfile
public string Description { get; set; }
public string Tags { get; set; }
public string Base64GroupProfileImage { get; set; }
+ public bool IsNSFW { get; set; } = false;
+ public bool ProfileDisabled { get; set; } = false;
}