def insert_setting(user_id: int, data: dict): """ HTTP `POST` route for insert a single user setting resource. Args: user_id (int): Public ID of the user. data (UserModel.SCHEMA): Insert data of a new user. Raises: ManagerGetError: If the inserted user could not be found after inserting. ManagerInsertError: If something went wrong during insertion. Returns: InsertSingleResponse: Insert response with the new user and its identifier. """ settings_manager: UserSettingsManager = UserSettingsManager( database_manager=current_app.database_manager) try: settings_manager.insert(data) setting: UserSettingModel = settings_manager.get_user_setting( user_id=user_id, resource=data.get('identifier')) except ManagerGetError as err: return abort(404, err.message) except ManagerInsertError as err: return abort(400, err.message) api_response = InsertSingleResponse(raw=UserSettingModel.to_dict(setting), result_id=setting.resource, url=request.url, model=UserSettingModel.MODEL) return api_response.make_response( prefix=f'users/{user_id}/settings/{setting.resource}')
def get_user_setting(user_id: int, resource: str): """ HTTP `GET`/`HEAD` route for a single user setting resource. Args: user_id (int): Public ID of the user. resource (str): Identifier/Name of the user setting. Raises: ManagerGetError: When the selected user setting does not exists. Notes: Calling the route over HTTP HEAD method will result in an empty body. Returns: GetSingleResponse: Which includes the json data of a UserSettingModel. """ settings_manager = UserSettingsManager( database_manager=current_app.database_manager) try: setting: UserSettingModel = settings_manager.get_user_setting( user_id, resource) api_response = GetSingleResponse(UserSettingModel.to_dict(setting), url=request.url, model=UserSettingModel.MODEL, body=request.method == 'HEAD') except ManagerGetError as err: return abort(404, err.message) return api_response.make_response()
def delete_setting(user_id: int, resource: str): """ HTTP `DELETE` route for delete a single user setting resource. Args: user_id (int): Public ID of the user. resource (str): Identifier/Name of the user setting. Raises: ManagerGetError: When the setting with the `identifier` was not found. ManagerDeleteError: When something went wrong during the deletion. Returns: DeleteSingleResponse: Delete result with the deleted setting as data. """ settings_manager: UserSettingsManager = UserSettingsManager( database_manager=current_app.database_manager) try: deleted_setting = settings_manager.delete(user_id=user_id, resource=resource) api_response = DeleteSingleResponse( raw=UserSettingModel.to_dict(deleted_setting), model=UserSettingModel.MODEL) except ManagerGetError as err: return abort(404, err.message) except ManagerDeleteError as err: return abort(404, err.message) return api_response.make_response()
def get_user_settings(user_id: int): """ HTTP `GET`/`HEAD` route for getting a complete collection of resources. Args: user_id (int): PublicID of the current user. Returns: GetListResponse: Which includes all of the `UserSettingModel`. Notes: Calling the route over HTTP HEAD method will result in an empty body. Raises: ManagerGetError: If the collection/resources could not be found. """ settings_manager = UserSettingsManager( database_manager=current_app.database_manager) try: settings: List[UserSettingModel] = settings_manager.get_user_settings( user_id=user_id) raw_settings = [ UserSettingModel.to_dict(setting) for setting in settings ] api_response = GetListResponse(results=raw_settings, url=request.url, model=UserSettingModel.MODEL, body=request.method == 'HEAD') except ManagerGetError as err: return abort(404, err.message) return api_response.make_response()
def update_setting(user_id: int, resource: str, data: dict): """ HTTP `PUT`/`PATCH` route for update a single user setting resource. Args: user_id (int): Public ID of the user. resource (str): Identifier/Name of the user setting. data (UserModel.SCHEMA): New setting data to update. Raises: ManagerGetError: When the setting with the `identifier` was not found. ManagerUpdateError: When something went wrong during the update. Returns: UpdateSingleResponse: With update result of the new updated user setting. """ settings_manager: UserSettingsManager = UserSettingsManager( database_manager=current_app.database_manager) try: setting = UserSettingModel.from_data(data=data) settings_manager.update(user_id=user_id, resource=resource, setting=setting) api_response = UpdateSingleResponse(result=data, url=request.url, model=UserSettingModel.MODEL) except ManagerGetError as err: return abort(404, err.message) except ManagerUpdateError as err: return abort(400, err.message) return api_response.make_response()