async def update_discourse_data( id: str, action: Action, update_type: UpdateType, data: Union[UpdateDiscourseAddDiscourseItem, UpdateDiscourseAddDiscourseItemsLink, UpdateDiscourseDeleteDiscourseItemOrLink] = Body(...)): if action == 'add': if isinstance(data, UpdateDiscourseDeleteDiscourseItemOrLink): return ErrorResponseModel.return_response( 'An error occurred', status.HTTP_403_FORBIDDEN, 'Expected UpdateDiscourseAddDiscourseItem with action=add!') else: if isinstance(data, UpdateDiscourseAddDiscourseItem) or isinstance( data, UpdateDiscourseAddDiscourseItemsLink): return ErrorResponseModel.return_response( 'An error occurred', status.HTTP_403_FORBIDDEN, 'Expected UpdateDiscourseDeleteDiscourseItem with action=delete!' ) discourse_data = jsonable_encoder(data) updated_discourse = await update_discourse(id, action, update_type, discourse_data) if updated_discourse: if type(updated_discourse) != bool: return ResponseModel.return_response(updated_discourse) else: return ResponseModel.return_response( {'message': 'The whole discourse was deleted'}) return ErrorResponseModel.return_response( 'An error occurred', status.HTTP_404_NOT_FOUND, 'There was an error updating the discourse data')
async def get_discourse_items_link(id: str): discourse_items_link = await retrieve_discourse_items_link(id) if discourse_items_link: return ResponseModel.return_response(discourse_items_link) return ErrorResponseModel.return_response( 'An error occured', status.HTTP_404_NOT_FOUND, 'Discourse items link doesn\'t exist')
async def delete_discourse_data(id: str): deleted_discourse = await delete_discourse(id) if deleted_discourse: return ResponseModel.return_response( {'message': f'Discourse with id: {id} removed'}) return ErrorResponseModel.return_response('An error occurred', status.HTTP_404_NOT_FOUND, 'Discourse doesn\'t exist')
async def get_discourse(id: str): client = 'ai' discourse = await retrieve_discourse(id, client) if discourse: return ResponseModel.return_response(discourse) return ErrorResponseModel.return_response('An error occurred', status.HTTP_404_NOT_FOUND, 'Discourse doesn\'t exist')
async def add_discourse_data(discourseItem: Discourse = Body(...)): discourse_data = jsonable_encoder(discourseItem) new_discourse = await add_discourse(discourse_data) if new_discourse: return ResponseModel.return_response(new_discourse) return ErrorResponseModel.return_response( 'An error occurred', status.HTTP_403_FORBIDDEN, f'The discourse couldn\'t be added')
async def delete_user_data(username: str): deleted_user = await delete_user(username) if deleted_user: return ResponseModel.return_response( f'User with ID: {username} removed', 'User deleted successfully') return ErrorResponseModel.return_response( 'An error occurred', status.HTTP_404_NOT_FOUND, f'User with ID: {username} doesn\'t exist')
async def get_student_data(username: str): user = await retrieve_user(username) if user: return ResponseModel.return_response( user, 'User data retrieved successfully') return ErrorResponseModel.return_response('An error occurred', status.HTTP_404_NOT_FOUND, 'User doesn\'t exist')
async def add_discourse_items_link_data( discourse_items_link: DiscourseItemsLink = Body(...)): discourse_items_link_data = jsonable_encoder(discourse_items_link) new_discourse_items_link = await add_discourse_items_link( discourse_items_link_data) if new_discourse_items_link: return ResponseModel.return_response(new_discourse_items_link) return ErrorResponseModel.return_response( 'An error occurred', status.HTTP_403_FORBIDDEN, 'The discourse items link couldn\'t be added')
async def add_user_data(user: User = Body(...)): user = jsonable_encoder(user) password = user['password'] user.pop('password') user['hashed_password'] = pwd_context.hash(password) new_user = await add_user(user) if new_user: return ResponseModel.return_response(new_user, 'User added successfully') return ErrorResponseModel.return_response( 'An error occurred', status.HTTP_403_FORBIDDEN, f'The username {user["username"]} is not available!')
async def update_discourse_items_link_data( id: str, data: UpdateDiscourseItemsLink = Body(...)): data = { key: value for key, value in data.dict().items() if value is not None } updated_discourse_items_link = await update_discourse_items_link(id, data) if updated_discourse_items_link: return ResponseModel.return_response(updated_discourse_items_link) return ErrorResponseModel.return_response( 'An error occurred', status.HTTP_404_NOT_FOUND, 'There was an error updating the discourse items link data')
async def change_user_password(username: str, password: ChangePasswordModel = Body(...)): password = jsonable_encoder(password) password = password['password'] hashed_password = pwd_context.hash(password) updated_user = await change_password(username, hashed_password) if updated_user: return ResponseModel.return_response( f'Password changed for user with username {username}', 'Password changed successfully') return ErrorResponseModel.return_response('An error occurred', status.HTTP_404_NOT_FOUND, 'User doesn\'t exist')
async def update_user_data(username: str, req: UpdateUserModel = Body(...)): req = {k: v for k, v in req.dict().items() if v is not None} updated_user = await update_user(username, req) if updated_user: return ResponseModel.return_response( { 'updated user': updated_user, 'message': f'User with past username: {username} update is successful' }, 'User data updated successfully') return ErrorResponseModel.return_response( 'An error occurred', status.HTTP_404_NOT_FOUND, 'There was an error updating the user data')
async def get_discourse_ids(): discourses = await retrieve_discourse_ids() if discourses: return ResponseModel.return_response(discourses) return ResponseModel.return_response({'message': 'Empty List'})
async def get_discourses_frontend(): client = 'ai' discourses = await retrieve_discourses(client) if discourses: return ResponseModel.return_response(discourses) return ResponseModel.return_response({'message': 'Empty List'})
async def get_users(): users = await retrieve_users() if users: return ResponseModel.return_response( users, 'Users data retrieved successfully') return ResponseModel.return_response(users, 'Emplty list returned')
async def get_discourse_items_links(): discourse_items_links = await retrieve_discourse_items_links() if discourse_items_links: return ResponseModel.return_response(discourse_items_links) return ResponseModel.return_response({'message': 'Empty list'})