mirror of
https://github.com/apricote/Listory.git
synced 2026-01-13 21:21:02 +00:00
feat(api): use nest-pg-boss for spotify interactions
This commit is contained in:
parent
cd672a408e
commit
b9f92bbdfa
9 changed files with 314 additions and 72 deletions
|
|
@ -1,13 +1,16 @@
|
|||
import { PGBossModule } from "@apricote/nest-pg-boss";
|
||||
import { Module } from "@nestjs/common";
|
||||
import { ListensModule } from "../../listens/listens.module";
|
||||
import { MusicLibraryModule } from "../../music-library/music-library.module";
|
||||
import { UsersModule } from "../../users/users.module";
|
||||
import { ImportSpotifyJob } from "../jobs";
|
||||
import { SpotifyApiModule } from "./spotify-api/spotify-api.module";
|
||||
import { SpotifyAuthModule } from "./spotify-auth/spotify-auth.module";
|
||||
import { SpotifyService } from "./spotify.service";
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
PGBossModule.forJobs([ImportSpotifyJob]),
|
||||
UsersModule,
|
||||
ListensModule,
|
||||
MusicLibraryModule,
|
||||
|
|
@ -17,4 +20,6 @@ import { SpotifyService } from "./spotify.service";
|
|||
providers: [SpotifyService],
|
||||
exports: [SpotifyService],
|
||||
})
|
||||
export class SpotifyModule {}
|
||||
export class SpotifyModule {
|
||||
constructor(private readonly spotifyService: SpotifyService) {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,11 @@ import { MusicLibraryService } from "../../music-library/music-library.service";
|
|||
import { Track } from "../../music-library/track.entity";
|
||||
import { User } from "../../users/user.entity";
|
||||
import { UsersService } from "../../users/users.service";
|
||||
import {
|
||||
IImportSpotifyJob,
|
||||
ImportSpotifyJob,
|
||||
UpdateSpotifyLibraryJob,
|
||||
} from "../jobs";
|
||||
import { AlbumObject } from "./spotify-api/entities/album-object";
|
||||
import { ArtistObject } from "./spotify-api/entities/artist-object";
|
||||
import { PlayHistoryObject } from "./spotify-api/entities/play-history-object";
|
||||
|
|
@ -31,15 +36,19 @@ export class SpotifyService {
|
|||
) {}
|
||||
|
||||
@Span()
|
||||
async runCrawlerForAllUsers(): Promise<void> {
|
||||
this.logger.debug("Starting Spotify crawler loop");
|
||||
const users = await this.usersService.findAll();
|
||||
async getCrawlableUserInfo(): Promise<User[]> {
|
||||
return this.usersService.findAll();
|
||||
}
|
||||
|
||||
for (const user of users) {
|
||||
// We want to run this sequentially to avoid rate limits
|
||||
// eslint-disable-next-line no-await-in-loop
|
||||
await this.crawlListensForUser(user);
|
||||
@ImportSpotifyJob.Handle()
|
||||
async importSpotifyJobHandler({ userID }: IImportSpotifyJob): Promise<void> {
|
||||
const user = await this.usersService.findById(userID);
|
||||
if (!user) {
|
||||
this.logger.warn("User for import job not found", { userID });
|
||||
return;
|
||||
}
|
||||
|
||||
await this.crawlListensForUser(user);
|
||||
}
|
||||
|
||||
@Span()
|
||||
|
|
@ -130,6 +139,7 @@ export class SpotifyService {
|
|||
}
|
||||
|
||||
@Span()
|
||||
@UpdateSpotifyLibraryJob.Handle()
|
||||
async runUpdaterForAllEntities(): Promise<void> {
|
||||
this.logger.debug("Starting Spotify updater loop");
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue