diff --git a/backend/src/room.py b/backend/src/room.py index 996a5a1..92b0ee6 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