721a4502bb
* Some reasons this needs to exist for it to run on my machine? I don't think it would hurt to have it in other machines so * Add options to member model * Add Privacy to member embed * Added member privacy display list * Update database settings * apparetnly this is nolonger needed? * Fix sql call * Fix more sql errors * Added in settings control * Add all subject to system privacy * Basic API Privacy * Name privacy in logs * update todo * remove CheckReadMemberPermission * Added name privacy to log embed * update todo * Update todo * Update api to handle privacy * update todo * Update systemlist full to respect privacy (as well as system list) * include colour as option for member privacy subject * move todo file (why was it there?) * Update TODO.md * Update TODO.md * Update TODO.md * Deleted to create pr * Update command usage and add to the command tree * Make api respect created privacy * Add editing privacy through the api * Fix pronoun privacy field in api * Fix info leak of display name in api * deprecate privacy field in api * Deprecate privacy diffrently * Update API * Update documentation * Update documentation * Remove comment in yml * Update userguide * Update migration (fix typo in 5.sql too) * Sanatize names * some full stops * Fix after merge * update migration * update schema version * update edit command * update privacy filter * fix a dumb mistake * clarify on what name privacy does * make it easier on someone else * Update docs * Comment out unused code * Add aliases for `member privacy all public` and `member privacy all private`
34 lines
1.4 KiB
C#
34 lines
1.4 KiB
C#
#nullable enable
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
using Dapper;
|
|
|
|
namespace PluralKit.Core
|
|
{
|
|
public static class DatabaseViewsExt
|
|
{
|
|
public static Task<IEnumerable<SystemFronter>> QueryCurrentFronters(this IPKConnection conn, SystemId system) =>
|
|
conn.QueryAsync<SystemFronter>("select * from system_fronters where system = @system", new {system});
|
|
|
|
public static Task<IEnumerable<ListedMember>> QueryMemberList(this IPKConnection conn, SystemId system, PrivacyLevel? privacyFilter = null, string? filter = null, bool includeDescriptionInNameFilter = false)
|
|
{
|
|
StringBuilder query = new StringBuilder("select * from member_list where system = @system");
|
|
|
|
if (privacyFilter != null)
|
|
query.Append($" and member_visibility = {(int) privacyFilter}");
|
|
|
|
if (filter != null)
|
|
{
|
|
static string Filter(string column) => $"position(lower(@filter) in lower(coalesce({column}, ''))) > 0";
|
|
|
|
query.Append($" and ({Filter("name")} or {Filter("display_name")}");
|
|
if (includeDescriptionInNameFilter) query.Append($" or {Filter("description")}");
|
|
query.Append(")");
|
|
}
|
|
|
|
return conn.QueryAsync<ListedMember>(query.ToString(), new {system, filter});
|
|
}
|
|
}
|
|
} |