Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1from flask import current_app 

2from datetime import datetime 

3 

4from src import db, settings 

5from src.utils import pagination_resp, internal_err_resp, message, Paginator, err_resp 

6from src.model import MetaUserContentModel, ContentModel, UserModel 

7from src.schemas import MetaUserContentBase 

8 

9 

10class ContentService: 

11 @staticmethod 

12 def get_meta(user_uuid, content_id): 

13 """ Get specific 'meta_user_content' data """ 

14 if not (user := UserModel.query.filter_by(uuid=user_uuid).first()): 

15 return err_resp("User not found!", 404) 

16 

17 if not (ContentModel.query.filter_by(content_id=content_id).first()): 

18 return err_resp("Item not found!", 404) 

19 

20 try: 

21 if not (meta_user_content := MetaUserContentModel.query.filter_by(user_id=user.user_id, content_id=content_id).first()): 

22 meta_user_content = MetaUserContentModel( 

23 content_id=content_id, user_id=user.user_id, review_see_count=0) 

24 

25 # Increment meta see 

26 meta_user_content.review_see_count += 1 

27 meta_user_content.last_review_see_date = datetime.now() 

28 db.session.add(meta_user_content) 

29 db.session.commit() 

30 

31 meta_user_content_data = MetaUserContentBase.load( 

32 meta_user_content) 

33 

34 resp = message(True, "Meta successfully sent") 

35 resp["content"] = meta_user_content_data 

36 return resp, 200 

37 

38 except Exception as error: 

39 current_app.logger.error(error) 

40 return internal_err_resp() 

41 

42 @staticmethod 

43 def update_meta(user_uuid, content_id, data): 

44 """ Update 'additional_count' to 'count' or/and 'rating' """ 

45 if not (user := UserModel.query.filter_by(uuid=user_uuid).first()): 

46 return err_resp("User not found!", 404) 

47 

48 if not (content := ContentModel.query.filter_by(content_id=content_id).first()): 

49 return err_resp("Item not found!", 404) 

50 

51 try: 

52 if not (meta_user_content := MetaUserContentModel.query.filter_by(user_id=user.user_id, content_id=content_id).first()): 

53 meta_user_content = MetaUserContentModel( 

54 content_id=content_id, user_id=user.user_id, count=0) 

55 

56 if 'rating' in data: 

57 # Update average rating on object 

58 content.rating = content.rating or 0 

59 content.rating_count = content.rating_count or 0 

60 count = content.rating_count + \ 

61 (1 if meta_user_content.rating is None else 0) 

62 content.rating = (content.rating * content.rating_count - ( 

63 meta_user_content.rating if meta_user_content.rating is not None else 0) + data["rating"]) / count 

64 content.rating_count = count 

65 

66 meta_user_content.rating = data["rating"] 

67 meta_user_content.last_rating_date = datetime.now() 

68 if 'additional_count' in data: 

69 meta_user_content.count += data['additional_count'] 

70 meta_user_content.last_count_increment = datetime.now() 

71 

72 db.session.add(meta_user_content) 

73 db.session.commit() 

74 

75 resp = message(True, "Meta successfully updated") 

76 return resp, 201 

77 

78 except Exception as error: 

79 current_app.logger.error(error) 

80 return internal_err_resp()