Files
2026-10-16 23:33:13 -07:00

61 lines
1.4 KiB
C#

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>();
}
}
}