Skip to content

Commit

Permalink
feat(api): import listens after first sign in
Browse files Browse the repository at this point in the history
Previously it took a minute until the import was started within the normal
loop. This way, we create an import job right after the user logs
in for the first time.
  • Loading branch information
apricote committed Mar 12, 2023
1 parent 14478a5 commit 46b1650
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 5 deletions.
11 changes: 8 additions & 3 deletions src/users/users.module.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
import { PGBossModule } from "@apricote/nest-pg-boss";
import { Module } from "@nestjs/common";
import { TypeOrmRepositoryModule } from "../database/entity-repository/typeorm-repository.module";
import { ImportSpotifyJob } from "../sources/jobs";
import { UserRepository } from "./user.repository";
import { UsersService } from "./users.service";
import { UsersController } from "./users.controller";
import { TypeOrmRepositoryModule } from "../database/entity-repository/typeorm-repository.module";
import { UsersService } from "./users.service";

@Module({
imports: [TypeOrmRepositoryModule.for([UserRepository])],
imports: [
TypeOrmRepositoryModule.for([UserRepository]),
PGBossModule.forJobs([ImportSpotifyJob]),
],
providers: [UsersService],
exports: [UsersService],
controllers: [UsersController],
Expand Down
11 changes: 11 additions & 0 deletions src/users/users.service.spec.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,36 @@
import { JobService } from "@apricote/nest-pg-boss";
import { Test, TestingModule } from "@nestjs/testing";
import { IImportSpotifyJob, ImportSpotifyJob } from "../sources/jobs";
import { UserRepository } from "./user.repository";
import { UsersService } from "./users.service";

describe("UsersService", () => {
let service: UsersService;
let userRepository: UserRepository;
let importSpotifyJobService: JobService<IImportSpotifyJob>;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
UsersService,
{ provide: UserRepository, useFactory: () => ({}) },
{
provide: ImportSpotifyJob.ServiceProvider.provide,
useFactory: () => ({}),
},
],
}).compile();

service = module.get<UsersService>(UsersService);
userRepository = module.get<UserRepository>(UserRepository);
importSpotifyJobService = module.get<JobService<IImportSpotifyJob>>(
ImportSpotifyJob.ServiceProvider.provide
);
});

it("should be defined", () => {
expect(service).toBeDefined();
expect(userRepository).toBeDefined();
expect(importSpotifyJobService).toBeDefined();
});
});
16 changes: 14 additions & 2 deletions src/users/users.service.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
import { JobService } from "@apricote/nest-pg-boss";
import { Injectable, NotFoundException } from "@nestjs/common";
import { IImportSpotifyJob, ImportSpotifyJob } from "../sources/jobs";
import { SpotifyConnection } from "../sources/spotify/spotify-connection.entity";
import { CreateOrUpdateDto } from "./dto/create-or-update.dto";
import { User } from "./user.entity";
import { UserRepository } from "./user.repository";

@Injectable()
export class UsersService {
constructor(private readonly userRepository: UserRepository) {}
constructor(
private readonly userRepository: UserRepository,
@ImportSpotifyJob.Inject()
private readonly importSpotifyJobService: JobService<IImportSpotifyJob>
) {}

async findById(id: string): Promise<User> {
const user = await this.userRepository.findOneBy({ id });
Expand All @@ -27,7 +33,8 @@ export class UsersService {
spotify: { id: data.spotify.id },
});

if (!user) {
const isNew = !user;
if (isNew) {
user = this.userRepository.create({
spotify: {
id: data.spotify.id,
Expand All @@ -42,6 +49,11 @@ export class UsersService {

await this.userRepository.save(user);

if (isNew) {
// Make sure that existing listens are crawled immediately
this.importSpotifyJobService.sendOnce({ userID: user.id }, {}, user.id);
}

return user;
}

Expand Down

0 comments on commit 46b1650

Please sign in to comment.