"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