Scaffold some AAT stuff

This commit is contained in:
2022-06-19 17:35:33 -05:00
parent 3e938a8576
commit 770344422d
16 changed files with 275 additions and 47 deletions

View File

@@ -67,12 +67,14 @@ namespace Gameboard.ShogiUI.Sockets.Repositories
* 3) User document of Player2.
*/
var session = group.FirstOrDefault()?.doc.ToObject<SessionDocument>();
var player1Doc = group.Skip(1).FirstOrDefault()?.doc.ToObject<UserDocument>();
var player2Doc = group.Skip(2).FirstOrDefault()?.doc.ToObject<UserDocument>();
if (session != null && player1Doc != null)
var player1 = group.Skip(1).FirstOrDefault()?.doc.ToObject<UserDocument>();
var player2Doc = group.Skip(2).FirstOrDefault()?.doc;
if (session != null && player1 != null && player2Doc != null)
{
var player2 = player2Doc == null ? null : new Models.User(player2Doc);
sessions.Add(new SessionMetadata(session.Name, session.IsPrivate, player1Doc.Id, player2?.Id));
var player2 = IsUserDocument(player2Doc)
? new Models.User(player2Doc.ToObject<UserDocument>()!)
: null;
sessions.Add(new SessionMetadata(session.Name, session.IsPrivate, player1.Id, player2?.Id));
}
}
return new Collection<SessionMetadata>(sessions);
@@ -80,6 +82,11 @@ namespace Gameboard.ShogiUI.Sockets.Repositories
return new Collection<SessionMetadata>(Array.Empty<SessionMetadata>());
}
private static bool IsUserDocument(JObject player2Doc)
{
return player2Doc?.SelectToken(nameof(CouchDocument.DocumentType))?.Value<WhichDocumentType>() == WhichDocumentType.User;
}
public async Task<Session?> ReadSession(string name)
{
static Shogi.Domain.Pieces.Piece? MapPiece(Piece? piece)
@@ -112,17 +119,16 @@ namespace Gameboard.ShogiUI.Sockets.Repositories
* Everything Else) Snapshots of the boardstate after every player move.
*/
var session = group[0].doc.ToObject<SessionDocument>();
var player1Doc = group[1].doc.ToObject<UserDocument>();
var group2DocumentType = group[2].doc.Property(nameof(UserDocument.DocumentType).ToCamelCase())?.Value.Value<string>();
var player2Doc = group2DocumentType == WhichDocumentType.User.ToString()
? group[2].doc.ToObject<UserDocument>()
: null;
var player1 = group[1].doc.ToObject<UserDocument>();
var player2Doc = group[2].doc;
var boardState = group.Last().doc.ToObject<BoardStateDocument>();
if (session != null && player1Doc != null && boardState != null)
if (session != null && player1 != null && boardState != null)
{
var player2 = player2Doc == null ? null : new Models.User(player2Doc);
var metaData = new SessionMetadata(session.Name, session.IsPrivate, player1Doc.DisplayName, player2Doc?.DisplayName);
var player2 = IsUserDocument(player2Doc)
? new Models.User(player2Doc.ToObject<UserDocument>()!)
: null;
var metaData = new SessionMetadata(session.Name, session.IsPrivate, player1.Id, player2?.Id);
var shogiBoardState = new BoardState(boardState.Board.ToDictionary(kvp => kvp.Key, kvp => MapPiece(kvp.Value)));
return new Session(shogiBoardState, metaData);
}
@@ -151,15 +157,14 @@ namespace Gameboard.ShogiUI.Sockets.Repositories
* 3) User document of Player2.
*/
var session = group[0].doc.ToObject<SessionDocument>();
var player1Doc = group[1].doc.ToObject<UserDocument>();
var group2DocumentType = group[2].doc.Property(nameof(UserDocument.DocumentType).ToCamelCase())?.Value.Value<string>();
var player2Doc = group2DocumentType == WhichDocumentType.User.ToString()
? group[2].doc.ToObject<UserDocument>()
: null;
if (session != null && player1Doc != null)
var player1 = group[1].doc.ToObject<UserDocument>();
var player2Doc = group[2].doc;
if (session != null && player1 != null)
{
var player2 = player2Doc == null ? null : new Models.User(player2Doc);
return new SessionMetadata(session.Name, session.IsPrivate, player1Doc.Id, player2?.Id);
var player2 = IsUserDocument(player2Doc)
? new Models.User(player2Doc.ToObject<UserDocument>()!)
: null;
return new SessionMetadata(session.Name, session.IsPrivate, player1.Id, player2?.Id);
}
}
return null;