Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 50 additions & 9 deletions schemas/artisan.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from models import Reviews
from models.user_models import (
Artisan,
Kyc
)
from core import ma
from core import ma, db
from add_extensions import redis_
from models.bookings import BookingCategory
from .base import (
Expand All @@ -18,6 +19,7 @@
post_dump,
INCLUDE
)
from sqlalchemy import func


class ArtisanSchema(BaseSQLAlchemyAutoSchema):
Expand All @@ -34,9 +36,9 @@ class Meta:
)

exclude = (
'booking', 'ratings_weighted_sum',
'booking', 'ratings_weighted_sum','kyc_attempts','wallet',
)

# sign_up_date = ma.String()
# additional fields
created_at = ma.String(dump_only=True, data_key="became_artisan_on")
user_profile = fields.Nested("UserSchema", only=(
Expand Down Expand Up @@ -71,13 +73,52 @@ def get_artisan_rating(self, obj):
if c:
return obj.get_star_rating(c=c)
return obj.get_star_rating()

def get_metrics(self, obj):
return {
'rating': self.get_artisan_rating(obj),
'activity': obj.activity,
'earnings': obj.total_earnings
}
with db.session() as sess:

rating_counts = sess.query(
Reviews.weight,
func.count(Reviews.id)
).filter(
Reviews.artisan_id == obj.artisan_id,
Reviews.weight.between(1, 5)
).group_by(
Reviews.weight
).all()

# Default 1-5 to 0
review_grouped = {
'r1': 0,
'r2': 0,
'r3': 0,
'r4': 0,
'r5': 0
}

# Put actual review counts into r1-r5
for rating, rating_count in rating_counts:
review_grouped[f'r{rating}'] = rating_count

# Total number of reviews
count = sum(review_grouped.values())

# Convert counts to percentages
if count > 0:
review_grouped = {
rating: round((rating_count / count) * 100)
for rating, rating_count in review_grouped.items()
}

return {
'rating': self.get_artisan_rating(obj),
'activity': obj.activity,
'earnings': obj.total_earnings,
'review_matrics': {
'count': count,
'review_grouped': review_grouped
}
}


class AddArtisanSchema(BaseSchema):
Expand Down
Loading