update: add new logic for push token
This commit is contained in:
@@ -15,6 +15,7 @@ import { UserSettingsService } from "../../settings/services/user-settings.servi
|
||||
import { Template } from "../../templates/entities/template.entity";
|
||||
import { PasswordService } from "../../utils/services/password.service";
|
||||
import { CreateEmailUserDto } from "../DTO/create-email-user.dto";
|
||||
import { AddPushTokenDto, RemovePushTokenDto } from "../DTO/manage-push-token.dto";
|
||||
import { UpdateEmailUserDto } from "../DTO/update-email-user.dto";
|
||||
import { UpdateUserProfileDto } from "../DTO/update-user-profile.dto";
|
||||
import { UserListQueryDto } from "../DTO/user-list-query.dto";
|
||||
@@ -92,6 +93,85 @@ export class UsersService {
|
||||
}
|
||||
/*******************************/
|
||||
|
||||
async addPushToken(userId: string, addPushTokenDto: AddPushTokenDto) {
|
||||
const user = await this.userRepository.findOne({ id: userId, deletedAt: null });
|
||||
if (!user) throw new BadRequestException(UserMessage.USER_NOT_FOUND);
|
||||
|
||||
if (!user.pushTokens) {
|
||||
user.pushTokens = [];
|
||||
}
|
||||
|
||||
if (!user.pushTokens.includes(addPushTokenDto.pushToken)) {
|
||||
user.pushTokens.push(addPushTokenDto.pushToken);
|
||||
await this.em.flush();
|
||||
|
||||
this.logger.log(`Push token added for user ${userId}. Total tokens: ${user.pushTokens.length}`);
|
||||
}
|
||||
|
||||
return {
|
||||
message: UserMessage.PUSH_TOKEN_ADDED_SUCCESSFULLY,
|
||||
totalTokens: user.pushTokens.length,
|
||||
};
|
||||
}
|
||||
|
||||
/*******************************/
|
||||
|
||||
async removePushToken(userId: string, removePushTokenDto: RemovePushTokenDto) {
|
||||
const user = await this.userRepository.findOne({ id: userId, deletedAt: null });
|
||||
if (!user) throw new BadRequestException(UserMessage.USER_NOT_FOUND);
|
||||
|
||||
if (!user.pushTokens || user.pushTokens.length === 0) {
|
||||
throw new BadRequestException(UserMessage.NO_PUSH_TOKENS_FOUND);
|
||||
}
|
||||
|
||||
const initialLength = user.pushTokens.length;
|
||||
user.pushTokens = user.pushTokens.filter((token) => token !== removePushTokenDto.pushToken);
|
||||
|
||||
if (user.pushTokens.length === initialLength) {
|
||||
throw new BadRequestException(UserMessage.PUSH_TOKEN_NOT_FOUND);
|
||||
}
|
||||
|
||||
await this.em.flush();
|
||||
|
||||
this.logger.log(`Push token removed for user ${userId}. Remaining tokens: ${user.pushTokens.length}`);
|
||||
|
||||
return {
|
||||
message: UserMessage.PUSH_TOKEN_REMOVED_SUCCESSFULLY,
|
||||
totalTokens: user.pushTokens.length,
|
||||
};
|
||||
}
|
||||
|
||||
/*******************************/
|
||||
|
||||
async getPushTokens(userId: string) {
|
||||
const user = await this.userRepository.findOne({ id: userId, deletedAt: null });
|
||||
if (!user) throw new BadRequestException(UserMessage.USER_NOT_FOUND);
|
||||
|
||||
return {
|
||||
pushTokens: user.pushTokens || [],
|
||||
totalTokens: user.pushTokens?.length || 0,
|
||||
};
|
||||
}
|
||||
|
||||
/*******************************/
|
||||
|
||||
async cleanupInvalidPushTokens(userId: string, invalidTokens: string[]) {
|
||||
if (!invalidTokens || invalidTokens.length === 0) return;
|
||||
|
||||
const user = await this.userRepository.findOne({ id: userId, deletedAt: null });
|
||||
if (!user || !user.pushTokens) return;
|
||||
|
||||
const initialLength = user.pushTokens.length;
|
||||
user.pushTokens = user.pushTokens.filter((token) => !invalidTokens.includes(token));
|
||||
|
||||
if (user.pushTokens.length !== initialLength) {
|
||||
await this.em.flush();
|
||||
this.logger.log(`Cleaned up ${initialLength - user.pushTokens.length} invalid push tokens for user ${userId}`);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************/
|
||||
|
||||
async findOneByIdWithEntityManager(id: string, em: EntityManager) {
|
||||
const user = await em.findOne(User, { id }, { populate: ["role"] });
|
||||
if (!user) throw new BadRequestException(UserMessage.USER_NOT_FOUND);
|
||||
|
||||
Reference in New Issue
Block a user