Coverage for src/service/content_service.py : 87%
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
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
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)
17 if not (ContentModel.query.filter_by(content_id=content_id).first()):
18 return err_resp("Item not found!", 404)
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)
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()
31 meta_user_content_data = MetaUserContentBase.load(
32 meta_user_content)
34 resp = message(True, "Meta successfully sent")
35 resp["content"] = meta_user_content_data
36 return resp, 200
38 except Exception as error:
39 current_app.logger.error(error)
40 return internal_err_resp()
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)
48 if not (content := ContentModel.query.filter_by(content_id=content_id).first()):
49 return err_resp("Item not found!", 404)
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)
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
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()
72 db.session.add(meta_user_content)
73 db.session.commit()
75 resp = message(True, "Meta successfully updated")
76 return resp, 201
78 except Exception as error:
79 current_app.logger.error(error)
80 return internal_err_resp()