HEX
Server: nginx/1.24.0
System: Linux nowruzgan 6.8.0-57-generic #59-Ubuntu SMP PREEMPT_DYNAMIC Sat Mar 15 17:40:59 UTC 2025 x86_64
User: babak (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/dev/shahnamag/back-end/src/person/person.service.ts
import { Injectable } from '@nestjs/common';
import { CreatePersonDto } from './dto/create-person.dto';
import { UpdatePersonDto } from './dto/update-person.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { Person } from './entities/person.entity';
import { Repository } from 'typeorm';

@Injectable()
export class PersonService {
  constructor(@InjectRepository(Person) private personRepo: Repository<Person>) {}

  create(createPersonDto: CreatePersonDto) {
    return 'This action adds a new person';
  }

  findAll() {
    return this.personRepo.query(`
      SELECT p.*, COUNT(distinct pv.id) verseCount, GROUP_CONCAT(distinct pc.cat) cats
      FROM person p
      LEFT JOIN verse_person pv ON pv.person = p.id
      LEFT JOIN person_category pc ON pc.personId = p.id
      WHERE
        p.status = 1
      GROUP BY p.id
    `);
  }

  async findOne(id: number, loadVerses: boolean = false): Promise<Person | null> {
    let relations = loadVerses ? ['verses'] : undefined;
    return await this.personRepo.findOne({where: {id}, relations});
  }

  async update(id: number, updatePersonDto: UpdatePersonDto) {
    let cats = (updatePersonDto as any).cats;
    delete (updatePersonDto as any).cats;
    if(cats instanceof Array) {
      await this.personRepo.query(`delete from person_category where personId=${id};`)
      if(cats.length) {
        let values = cats.map(cat => `(${id}, ${+cat})`).join(',');
        await this.personRepo.query(`insert into person_category (personId, cat) values ${values};`)
      }
    }
    return this.personRepo.update({id}, updatePersonDto);
  }

  remove(id: number) {
    return `This action removes a #${id} person`;
  }
}