Listory/src/users/users.service.ts

74 lines
2 KiB
TypeScript
Raw Normal View History

2023-09-17 00:31:39 +02:00
import { SelectQueryBuilder } from "typeorm";
import { JobService } from "@apricote/nest-pg-boss";
2020-02-01 16:11:48 +01:00
import { Injectable, NotFoundException } from "@nestjs/common";
import { IImportSpotifyJob, ImportSpotifyJob } from "../sources/jobs";
2020-09-05 21:07:05 +02:00
import { SpotifyConnection } from "../sources/spotify/spotify-connection.entity";
2020-02-01 16:11:48 +01:00
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,
@ImportSpotifyJob.Inject()
2023-09-16 13:02:19 +02:00
private readonly importSpotifyJobService: JobService<IImportSpotifyJob>,
) {}
2020-02-01 16:11:48 +01:00
async findById(id: string): Promise<User> {
2022-06-25 13:48:25 +00:00
const user = await this.userRepository.findOneBy({ id });
2020-02-01 16:11:48 +01:00
if (!user) {
throw new NotFoundException("UserNotFound");
}
return user;
}
2020-02-02 19:21:58 +01:00
async findAll(): Promise<User[]> {
return this.userRepository.find();
}
2020-02-01 16:11:48 +01:00
async createOrUpdate(data: CreateOrUpdateDto): Promise<User> {
2022-06-25 13:48:25 +00:00
let user = await this.userRepository.findOneBy({
spotify: { id: data.spotify.id },
2020-02-01 16:11:48 +01:00
});
const isNew = !user;
if (isNew) {
2020-02-01 16:11:48 +01:00
user = this.userRepository.create({
spotify: {
2020-05-02 17:17:20 +02:00
id: data.spotify.id,
},
2020-02-01 16:11:48 +01:00
});
}
user.spotify.accessToken = data.spotify.accessToken;
user.spotify.refreshToken = data.spotify.refreshToken;
user.displayName = data.displayName;
user.photo = data.photo;
await this.userRepository.save(user);
if (isNew) {
// Make sure that existing listens are crawled immediately
this.importSpotifyJobService.sendOnce({ userID: user.id }, {}, user.id);
}
2020-02-01 16:11:48 +01:00
return user;
}
2020-02-02 19:21:58 +01:00
async updateSpotifyConnection(
user: User,
2023-09-16 13:02:19 +02:00
spotify: SpotifyConnection,
2020-02-02 19:21:58 +01:00
): Promise<void> {
2021-05-25 18:12:42 +02:00
// eslint-disable-next-line no-param-reassign
2020-02-02 19:21:58 +01:00
user.spotify = spotify;
await this.userRepository.save(user);
}
2023-09-17 00:31:39 +02:00
getQueryBuilder(): SelectQueryBuilder<User> {
return this.userRepository.createQueryBuilder("user");
}
2020-02-01 16:11:48 +01:00
}