| 1151 | |
| 1152 | #[tracing::instrument(level = "debug", skip(self))] |
| 1153 | pub fn increment_play_time(&self, id: String, duration: f64) -> Result<()> { |
| 1154 | trace!("Incrementing play time"); |
| 1155 | let mut conn = self.pool.get().unwrap(); |
| 1156 | let play_time = QueryDsl::select(analytics, schema::analytics::play_time) |
| 1157 | .filter(schema::analytics::song_id.eq(id.clone())) |
| 1158 | .first::<Option<f64>>(&mut conn); |
| 1159 | |
| 1160 | if play_time.is_err() { |
| 1161 | insert_into(analytics) |
| 1162 | .values(Analytics { |
| 1163 | id: Some(Uuid::new_v4().to_string()), |
| 1164 | song_id: Some(id), |
| 1165 | play_count: Some(0), |
| 1166 | play_time: Some(duration), |
| 1167 | }) |
| 1168 | .execute(&mut conn)?; |
| 1169 | info!("Added new play time"); |
| 1170 | return Ok(()); |
| 1171 | } |
| 1172 | |
| 1173 | update(analytics) |
| 1174 | .filter(schema::analytics::song_id.eq(id)) |
| 1175 | .set(schema::analytics::play_time.eq(schema::analytics::play_time + duration)) |
| 1176 | .execute(&mut conn)?; |
| 1177 | |
| 1178 | info!("Incremented playtime"); |
| 1179 | |
| 1180 | Ok(()) |
| 1181 | } |
| 1182 | |
| 1183 | pub fn get_top_listened_songs(&self) -> Result<AllAnalytics> { |
| 1184 | let songs = analytics |