83 lines
3.1 KiB
C#
83 lines
3.1 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using SVSim.Database.Enums;
|
|
using SVSim.Database.Models;
|
|
using SVSim.Database.Repositories.Card;
|
|
using SVSim.Database.Repositories.Globals;
|
|
|
|
namespace SVSim.Database.Repositories.Viewer;
|
|
|
|
public class ViewerRepository : IViewerRepository
|
|
{
|
|
protected readonly SVSimDbContext _dbContext;
|
|
|
|
private const int MaxFriends = 20;
|
|
|
|
public ViewerRepository(SVSimDbContext dbContext)
|
|
{
|
|
_dbContext = dbContext;
|
|
}
|
|
|
|
public async Task<Models.Viewer?> GetViewerBySocialConnection(SocialAccountType accountType, ulong socialId)
|
|
{
|
|
return (await _dbContext.Set<SocialAccountConnection>()
|
|
.AsNoTracking()
|
|
.Include(sac => sac.Viewer)
|
|
.FirstOrDefaultAsync(sac => sac.AccountType == accountType && sac.AccountId == socialId))
|
|
?.Viewer;
|
|
}
|
|
|
|
public async Task<Models.Viewer?> GetViewerWithSocials(long id)
|
|
{
|
|
return await _dbContext.Set<Models.Viewer>().AsNoTracking().Include(viewer => viewer.SocialAccountConnections)
|
|
.FirstOrDefaultAsync(viewer => viewer.Id == id);
|
|
}
|
|
|
|
public async Task<Models.Viewer?> GetViewerByShortUdid(long shortUdid)
|
|
{
|
|
return await _dbContext.Set<Models.Viewer>().AsNoTracking().Include(viewer => viewer.MissionData)
|
|
.Include(viewer => viewer.Info).FirstOrDefaultAsync(viewer => viewer.ShortUdid == shortUdid);
|
|
}
|
|
|
|
public async Task<Models.Viewer> RegisterViewer(string displayName, SocialAccountType socialType,
|
|
ulong socialAccountIdentifier, ulong? shortUdid = null)
|
|
{
|
|
Models.Viewer viewer = new Models.Viewer
|
|
{
|
|
DisplayName = displayName
|
|
};
|
|
GameConfiguration gameConfig = await new GlobalsRepository(_dbContext).GetGameConfiguration("default");
|
|
|
|
viewer.SocialAccountConnections.Add(new SocialAccountConnection
|
|
{
|
|
AccountId = socialAccountIdentifier,
|
|
AccountType = socialType
|
|
});
|
|
|
|
viewer.Info.MaxFriends = gameConfig.MaxFriends;
|
|
viewer.Info.CountryCode = "KOR";
|
|
viewer.Info.BirthDate = DateTime.UtcNow;
|
|
viewer.Currency.Crystals = gameConfig.DefaultCrystals;
|
|
viewer.Currency.Rupees = gameConfig.DefaultRupees;
|
|
viewer.Currency.RedEther = gameConfig.DefaultEther;
|
|
viewer.MissionData.TutorialState = 100; // finishes tutorial for now
|
|
|
|
List<ClassEntry> classes = await _dbContext.Set<ClassEntry>().ToListAsync();
|
|
viewer.Classes = classes.Select(ce => new ViewerClassData
|
|
{
|
|
Class = ce,
|
|
Exp = 0,
|
|
Level = 0,
|
|
LeaderSkin = ce.DefaultLeaderSkin
|
|
}).ToList();
|
|
|
|
viewer.Sleeves.Add(gameConfig.DefaultSleeve);
|
|
viewer.Degrees.Add(gameConfig.DefaultDegree);
|
|
viewer.Emblems.Add(gameConfig.DefaultEmblem);
|
|
viewer.MyPageBackgrounds.Add(gameConfig.DefaultMyPageBackground);
|
|
viewer.LeaderSkins.AddRange(viewer.Classes.Select(vcd => vcd.LeaderSkin));
|
|
|
|
_dbContext.Set<Models.Viewer>().Add(viewer);
|
|
await _dbContext.SaveChangesAsync();
|
|
return viewer;
|
|
}
|
|
} |