mirror of
https://github.com/PluralKit/PluralKit.git
synced 2026-02-08 14:57:54 +00:00
feat: premium ID changes
Some checks failed
Build and push Docker image / .net docker build (push) Has been cancelled
.net checks / run .net tests (push) Has been cancelled
.net checks / dotnet-format (push) Has been cancelled
Build and push Rust service Docker images / rust docker build (push) Has been cancelled
rust checks / cargo fmt (push) Has been cancelled
Some checks failed
Build and push Docker image / .net docker build (push) Has been cancelled
.net checks / run .net tests (push) Has been cancelled
.net checks / dotnet-format (push) Has been cancelled
Build and push Rust service Docker images / rust docker build (push) Has been cancelled
rust checks / cargo fmt (push) Has been cancelled
This commit is contained in:
parent
84e98450e0
commit
def9285250
19 changed files with 364 additions and 5 deletions
|
|
@ -0,0 +1,34 @@
|
|||
using Dapper;
|
||||
|
||||
using SqlKata;
|
||||
|
||||
using NodaTime;
|
||||
|
||||
namespace PluralKit.Core;
|
||||
|
||||
public partial class ModelRepository
|
||||
{
|
||||
public Task<HidChangelog?> GetHidChangelogById(int id)
|
||||
{
|
||||
var query = new Query("hid_changelog").Where("id", id);
|
||||
return _db.QueryFirst<HidChangelog?>(query);
|
||||
}
|
||||
|
||||
public async Task<HidChangelog> CreateHidChangelog(SystemId system, ulong discord_uid, string hid_type, string hid_old, string hid_new, IPKConnection? conn = null)
|
||||
{
|
||||
var query = new Query("hid_changelog").AsInsert(new { system, discord_uid, hid_type, hid_old, hid_new, });
|
||||
var changelog = await _db.QueryFirst<HidChangelog>(conn, query, "returning *");
|
||||
_logger.Information("Created HidChangelog {HidChangelogId} for system {SystemId}: {HidType} {OldHid} -> {NewHid}", changelog.Id, system, hid_type, hid_old, hid_new);
|
||||
return changelog;
|
||||
}
|
||||
|
||||
public Task<int> GetHidChangelogCountForDate(SystemId system, LocalDate date)
|
||||
{
|
||||
var query = new Query("hid_changelog")
|
||||
.SelectRaw("count(*)")
|
||||
.Where("system", system)
|
||||
.WhereDate("created", date);
|
||||
|
||||
return _db.QueryFirst<int>(query);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
using SqlKata;
|
||||
using Npgsql;
|
||||
|
||||
namespace PluralKit.Core;
|
||||
|
||||
public partial class ModelRepository
|
||||
{
|
||||
public Task<PremiumAllowance?> GetPremiumAllowance(SystemId system, IPKConnection conn = null)
|
||||
=> _db.QueryFirst<PremiumAllowance?>(conn, new Query("premium_allowances").Where("system", system));
|
||||
|
||||
public Task CreatePremiumAllowance(SystemId system, IPKConnection conn = null)
|
||||
{
|
||||
var query = new Query("premium_allowances").AsInsert(new
|
||||
{
|
||||
system = system,
|
||||
});
|
||||
|
||||
return _db.ExecuteQuery(query, "on conflict do nothing");
|
||||
}
|
||||
|
||||
public async Task<PremiumAllowance> UpdatePremiumAllowance(SystemId system, PremiumAllowancePatch patch, IPKConnection conn = null)
|
||||
{
|
||||
var query = patch.Apply(new Query("premium_allowances").Where("system", system));
|
||||
return await _db.QueryFirst<PremiumAllowance>(conn, query, "returning *");
|
||||
}
|
||||
|
||||
public async Task<bool> UpdatePremiumAllowanceForIdChange(SystemId system, IPKConnection conn = null)
|
||||
{
|
||||
var query = new Query("premium_allowances")
|
||||
.AsUpdate(new
|
||||
{
|
||||
id_changes_remaining = new UnsafeLiteral("id_changes_remaining - 1")
|
||||
})
|
||||
.Where("system", system);
|
||||
|
||||
try
|
||||
{
|
||||
await _db.ExecuteQuery(conn, query);
|
||||
}
|
||||
catch (PostgresException pe)
|
||||
{
|
||||
if (!pe.Message.Contains("violates check constraint"))
|
||||
throw;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
using SqlKata;
|
||||
using Npgsql;
|
||||
|
||||
namespace PluralKit.Core;
|
||||
|
||||
|
|
|
|||
15
PluralKit.Core/Models/HidChangelog.cs
Normal file
15
PluralKit.Core/Models/HidChangelog.cs
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
using Newtonsoft.Json.Linq;
|
||||
using NodaTime;
|
||||
|
||||
namespace PluralKit.Core;
|
||||
|
||||
public class HidChangelog
|
||||
{
|
||||
public int Id { get; }
|
||||
public SystemId System { get; }
|
||||
public ulong DiscordUid { get; }
|
||||
public string HidType { get; }
|
||||
public string HidOld { get; }
|
||||
public string HidNew { get; }
|
||||
public Instant Created { get; }
|
||||
}
|
||||
14
PluralKit.Core/Models/Patch/PremiumAllowancePatch.cs
Normal file
14
PluralKit.Core/Models/Patch/PremiumAllowancePatch.cs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
using Newtonsoft.Json.Linq;
|
||||
|
||||
using SqlKata;
|
||||
|
||||
namespace PluralKit.Core;
|
||||
|
||||
public class PremiumAllowancePatch: PatchObject
|
||||
{
|
||||
public Partial<int> IdChangesRemaining { get; set; }
|
||||
|
||||
public override Query Apply(Query q) => q.ApplyPatch(wrapper => wrapper
|
||||
.With("id_changes_remaining", IdChangesRemaining)
|
||||
);
|
||||
}
|
||||
8
PluralKit.Core/Models/PremiumAllowance.cs
Normal file
8
PluralKit.Core/Models/PremiumAllowance.cs
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
namespace PluralKit.Core;
|
||||
|
||||
public class PremiumAllowance
|
||||
{
|
||||
public int Id { get; }
|
||||
public SystemId System { get; }
|
||||
public int? IdChangesRemaining { get; }
|
||||
}
|
||||
|
|
@ -22,4 +22,6 @@ public static class Limits
|
|||
|
||||
public static readonly long AvatarFileSizeLimit = 1024 * 1024;
|
||||
public static readonly int AvatarDimensionLimit = 1000;
|
||||
|
||||
public static readonly int PremiumDailyHidChanges = 3;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue