From a0e1662e1de0229b6b2359dd800945d3edfe026b Mon Sep 17 00:00:00 2001 From: Simone Tesini Date: Fri, 1 Aug 2025 19:13:09 +0200 Subject: [PATCH] pull --- backend/src/app.py | 2 +- backend/src/room.py | 33 +++++++++++++++++++++++++++++++-- ruff.toml | 1 + 3 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 ruff.toml diff --git a/backend/src/app.py b/backend/src/app.py index 2484d2c..39ff440 100644 --- a/backend/src/app.py +++ b/backend/src/app.py @@ -1,6 +1,6 @@ from flask import Flask, Response, jsonify, request from flask_cors import CORS -from room import Room +from src.room import Room app = Flask(__name__) CORS(app) diff --git a/backend/src/room.py b/backend/src/room.py index bdf4026..a9ddd7c 100644 --- a/backend/src/room.py +++ b/backend/src/room.py @@ -2,7 +2,16 @@ from dataclasses import dataclass from song import Song -type UserScoredSong = tuple[Song, int] +USER_SCORE_WEIGHT = 0.7 +GENRE_WEIGHT = 0.1 +RANDOM_WEIGHT = 0.1 +RECENT_PENALTY = 0.5 +RECENT_COUNT = 10 + + +@dataclass +class UserScoredSong(Song): + user_score: int @dataclass @@ -14,5 +23,25 @@ class Room: tags: set[str] creative: bool - playlist: set[UserScoredSong] + songs: dict[str, UserScoredSong] history: list[Song] + + def rank_song( + self, + song: UserScoredSong, + ) -> float: + rank = 0.0 + song_items = self.songs.items() + + lowest_score = min(song_items, key=lambda item: item[1].user_score)[1].user_score + highest_score = min(song_items, key=lambda item: item[1].user_score)[1].user_score + + rank += translate(song.user_score, lowest_score, highest_score, 0.0, USER_SCORE_WEIGHT) + + last10items = self.history[-10:] + + return rank + + +def translate(value: float, in_min: float, in_max: float, out_min: float, out_max: float): + return (value - in_min) / (in_max - in_min) * (out_max - out_min) + out_min diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 0000000..d461c74 --- /dev/null +++ b/ruff.toml @@ -0,0 +1 @@ +line-length = 200