mirror of
https://github.com/JogmansonReal/Radicade.git
synced 2026-10-25 15:09:26 -07:00
61 lines
1.4 KiB
C#
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>();
|
|
}
|
|
}
|
|
}
|