mirror of
https://github.com/PluralKit/PluralKit.git
synced 2026-02-08 23:07:54 +00:00
fix: don't delete rows from messages table when the associated member is deleted
This commit is contained in:
parent
54830fd264
commit
34df19c551
9 changed files with 51 additions and 27 deletions
10
PluralKit.Core/Database/Migrations/24.sql
Normal file
10
PluralKit.Core/Database/Migrations/24.sql
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
-- schema version 24
|
||||
-- don't drop message rows when system/member are deleted
|
||||
|
||||
alter table messages alter column member drop not null;
|
||||
alter table messages drop contstraint messages_member_fkey;
|
||||
alter table messages
|
||||
add constraint messages_member_fkey
|
||||
foreign key (member) references members(id) on delete set null;
|
||||
|
||||
update info set schema_version = 24;
|
||||
|
|
@ -29,9 +29,13 @@ public partial class ModelRepository
|
|||
FullMessage Mapper(PKMessage msg, PKMember member, PKSystem system) =>
|
||||
new() { Message = msg, System = system, Member = member };
|
||||
|
||||
var query = "select * from messages"
|
||||
+ " left join members on messages.member = members.id"
|
||||
+ " left join systems on members.system = systems.id"
|
||||
+ " where (mid = @Id or original_mid = @Id)";
|
||||
|
||||
var result = await conn.QueryAsync<PKMessage, PKMember, PKSystem, FullMessage>(
|
||||
"select messages.*, members.*, systems.* from messages, members, systems where (mid = @Id or original_mid = @Id) and messages.member = members.id and systems.id = members.system",
|
||||
Mapper, new { Id = id });
|
||||
query, Mapper, new { Id = id });
|
||||
return result.FirstOrDefault();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ public class DispatchService
|
|||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
var member = await repo.GetMember(newMessage.Member);
|
||||
var member = await repo.GetMember(newMessage.Member!.Value);
|
||||
|
||||
var fullMessage = new FullMessage
|
||||
{
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ public class PKMessage
|
|||
public ulong Mid { get; set; }
|
||||
public ulong? Guild { get; set; } // null value means "no data" (ie. from before this field being added)
|
||||
public ulong Channel { get; set; }
|
||||
public MemberId Member { get; set; }
|
||||
public MemberId? Member { get; set; }
|
||||
public ulong Sender { get; set; }
|
||||
public ulong? OriginalMid { get; set; }
|
||||
}
|
||||
|
|
@ -17,8 +17,8 @@ public class PKMessage
|
|||
public class FullMessage
|
||||
{
|
||||
public PKMessage Message;
|
||||
public PKMember Member;
|
||||
public PKSystem System;
|
||||
public PKMember? Member;
|
||||
public PKSystem? System;
|
||||
|
||||
public JObject ToJson(LookupContext ctx, APIVersion v)
|
||||
{
|
||||
|
|
@ -30,8 +30,8 @@ public class FullMessage
|
|||
o.Add("sender", Message.Sender.ToString());
|
||||
o.Add("channel", Message.Channel.ToString());
|
||||
o.Add("guild", Message.Guild?.ToString());
|
||||
o.Add("system", System.ToJson(ctx, v));
|
||||
o.Add("member", Member.ToJson(ctx, v: v));
|
||||
o.Add("system", System?.ToJson(ctx, v));
|
||||
o.Add("member", Member?.ToJson(ctx, v: v));
|
||||
|
||||
return o;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue