def run(event, user_id, valid_data): list_id = valid_data[UserAttr.LIST_ID] if not MatchHelper.delete(list_id): end("Unable to delete match listing.") if not UserUtils.update(user_id, UserAttr.LIST_ID, ""): end("Unable to clear user listing id.") return True
def validate(event, user_id) -> Dict[str, str]: HomeHelper.validate_grid_request(event, "Item Clear API (GRID SLOT)") if event[RequestField.Home.GRID] == Constants.Home.MATCH_GRID_SLOT: end("Cannot clear reserved home grid slot.") user_data = UserUtils.get(user_id, UserAttr.CURRENT_HOME) if not user_data: end("Unable to retrieve current home for user.") return user_data
def run(event, user_id, valid_data) -> bool: home_index = event[RequestField.User.HOME] - 1 home_id = valid_data[UserAttr.HOMES][home_index] if not HomeHelper.delete(home_id): end("Unable to delete requested home.") # todo: do we need an extra if :value in #name condition here to catch misuse? if not UserUtils.update(user_id, UserAttr.HOMES, home_index, "REMOVE #name :value"): end("Unable to remove deleted home from user.") return True
def validate(event, user_id) -> Dict[str, str]: user_data = UserUtils.get(user_id, UserAttr.CURRENT_HOME) if not user_data: end("Unable to retrieve current home for user.") validate_meta( target=event, field=RequestField.Home.META, max_size=Config.HOME_META_LIMIT, message="Home Save API (META)", ) return user_data
def validate(event, user_id): user_data = UserUtils.get(user_id, f"{UserAttr.LIST_ID}, {UserAttr.MATCH_ID}") if not user_data: end("Unable to retrieve match and listing for user.") if user_data[UserAttr.LIST_ID]: seconds_old = MatchHelper.get_age(user_data[UserAttr.LIST_ID]) if seconds_old < 2.5: # todo: Config.ENLIST_DELAY end("Attempting to refresh listing too early.") return user_data
def validate(event, user_id) -> Dict[str, Any]: user_data = UserUtils.get(user_id, UserAttr.HOMES) if not user_data: end("Unable to retrieve homes list for user.") validate_choice( target=event, field=RequestField.User.HOME, max=len(user_data[UserAttr.HOMES]), message="Home Delete API (CHOICE).", ) return user_data
def validate(event, user_id) -> Dict[str, Union[List[str], int]]: user_data = UserUtils.get( user_id=user_id, attributes=f"{UserAttr.KEY_COUNT}, {UserAttr.KEY_USED_COUNT}", ) if not user_data: end("Unable to retrieve key and used key count for user.") if user_data[UserAttr.KEY_COUNT] <= 0: end(f"Insufficient keys: {user_data[UserAttr.KEY_COUNT]}") return user_data
def run(event, user_id, valid_data) -> bool: request = SaveRequest(event[RequestField.User.SAVE]) attribute, value = None, None if request == SaveRequest.NAME: attribute, value = UserAttr.NAME, RequestField.User.NAME elif request == SaveRequest.FLAG: attribute, value = UserAttr.FLAG, RequestField.User.FLAG elif request == SaveRequest.META: attribute, value = UserAttr.META, RequestField.User.META if not UserUtils.update(user_id, attribute, value): end("Unable to save user data.") return True
def validate(event, user_id) -> Dict[str, str]: HomeHelper.validate_grid_request( target=event, message="Item Update API (GRID SLOT)" ) validate_meta( target=event, field=RequestField.Item.META, max_size=Config.GRID_META_LIMIT, message="Item Update API (META)", ) user_data = UserUtils.get(user_id, UserAttr.CURRENT_HOME) if not user_data: end("Unable to retrieve current home for user.") return user_data
def run(event, user_id, valid_data) -> Union[bool, str]: match_id = valid_data[UserAttr.MATCH_ID] if match_id and MatchHelper.get_age( match_id) < 10: # todo: put in config return web_socket_endpoint()["address"] list_id = valid_data[UserAttr.LIST_ID] if not list_id: new_id = MatchHelper.generate_id(user_id) if not MatchHelper.new(new_id, user_id): end("Unable to create match listing.") if not UserUtils.update(user_id, UserAttr.LIST_ID, new_id): end("Unable to update user listing id.") return True new_id = MatchHelper.generate_id(user_id) results = MatchHelper.upsert_return(list_id, new_id) if not results: end("Unable to refresh listing.") if MatchAttr.FINDER_ID in results.get("Attributes", {}): return True if not UserUtils.update(user_id, UserAttr.MATCH_ID, new_id): end("Unable to update user with claimed match.") return web_socket_endpoint()["address"]
def run(event, user_id, valid_data) -> Dict[str, Any]: home_index = event[RequestField.User.HOME] - 1 home_id = valid_data[UserAttr.HOMES][home_index] response = table.get_item( Key={TableKey.PARTITION: TablePartition.HOME, TableKey.SORT: home_id}, ProjectionExpression="#grid, #meta", ExpressionAttributeNames={ "#id": TableKey.SORT, "#grid": HomeAttr.GRID, "#meta": HomeAttr.META, }, ) if not (response and "Item" in response and response["Item"]): end("Unable to get home data for requested home.") if not UserUtils.update(user_id, UserAttr.CURRENT_HOME, home_id): end("Unable to set user current home to requested home.") return response["Item"]
def _handler( routes: ROUTES_TYPE, request_enum: EnumMeta, event: Dict[str, Any], ) -> str: # req: Enum = validate_request(event, request_enum) # _route: Route = routes[req] # user_id: Optional[str] = User.validate_id(event) if _route.require_id else None # valid_data: Any = _route.handler.validate(event, user_id) # output: Any = _route.handler.run(event, user_id, valid_data or None) # return _route.output(output) _route: Route = routes[validate_request(event, request_enum)] user_id: Optional[str] = UserUtils.validate_id( event) if _route.require_id else None return _route.output( _route.handler.run(event, user_id, _route.handler.validate(event, user_id)))
def validate(event, user_id) -> Dict[str, int]: user_data = UserUtils.get(user_id, UserAttr.HOME_COUNT) if not user_data: end("Unable to retrieve home count for user.") if user_data[UserAttr.HOME_COUNT] >= Config.HOME_COUNT_MAX: end("Maximum homes reached.") validate_name( target=event, field=RequestField.Home.NAME, max_length=Constants.Home.NAME_MAX_LENGTH, message="Home Create API (NAME)", ) validate_choice( target=event, field=RequestField.Home.BIODOME, max=Config.BIODOME_COUNT, message="Home Create API (BIODOME)", ) return user_data
def validate(event, user_id) -> Dict[str, Union[int, str]]: HomeHelper.validate_grid_request(event, "Item Place API (GRID SLOT)") if event[RequestField.Home.GRID] == Constants.Home.MATCH_GRID_SLOT: end("Cannot place reserved home grid slot.") validate_meta( target=event, field=RequestField.Item.META, max_size=Config.GRID_META_LIMIT, message="Item Place API (META)", ) user_data = UserUtils.get( user_id, f"{UserAttr.INVENTORY_COUNT}, {UserAttr.CURRENT_HOME}", ) if not user_data: end("Unable to retrieve inventory and current home for user.") validate_choice( target=event, field=RequestField.User.ITEM, max=user_data[UserAttr.INVENTORY_COUNT], message="Item Place API (ITEM CHOICE)", ) return user_data
def run(event, user_id, valid_data: Dict[str, str]) -> Union[str, bool]: match_id = valid_data[UserAttr.MATCH_ID] # todo: Config.MATCH_COOLDOWN if match_id and MatchHelper.get_age(match_id) < 10: return web_socket_endpoint()["address"] scan_items = MatchHelper.find_available(user_id) if not scan_items: return False scan_match_id = scan_items[0]["id"] seconds_old = MatchHelper.get_age(scan_match_id) # todo: Config.MATCH_TIMEOUT if seconds_old > 15: MatchHelper.delete(scan_match_id) return False if not MatchHelper.claim(scan_match_id, user_id): return False if not UserUtils.update(user_id, UserAttr.MATCH_ID, scan_match_id): end("Unable to update user match id.") # todo: send match id to chat server to expect lister_id and finder_id return web_socket_endpoint()["address"]
def validate(event: Dict[str, Any], user_id: Optional[str]) -> Dict[str, Any]: user_data = UserUtils.get(user_id, UserHelper.data_attributes()) if not user_data: end("Unable to get data attributes for user.") return user_data
def validate(event, user_id): user_data = UserUtils.get(user_id, UserAttr.LIST_ID) if not (user_data and user_data[UserAttr.LIST_ID]): end("User not listed.") return user_data
def validate(event, user_id) -> Dict[str, str]: user_data = UserUtils.get(user_id, UserAttr.MATCH_ID) return user_data