mirror of
https://github.com/JogmansonReal/Radicade.git
synced 2026-10-26 23:49:02 -07:00
Radicade Public Code
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RadicadeServer.DB;
|
||||
using RadicadeServer.Extensions;
|
||||
using RadicadeServer.RecNet.Accounts.Local;
|
||||
|
||||
namespace RadicadeServer.RecNet.Avatar;
|
||||
|
||||
public static class SavedOutfits
|
||||
{
|
||||
public static async Task<List<Outfit>> GetAsync(RecDBContext db, long accountId)
|
||||
{
|
||||
var avatar = await db.Avatars.AsNoTracking().FirstOrDefaultAsync(x => x.AccountId == accountId);
|
||||
return Parse(avatar?.Outfits);
|
||||
}
|
||||
|
||||
public static async Task<Outfit?> SaveAsync(RecDBContext db, long accountId, Outfit? outfit)
|
||||
{
|
||||
if (outfit?.Slot == null)
|
||||
return null;
|
||||
|
||||
var avatar = await db.Avatars.FirstOrDefaultAsync(x => x.AccountId == accountId);
|
||||
if (avatar == null)
|
||||
{
|
||||
avatar = new PlayerAvatar
|
||||
{
|
||||
AccountId = accountId,
|
||||
Avatar = DBConfig.DefaultAvatar,
|
||||
Outfits = "[]"
|
||||
};
|
||||
db.Avatars.Add(avatar);
|
||||
}
|
||||
|
||||
var outfits = Parse(avatar.Outfits);
|
||||
|
||||
var matchingSlot = outfits.FindIndex(x => x.Slot == outfit.Slot);
|
||||
if (matchingSlot >= 0)
|
||||
outfits[matchingSlot] = outfit;
|
||||
else
|
||||
outfits.Add(outfit);
|
||||
|
||||
avatar.Outfits = outfits.ToJson();
|
||||
|
||||
await db.SaveChangesAsync();
|
||||
|
||||
return outfit;
|
||||
}
|
||||
|
||||
private static List<Outfit> Parse(string? stored)
|
||||
{
|
||||
try
|
||||
{
|
||||
var outfits = (stored ?? string.Empty).FromJson<List<Outfit>>();
|
||||
return outfits?.Where(x => x != null).ToList() ?? new List<Outfit>();
|
||||
}
|
||||
catch
|
||||
{
|
||||
return new List<Outfit>();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user