2020-06-13 14:03:57 +00:00
#nullable enable
2020-06-29 12:54:11 +00:00
using System.Collections.Generic ;
using System.Text ;
2020-06-13 11:58:27 +00:00
using System.Threading.Tasks ;
using Dapper ;
namespace PluralKit.Core
{
public static class ModelQueryExt
{
2020-06-14 19:37:04 +00:00
public static Task < PKSystem ? > QuerySystem ( this IPKConnection conn , SystemId id ) = >
2020-06-13 17:42:04 +00:00
conn . QueryFirstOrDefaultAsync < PKSystem ? > ( "select * from systems where id = @id" , new { id } ) ;
2020-06-29 12:54:11 +00:00
public static Task < int > GetSystemMemberCount ( this IPKConnection conn , SystemId id , PrivacyLevel ? privacyFilter = null )
{
var query = new StringBuilder ( "select count(*) from members where system = @Id" ) ;
if ( privacyFilter ! = null )
query . Append ( $" and member_visibility = {(int) privacyFilter.Value}" ) ;
return conn . QuerySingleAsync < int > ( query . ToString ( ) , new { Id = id } ) ;
}
public static Task < IEnumerable < ulong > > GetLinkedAccounts ( this IPKConnection conn , SystemId id ) = >
conn . QueryAsync < ulong > ( "select uid from accounts where system = @Id" , new { Id = id } ) ;
2020-06-14 19:37:04 +00:00
public static Task < PKMember ? > QueryMember ( this IPKConnection conn , MemberId id ) = >
2020-06-13 14:03:57 +00:00
conn . QueryFirstOrDefaultAsync < PKMember ? > ( "select * from members where id = @id" , new { id } ) ;
2020-06-29 12:54:11 +00:00
public static Task < PKMember ? > QueryMemberByHid ( this IPKConnection conn , string hid ) = >
conn . QueryFirstOrDefaultAsync < PKMember ? > ( "select * from members where hid = @hid" , new { hid = hid . ToLowerInvariant ( ) } ) ;
2020-08-16 10:10:54 +00:00
public static Task < PKGroup ? > QueryGroupByName ( this IPKConnection conn , SystemId system , string name ) = >
conn . QueryFirstOrDefaultAsync < PKGroup ? > ( "select * from groups where system = @System and lower(Name) = lower(@Name)" , new { System = system , Name = name } ) ;
2020-06-29 21:51:12 +00:00
public static Task < PKGroup ? > QueryGroupByHid ( this IPKConnection conn , string hid ) = >
conn . QueryFirstOrDefaultAsync < PKGroup ? > ( "select * from groups where hid = @hid" , new { hid = hid . ToLowerInvariant ( ) } ) ;
2020-07-06 17:50:39 +00:00
public static Task < IEnumerable < PKGroup > > QueryGroupsInSystem ( this IPKConnection conn , SystemId system ) = >
conn . QueryAsync < PKGroup > ( "select * from groups where system = @System" , new { System = system } ) ;
2020-07-18 11:19:53 +00:00
public static Task < int > QueryGroupMemberCount ( this IPKConnection conn , GroupId id ,
PrivacyLevel ? privacyFilter = null )
{
var query = new StringBuilder ( "select count(*) from group_members" ) ;
if ( privacyFilter ! = null )
2020-07-18 11:26:36 +00:00
query . Append ( " inner join members on group_members.member_id = members.id" ) ;
2020-07-18 11:19:53 +00:00
query . Append ( " where group_members.group_id = @Id" ) ;
if ( privacyFilter ! = null )
query . Append ( " and members.member_visibility = @PrivacyFilter" ) ;
return conn . QuerySingleOrDefaultAsync < int > ( query . ToString ( ) , new { Id = id , PrivacyFilter = privacyFilter } ) ;
}
2020-07-18 11:26:36 +00:00
public static Task < IEnumerable < PKGroup > > QueryMemberGroups ( this IPKConnection conn , MemberId id ) = >
conn . QueryAsync < PKGroup > (
"select groups.* from group_members inner join groups on group_members.group_id = groups.id where group_members.member_id = @Id" ,
new { Id = id } ) ;
2020-06-13 16:31:20 +00:00
public static Task < GuildConfig > QueryOrInsertGuildConfig ( this IPKConnection conn , ulong guild ) = >
2020-06-13 17:15:50 +00:00
conn . QueryFirstAsync < GuildConfig > ( "insert into servers (id) values (@guild) on conflict (id) do update set id = @guild returning *" , new { guild } ) ;
2020-06-13 14:03:57 +00:00
2020-06-14 19:37:04 +00:00
public static Task < SystemGuildSettings > QueryOrInsertSystemGuildConfig ( this IPKConnection conn , ulong guild , SystemId system ) = >
2020-06-13 14:03:57 +00:00
conn . QueryFirstAsync < SystemGuildSettings > (
2020-06-24 11:56:56 +00: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 14:03:57 +00:00
new { guild , system } ) ;
public static Task < MemberGuildSettings > QueryOrInsertMemberGuildConfig (
2020-06-14 19:37:04 +00:00
this IPKConnection conn , ulong guild , MemberId member ) = >
2020-06-13 14:03:57 +00: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-13 11:58:27 +00:00
}
}