This commit is contained in:
2025-11-15 08:41:35 +03:30
parent 15c0c508b9
commit 0f1407c748
23 changed files with 714 additions and 177 deletions
+49 -6
View File
@@ -1,8 +1,8 @@
import { Injectable } from '@nestjs/common';
import { FilterQuery } from '@mikro-orm/core';
import { Injectable, NotFoundException } from '@nestjs/common';
import { FilterQuery, RequiredEntityData } from '@mikro-orm/core';
import { User } from './entities/user.entity';
import { EntityManager } from '@mikro-orm/postgresql';
// import { UpdateUserDto } from './dto/update-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { FindUsersDto } from './dto/find-user.dto';
import { PaginatedResult } from 'src/common/interfaces/pagination.interface';
import { UserRepository } from './repositories/user.repository';
@@ -18,9 +18,20 @@ export class UserService {
let user = await this.userRepository.findOne({ phone });
if (!user) {
user = this.userRepository.create({
// firstName is required on the entity; use phone as a sensible default
const _raw = {
phone,
});
firstName: phone,
// keep dates undefined (no value) — cast through unknown to satisfy TS typing
birthDate: undefined,
marriageDate: undefined,
wallet: 0,
points: 0,
};
const createData = _raw as unknown as RequiredEntityData<User>;
user = this.userRepository.create(createData);
await this.em.persistAndFlush(user);
}
@@ -48,11 +59,43 @@ export class UserService {
}
async create(phone: string): Promise<User> {
const user = this.userRepository.create({ phone });
const _raw = {
phone,
firstName: phone,
birthDate: undefined,
marriageDate: undefined,
wallet: 0,
points: 0,
};
const createData = _raw as unknown as RequiredEntityData<User>;
const user = this.userRepository.create(createData);
await this.em.persistAndFlush(user);
return user;
}
async updateUser(userId: string, dto: UpdateUserDto): Promise<User> {
const user = await this.userRepository.findOne({ id: userId });
if (!user) {
throw new NotFoundException(`User with ID ${userId} not found.`);
}
// Normalize date strings into Date objects if provided
const assignData: Partial<User> = { ...dto } as Partial<User>;
if (dto.birthDate) {
assignData.birthDate = new Date(dto.birthDate);
}
if (dto.marriageDate) {
assignData.marriageDate = new Date(dto.marriageDate);
}
this.em.assign(user, assignData);
await this.em.flush();
return user;
}
async findAll(dto: FindUsersDto): Promise<PaginatedResult<User>> {
const { page = 1, limit = 10, search, orderBy = 'createdAt', order = 'desc' } = dto;