107 lines
4.6 KiB
JavaScript
107 lines
4.6 KiB
JavaScript
"use strict";
|
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
};
|
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
};
|
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.UsersService = void 0;
|
|
const common_1 = require("@nestjs/common");
|
|
const typeorm_1 = require("@nestjs/typeorm");
|
|
const typeorm_2 = require("typeorm");
|
|
const loyalty_profile_entity_1 = require("./entities/loyalty-profile.entity");
|
|
const user_entity_1 = require("./entities/user.entity");
|
|
const user_level_history_entity_1 = require("./entities/user-level-history.entity");
|
|
const wallet_entity_1 = require("./entities/wallet.entity");
|
|
const user_role_enum_1 = require("./enums/user-role.enum");
|
|
const user_level_enum_1 = require("./enums/user-level.enum");
|
|
let UsersService = class UsersService {
|
|
usersRepository;
|
|
walletsRepository;
|
|
loyaltyProfilesRepository;
|
|
userLevelHistoriesRepository;
|
|
constructor(usersRepository, walletsRepository, loyaltyProfilesRepository, userLevelHistoriesRepository) {
|
|
this.usersRepository = usersRepository;
|
|
this.walletsRepository = walletsRepository;
|
|
this.loyaltyProfilesRepository = loyaltyProfilesRepository;
|
|
this.userLevelHistoriesRepository = userLevelHistoriesRepository;
|
|
}
|
|
findByPhone(phone) {
|
|
return this.usersRepository.findOne({
|
|
where: { phone },
|
|
relations: { wallet: true, loyaltyProfile: true },
|
|
});
|
|
}
|
|
findByUsername(username) {
|
|
return this.usersRepository.findOne({
|
|
where: { username },
|
|
relations: { wallet: true, loyaltyProfile: true },
|
|
});
|
|
}
|
|
findById(id) {
|
|
return this.usersRepository.findOne({
|
|
where: { id },
|
|
relations: { wallet: true, loyaltyProfile: true },
|
|
});
|
|
}
|
|
async findOrCreateByPhone(phone, fullName) {
|
|
let user = await this.findByPhone(phone);
|
|
if (!user) {
|
|
user = await this.create({
|
|
phone,
|
|
fullName: fullName ?? phone,
|
|
role: user_role_enum_1.UserRole.USER,
|
|
});
|
|
}
|
|
return user;
|
|
}
|
|
async create(payload) {
|
|
const user = this.usersRepository.create(payload);
|
|
const savedUser = await this.usersRepository.save(user);
|
|
const wallet = this.walletsRepository.create({
|
|
user: savedUser,
|
|
balance: 0,
|
|
});
|
|
await this.walletsRepository.save(wallet);
|
|
const loyaltyProfile = this.loyaltyProfilesRepository.create({
|
|
user: savedUser,
|
|
currentLevel: user_level_enum_1.UserLevel.BRONZE,
|
|
totalSpent: 0,
|
|
});
|
|
await this.loyaltyProfilesRepository.save(loyaltyProfile);
|
|
const levelHistory = this.userLevelHistoriesRepository.create({
|
|
loyaltyProfile,
|
|
level: loyaltyProfile.currentLevel,
|
|
reason: 'Initial level assignment',
|
|
});
|
|
await this.userLevelHistoriesRepository.save(levelHistory);
|
|
const createdUser = await this.findById(savedUser.id);
|
|
if (!createdUser) {
|
|
throw new Error('User creation failed');
|
|
}
|
|
return createdUser;
|
|
}
|
|
async save(user) {
|
|
return this.usersRepository.save(user);
|
|
}
|
|
};
|
|
exports.UsersService = UsersService;
|
|
exports.UsersService = UsersService = __decorate([
|
|
(0, common_1.Injectable)(),
|
|
__param(0, (0, typeorm_1.InjectRepository)(user_entity_1.User)),
|
|
__param(1, (0, typeorm_1.InjectRepository)(wallet_entity_1.Wallet)),
|
|
__param(2, (0, typeorm_1.InjectRepository)(loyalty_profile_entity_1.LoyaltyProfile)),
|
|
__param(3, (0, typeorm_1.InjectRepository)(user_level_history_entity_1.UserLevelHistory)),
|
|
__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
typeorm_2.Repository,
|
|
typeorm_2.Repository,
|
|
typeorm_2.Repository])
|
|
], UsersService);
|
|
//# sourceMappingURL=users.service.js.map
|