def post(self): try: self.parser.add_argument('request_id', required=True, help="Field request_id is mandatory") args = self.parser.parse_args() request_id = self._get_request_id(request) self._validate_request_id(request_id) self._validate_receiver(request_id) friend = self._accept_friend_request(request_id) print(friend) UserActivityModel.log_friend_activity(friend["user_id_rcv"], friend["user_id_sender"], "ADD") UserActivityModel.log_friend_activity(friend["user_id_sender"], friend["user_id_rcv"], "ADD") return self._get_friends_requests_response(friend) except BadRequest as ex: return ErrorHandler.create_error_response( "Fields request_id are mandatory", 400) except NoFriendRequestFoundException as e: return ErrorHandler.create_error_response(str(e), 400) except FriendshipAlreadyExistsException as e: return ErrorHandler.create_error_response(str(e), 400) except UserMismatchException as e: return ErrorHandler.create_error_response(str(e), 409) except DBConnectionError as e: return ErrorHandler.create_error_response(str(e), 500)
def put(self, id): try: self.parser.add_argument('_id', required=True, help="Field id is mandatory") self.parser.add_argument('_rev', required=True, help="Field rev is mandatory") self.parser.add_argument('title', required=True, help="Field title is mandatory") self.parser.add_argument('location', required=True, help="Field location is mandatory") self.parser.add_argument('visibility', required=True, help="Field visibility is mandatory") self.parser.add_argument('multimedia', required=True, help="Field multimedia is mandatory") self.parser.add_argument('story_type', required=True, help="Field story_type is mandatory") self.parser.add_argument('user_id', required=True, help="Field user_id is mandatory") self._validate_author(id) args = self.parser.parse_args() body = json.loads(request.data.decode('utf-8')) storie = StorieModel.update_storie(id, body) UserActivityModel.log_storie_activity(storie["user_id"], storie["_id"], "EDIT") return ResponseBuilder.build_response(storie, 200) except BadRequest as ex: return ErrorHandler.create_error_response("Fields id, rev, title, location, user_id, visibility, multimedia and story_type are mandatory", 400) except NoStorieFoundException as e: return ErrorHandler.create_error_response(str(e), 404) except DataVersionException as e: return ErrorHandler.create_error_response(str(e), 409) except UserMismatchException as e: return ErrorHandler.create_error_response(str(e), 409) except DBConnectionError as e: return ErrorHandler.create_error_response(str(e), 500)
def post(self): try: self.parser.add_argument('message', required=True, help="Field message is mandatory") self.parser.add_argument('user_id', required=True, help="Field user_id is mandatory") self.parser.add_argument('storie_id', required=True, help="Field storie_id is mandatory") args = self.parser.parse_args() validate_sender(args.get('user_id')) comment = CommentModel.create_comment(args) UserActivityModel.log_comment_activity(comment["user_id"], comment["storie_id"], "ADD") return comment except BadRequest as ex: return ErrorHandler.create_error_response( "Fields message, user_id and storie_id are mandatory", 400) except NoUserDataFoundException as e: return ErrorHandler.create_error_response(str(e), 400) except NoStorieFoundException as e: return ErrorHandler.create_error_response(str(e), 400) except UserMismatchException as e: return ErrorHandler.create_error_response(str(e), 409) except DBConnectionError as e: return ErrorHandler.create_error_response(str(e), 500)
def post(self): try: self.parser.add_argument('reaction', required=True, help="Field reaction is mandatory") self.parser.add_argument('user_id', required=True, help="Field user_id is mandatory") self.parser.add_argument('storie_id', required=True, help="Field storie_id is mandatory") args = self.parser.parse_args() validate_sender(args.get('user_id')) reaction = ReactionModel.create_reaction(args) UserActivityModel.log_reaction_activity(reaction["user_id"], reaction["storie_id"], reaction["reaction"], "ADD") return reaction except BadRequest as ex: return ErrorHandler.create_error_response( "Fields reaction, user_id and storie_id are mandatory", 400) except NoStorieFoundException as e: return ErrorHandler.create_error_response(str(e), 400) except UserMismatchException as e: return ErrorHandler.create_error_response(str(e), 409) except StorieReactionAlreadyFoundException as e: return ErrorHandler.create_error_response(str(e), 400) except DBConnectionError as e: return ErrorHandler.create_error_response(str(e), 500)
def delete(self, reaction_id): try: self._validate_author(reaction_id) reaction = ReactionModel.remove_reaction(reaction_id) UserActivityModel.log_reaction_activity(reaction["user_id"], reaction["storie_id"], reaction["reaction"], "DELETE") return self._get_reactions_response(reaction) except NoReactionFoundException as e: return ErrorHandler.create_error_response(str(e), 404) except UserMismatchException as e: return ErrorHandler.create_error_response(str(e), 409) except DBConnectionError as e: return ErrorHandler.create_error_response(str(e), 500)
def delete(self, id): try: self._validate_author(id) body = json.loads(request.data.decode('utf-8')) storie_user_id = body['user_id'] storie = StorieModel.delete_storie(id, storie_user_id) UserActivityModel.log_storie_activity(storie["user_id"], storie["_id"], "DELETE") return ResponseBuilder.build_response(storie, 204) except NoStorieFoundException as e: return ErrorHandler.create_error_response(str(e), 404) except UserMismatchException as e: return ErrorHandler.create_error_response(str(e), 409) except DBConnectionError as e: return ErrorHandler.create_error_response(str(e), 500)
def delete(self, comment_id): try: self._validate_author(comment_id) comment = CommentModel.remove_comment(comment_id) UserActivityModel.log_comment_activity(comment["user_id"], comment["storie_id"], "DELETE") return self._get_comments_response(comment) except NoCommentFoundException as e: return ErrorHandler.create_error_response(str(e), 404) except UserMismatchException as e: return ErrorHandler.create_error_response(str(e), 409) except DBConnectionError as e: return ErrorHandler.create_error_response(str(e), 500)
def delete(self, id): try: self._validate_friendship(id) friend = FriendModel.delete_friend(id) UserActivityModel.log_friend_activity(friend["user_id_rcv"], friend["user_id_sender"], "DELETE") UserActivityModel.log_friend_activity(friend["user_id_sender"], friend["user_id_rcv"], "DELETE") return ResponseBuilder.build_response(friend, 204) except NoFriendFoundException as e: return ErrorHandler.create_error_response(str(e), 404) except UserMismatchException as e: return ErrorHandler.create_error_response(str(e), 409) except DBConnectionError as e: return ErrorHandler.create_error_response(str(e), 500)
def put(self, comment_id): try: self.parser.add_argument('_id', required=True, help="Field id is mandatory") self.parser.add_argument('_rev', required=True, help="Field rev is mandatory") self.parser.add_argument('storie_id', required=True, help="Field storie_id is mandatory") self.parser.add_argument('user_id', required=True, help="Field user_id is mandatory") self.parser.add_argument('message', required=True, help="Field message is mandatory") self._validate_author(comment_id) args = self.parser.parse_args() body = json.loads(request.data.decode('utf-8')) comment = CommentModel.update_comment(comment_id, body) UserActivityModel.log_comment_activity(comment["user_id"], comment["storie_id"], "EDIT") return ResponseBuilder.build_response(comment, 200) except BadRequest as ex: return ErrorHandler.create_error_response( "Fields id, rev, storie_id, user_id and message are mandatory", 400) except NoUserDataFoundException as e: return ErrorHandler.create_error_response(str(e), 400) except NoCommentFoundException as e: return ErrorHandler.create_error_response(str(e), 404) except DataVersionException as e: return ErrorHandler.create_error_response(str(e), 409) except UserMismatchException as e: return ErrorHandler.create_error_response(str(e), 409) except DBConnectionError as e: return ErrorHandler.create_error_response(str(e), 500)
def post(self): try: self.parser.add_argument('title', required=True, help="Field title is mandatory") self.parser.add_argument('location', required=True, help="Field location is mandatory") self.parser.add_argument('visibility', required=True, help="Field visibility is mandatory") self.parser.add_argument('multimedia', required=True, help="Field multimedia is mandatory") self.parser.add_argument('story_type', required=True, help="Field story_type is mandatory") self.parser.add_argument('user_id', required=True, help="Field user_id is mandatory") args = self.parser.parse_args() validate_sender(args.get("user_id")) storie = self._create_user_storie_request(request) UserActivityModel.log_storie_activity(storie["user_id"], storie["_id"], "ADD") self._create_multimedia_file(args.get('title'), args.get('multimedia')) return storie except BadRequest as ex: return ErrorHandler.create_error_response( "Fields title, location, visibility, multimedia, user_id and story_type are mandatory", 400) except UserMismatchException as e: return ErrorHandler.create_error_response(str(e), 409) except DBConnectionError as e: return ErrorHandler.create_error_response(str(e), 500)
def _get_num_users_today(self): return UserActivityModel.count_today_activities()
def _save_user_activity(): user_id = get_user_id() #UserActivityModel.update_user_activiy(user_id) UserActivityModel.log_user_login_activity(user_id)
def get_stories(user_id, story_type='normal'): data = [] sp_list = [] stories_list = {} users_activity = {} db = MongoController.get_mongodb_instance(MONGODB_USER, MONGODB_PASSWD) UserDataModel.exist_user(user_id) friends_id = FriendModel.get_friends_array_by_user_id(user_id) friends_id.append(user_id) opt1 = {"expired_time": ""} opt2 = {"expired_time": {"$gte": DateController.get_date_time()}} stories = db.stories.find({ "$or": [{ "$and": [{ "story_type": story_type }, { "$or": [opt1, opt2] }, { "user_id": { "$in": friends_id } }] }, { "$and": [{ "story_type": story_type }, { "$or": [opt1, opt2] }, { "user_id": { "$nin": friends_id } }, { "visibility": "public" }] }] }).sort("created_time", pymongo.DESCENDING) for storie in stories: storie_user_id = storie["user_id"] storie_id = storie["_id"] storie = StorieModel.format_storie_dates(storie) storie = StorieModel.get_storie_with_user_data(storie) storie["comments"] = CommentModel.get_last_storie_comment( storie_id) storie["reactions"] = ReactionModel.get_storie_reactions( storie_id, user_id) storie_data = StorieModel.get_storie_resume(storie) USER_ACT_PAST_DAYS = 10 if (storie_user_id not in users_activity): users_activity[ storie_user_id] = UserActivityModel.log_user_activity_resume( storie_user_id, USER_ACT_PAST_DAYS) storie_priority_data = StoriePriorityData( storie_id, storie_data["past"], storie_data["num_comments"], storie_data["num_reactions"], users_activity[storie_user_id]["num_friends"], users_activity[storie_user_id]["num_stories"]) sp_list.append(storie_priority_data) RulesMachine.process_data(storie_priority_data) stories_list[storie_id] = storie sp_list.sort(key=lambda x: x.get_priority(), reverse=True) for sp in sp_list: data.append(stories_list[sp.get_storie_id()]) return data