2020-06-13 16:03:57 +02:00
#nullable enable
2020-06-13 13:58:27 +02:00
using System.Threading.Tasks ;
using Dapper ;
2020-06-29 13:57:48 +02:00
using PluralKit.Core ;
2020-06-13 13:58:27 +02:00
namespace PluralKit.Core
{
public static class ModelQueryExt
{
2020-06-14 21:37:04 +02:00
public static Task < PKSystem ? > QuerySystem ( this IPKConnection conn , SystemId id ) = >
2020-06-13 19:42:04 +02:00
conn . QueryFirstOrDefaultAsync < PKSystem ? > ( "select * from systems where id = @id" , new { id } ) ;
2020-06-14 21:37:04 +02:00
public static Task < PKMember ? > QueryMember ( this IPKConnection conn , MemberId id ) = >
2020-06-13 16:03:57 +02:00
conn . QueryFirstOrDefaultAsync < PKMember ? > ( "select * from members where id = @id" , new { id } ) ;
2020-06-13 18:31:20 +02:00
public static Task < GuildConfig > QueryOrInsertGuildConfig ( this IPKConnection conn , ulong guild ) = >
2020-06-13 19:15:50 +02:00
conn . QueryFirstAsync < GuildConfig > ( "insert into servers (id) values (@guild) on conflict (id) do update set id = @guild returning *" , new { guild } ) ;
2020-06-13 16:03:57 +02:00
2020-06-14 21:37:04 +02:00
public static Task < SystemGuildSettings > QueryOrInsertSystemGuildConfig ( this IPKConnection conn , ulong guild , SystemId system ) = >
2020-06-13 16:03:57 +02:00
conn . QueryFirstAsync < SystemGuildSettings > (
2020-06-24 13:56:56 +02:00
"insert into system_guild (guild, system) values (@guild, @system) on conflict (guild, system) do update set guild = @guild, system = @system returning *" ,
2020-06-13 16:03:57 +02:00
new { guild , system } ) ;
public static Task < MemberGuildSettings > QueryOrInsertMemberGuildConfig (
2020-06-14 21:37:04 +02:00
this IPKConnection conn , ulong guild , MemberId member ) = >
2020-06-13 16:03:57 +02:00
conn . QueryFirstAsync < MemberGuildSettings > (
"insert into member_guild (guild, member) values (@guild, @member) on conflict (guild, member) do update set guild = @guild, member = @member returning *" ,
new { guild , member } ) ;
2020-06-29 13:57:48 +02:00
public static Task < PKMember > UpdateMember ( this IPKConnection conn , MemberId id , MemberPatch patch )
{
var ( query , pms ) = patch . Apply ( new UpdateQueryBuilder ( "members" , "id = @id" ) )
. WithConstant ( "id" , id )
. Build ( "returning *" ) ;
return conn . QueryFirstAsync < PKMember > ( query , pms ) ;
}
public static Task DeleteMember ( this IPKConnection conn , MemberId id ) = >
conn . ExecuteAsync ( "delete from members where id = @Id" , new { Id = id } ) ;
2020-06-13 13:58:27 +02:00
}
}