public async Task <ActionResult <Player> > Post([FromBody] PlayerRoomBody body)
        {
            if (body.Username == null || body.AvatarUrl == null)
            {
                return(NotFound()); // 404 : most of api error
            }
            var roomDataProvider   = new RoomDataProvider();
            var playerDataProvider = new PlayerDataProvider();

            var room = await roomDataProvider.Add();

            var token  = await new TokenDataProvider().Add();
            var player = await playerDataProvider.Add(body.Username, body.AvatarUrl, true, room.Id, token.Id);

            // use `GetPlayer` to include `Token` and `Room`
            return(await playerDataProvider.GetPlayer(player.Id));
        }
        public async Task <ActionResult <Player> > Join(string identifier, [FromBody] PlayerRoomBody body)
        {
            if (body.Username == null || body.AvatarUrl == null)
            {
                return(NotFound()); // 404 : most of api error
            }
            var room = await new RoomDataProvider().GetRoom(identifier);

            if (room == null)
            {
                return(NotFound());
            }
            var playerDataProvider = new PlayerDataProvider();
            var token  = await new TokenDataProvider().Add();
            var player = await playerDataProvider.Add(body.Username, body.AvatarUrl, true, room.Id, token.Id);

            return(await playerDataProvider.GetPlayer(player.Id));
        }