Added a way to set a primary location
+ Can be retrieved from the GraphQL API + Fixed `resolve_player` querydoc_update
parent
ec49b7c873
commit
2f846de921
|
@ -853,3 +853,23 @@ def mod_remove_owner(player_name, loc_name):
|
||||||
|
|
||||||
location = get_location(owner, loc_name)
|
location = get_location(owner, loc_name)
|
||||||
location.owner.remove(owner)
|
location.owner.remove(owner)
|
||||||
|
|
||||||
|
|
||||||
|
@command(RequestTypes.POST, permission_level=PermissionLevel.PLAYER)
|
||||||
|
def primary_location(loc_name, discord_uuid=None, mc_uuid=None):
|
||||||
|
"""
|
||||||
|
:request: POST
|
||||||
|
:param loc_name: location to set as primary
|
||||||
|
:param discord_uuid: player discord uuid
|
||||||
|
:param mc_uuid: player mc uuid
|
||||||
|
:return: json representation of the primary location
|
||||||
|
"""
|
||||||
|
player = get_player(discord_uuid, mc_uuid)
|
||||||
|
loc = get_location(player, loc_name)
|
||||||
|
|
||||||
|
player.primary_location = loc
|
||||||
|
|
||||||
|
player.save()
|
||||||
|
|
||||||
|
return loc.json
|
||||||
|
|
||||||
|
|
|
@ -14,10 +14,13 @@ class UnauthorizedQuery(Exception):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__("GraphQL Request Not Authorized")
|
super().__init__("GraphQL Request Not Authorized")
|
||||||
|
|
||||||
|
|
||||||
class PlayerType(DjangoObjectType):
|
class PlayerType(DjangoObjectType):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Player
|
model = Player
|
||||||
fields = ("id", "name", "discord_uuid", "mc_uuid")
|
fields = ("id", "name", "discord_uuid", "mc_uuid", "primary_location")
|
||||||
|
|
||||||
|
primary_location = graphene.Field("GeoffreyApp.api.schema.LocationType")
|
||||||
|
|
||||||
|
|
||||||
class TunnelType(DjangoObjectType):
|
class TunnelType(DjangoObjectType):
|
||||||
|
@ -135,7 +138,7 @@ class ProtectedAPI():
|
||||||
|
|
||||||
|
|
||||||
class Query(graphene.ObjectType):
|
class Query(graphene.ObjectType):
|
||||||
player = graphene.Field(PlayerType, id=graphene.Argument(graphene.Int, required=False), name=graphene.Argument(graphene.String, required=False), discord_uuid=graphene.Argument(graphene.String, required=False))
|
player = graphene.Field(PlayerType, id=graphene.Argument(graphene.Int, required=False), name=graphene.Argument(graphene.String, required=False), mc_uuid=graphene.Argument(graphene.String, required=False), discord_uuid=graphene.Argument(graphene.String, required=False))
|
||||||
locations = graphene.List(LocationType, id=graphene.Argument(graphene.Int, required=False), name=graphene.Argument(graphene.String, required=False))
|
locations = graphene.List(LocationType, id=graphene.Argument(graphene.Int, required=False), name=graphene.Argument(graphene.String, required=False))
|
||||||
shops = graphene.List(ShopType, id=graphene.Argument(graphene.Int, required=False), name=graphene.Argument(graphene.String, required=False))
|
shops = graphene.List(ShopType, id=graphene.Argument(graphene.Int, required=False), name=graphene.Argument(graphene.String, required=False))
|
||||||
towns = graphene.List(TownType, id=graphene.Argument(graphene.Int, required=False), name=graphene.Argument(graphene.String, required=False))
|
towns = graphene.List(TownType, id=graphene.Argument(graphene.Int, required=False), name=graphene.Argument(graphene.String, required=False))
|
||||||
|
@ -145,8 +148,19 @@ class Query(graphene.ObjectType):
|
||||||
points_of_interest = graphene.List(PointOfInterestType, id=graphene.Argument(graphene.Int, required=False), name=graphene.Argument(graphene.String, required=False))
|
points_of_interest = graphene.List(PointOfInterestType, id=graphene.Argument(graphene.Int, required=False), name=graphene.Argument(graphene.String, required=False))
|
||||||
|
|
||||||
@ProtectedAPI.protected_api()
|
@ProtectedAPI.protected_api()
|
||||||
def resolve_player(root, info, id, name, discord_uuid, mc_uuid):
|
def resolve_player(root, info, id=None, name=None, discord_uuid=None, mc_uuid=None):
|
||||||
return Player.objects.get(pk=id, name=name, discord_uuid=discord_uuid, mc_uuid=mc_uuid)
|
query = Player.objects
|
||||||
|
if id is not None:
|
||||||
|
query = query.filter(id=id)
|
||||||
|
elif name is not None:
|
||||||
|
query = query.filter(name__iexact=name)
|
||||||
|
elif discord_uuid is not None:
|
||||||
|
query = query.filter(discord_uuid=discord_uuid)
|
||||||
|
elif mc_uuid is not None:
|
||||||
|
query = query.filter(mc_uuid=mc_uuid)
|
||||||
|
|
||||||
|
return query.get()
|
||||||
|
|
||||||
|
|
||||||
@ProtectedAPI.protected_api()
|
@ProtectedAPI.protected_api()
|
||||||
def resolve_locations(root, info, id=None, name=None):
|
def resolve_locations(root, info, id=None, name=None):
|
||||||
|
|
|
@ -83,6 +83,11 @@ class Player(models.Model):
|
||||||
Discord UUID
|
Discord UUID
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
primary_location = models.OneToOneField("Location", on_delete=models.DO_NOTHING, null=True)
|
||||||
|
"""
|
||||||
|
User's primary location
|
||||||
|
"""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def loc_count(self):
|
def loc_count(self):
|
||||||
"""
|
"""
|
||||||
|
@ -101,12 +106,14 @@ class Player(models.Model):
|
||||||
"name" : "self.name",
|
"name" : "self.name",
|
||||||
"mc_uuid": "self.mc_uuid",
|
"mc_uuid": "self.mc_uuid",
|
||||||
"discord_uuid": "self.discord_uuid",
|
"discord_uuid": "self.discord_uuid",
|
||||||
|
"primary_location": "self.primary_location"
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return {"name": self.name,
|
return {"name": self.name,
|
||||||
"mc_uuid": self.mc_uuid,
|
"mc_uuid": self.mc_uuid,
|
||||||
"discord_uuid": self.discord_uuid
|
"discord_uuid": self.discord_uuid,
|
||||||
|
"primary_location": self.primary_location.json
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -218,7 +225,8 @@ class Location(models.Model):
|
||||||
"owner": self.get_owners,
|
"owner": self.get_owners,
|
||||||
"location": self.position,
|
"location": self.position,
|
||||||
"tunnel": None if self.tunnel is None else self.tunnel.tunnel_str,
|
"tunnel": None if self.tunnel is None else self.tunnel.tunnel_str,
|
||||||
"link": self.link
|
"link": self.link,
|
||||||
|
"primary_location": self.player.primary_location
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
Loading…
Reference in New Issue