Ei kuvausta

Kirk Trombley ed3a0ffa55 FastAPI Server Reimplementation 5 vuotta sitten
client ed3a0ffa55 FastAPI Server Reimplementation 5 vuotta sitten
server ed3a0ffa55 FastAPI Server Reimplementation 5 vuotta sitten
.drone.yml 8de092997e Drone running tests now 5 vuotta sitten
.gitignore ed3a0ffa55 FastAPI Server Reimplementation 5 vuotta sitten
README.md ed3a0ffa55 FastAPI Server Reimplementation 5 vuotta sitten

README.md

Geoguessr Self-Hosted Reimplementation

Build Status

API

API Endpoints
GET /
    Returns 200 and {
        "version": string,
        "status": string
    }
POST /score
    Accepts {
        "point1": {
            "lat": number,
            "lng": number
        },
        "point2": {
            "lat": number,
            "lng": number
        }
    }
    Returns 400 or 200 and {
        "score": number,
        "distance": number
    }
GET /caches
    Returns 200 and {
        "caches": [
            {
                "generationMethod": string,
                "onlyAmerica": boolean,
                "size": number
            }, ...
        ]
    }
PUT /game
    Accepts {
        "timer": number,
        "rounds": number,
        "onlyAmerica": boolean (default: false),
        "generationMethod": string (default: "MAPCRUNCH"),
        "ruleSet": string (default: "NORMAL")
    }
    Returns 200 and {
        "gameId": string
    }
GET /game/{game_id}/config
    Returns 404 vs 200 and {
        "timer": number,
        "rounds": number,
        "onlyAmerica": boolean,
        "generationMethod": string,
        "ruleSet": string
    }
GET /game/{game_id}/coords
    Returns 404 vs 200 and {
        "1": {
            "lat": number,
            "lng": number,
        }, ...
    }
POST /game/{game_id}/join
    Accepts {
        "playerName": string
    }
    Returns (404, 409) vs 201 and {
        "playerId": string
    }
GET /game/{game_id}/players
    Returns 404 vs 200 and {
        "players": [
            {
                "name": string,
                "currentRound": string || null,
                "totalScore": number,
                "guesses": {
                    "1": {
                        "lat": number,
                        "lng": number,
                        "score": number || null,
                        "timeRemaining": number
                    }, ...
                }
            }, ...
        ]
    }
GET /game/{game_id}/players/{player_id}/current
    Returns 404 vs 200 and {
        "currentRound": string || null,
        "coord": {
            "lat": number,
            "lng": number,
        } || null,
        "timer": number || null
    }
GET /game/{game_id}/linked
    Returns 404 vs 200 and {
        "linkedGame": string || null
    }
POST /game/{game_id}/linked
    Accepts {
        "linkedGame": string
    }
    Returns (401, 404) vs 201
GET /game/{game_id}/round/{round}/first
    Returns 200 and {
        "first": string || null
    }
POST /game/{game_id}/round/{round}/guess/{player_id}
    Accepts {
        "timeRemaining": number,
        "lat": number,
        "lng": number
    }
    Returns (404, 409) vs 201 and {
        "totalScore": number,
        "score": number,
        "distance": number
    }
POST /game/{game_id}/round/{round}/timeout/{player_id}
    Returns (404, 409) vs 201 and {
        "totalScore": number
    }

Next Steps

Planned Game Modes

None currently! Submit ideas!

Code/Design Improvements

  • Rotation in Frozen mode
  • Improved alert of cut off in Race mode
  • Convert back-end to use a real db (persistence between deployments not necessary for now)
  • Use alembic to manage db migrations in real persistent db
  • Improve error handling in UI
  • Improve back-end logging
  • Override google controls in streetview, make custom divs
  • Timestamps/hashes in info responses so checks can be faster
  • Convert to a socket-based api, to allow timing to be server-side

Attributions

Urban game data is based on the World Cities Database