Commit 97c94e49 authored by nanahira's avatar nanahira

fix

parent 52eb78dc
Pipeline #7153 passed with stages
in 1 minute and 11 seconds
import { ConsoleLogger } from '@nestjs/common'; import { ConsoleLogger } from '@nestjs/common';
import { ClassConstructor } from 'class-transformer'; import { ClassConstructor } from 'class-transformer';
import { import {
DeleteResult,
IsNull, IsNull,
Not, Not,
Repository, Repository,
...@@ -44,12 +45,12 @@ export class CrudBase< ...@@ -44,12 +45,12 @@ export class CrudBase<
const repo = mdb.getRepository(this.entityClass); const repo = mdb.getRepository(this.entityClass);
if (ent.id != null) { if (ent.id != null) {
const existingEnt = await repo.findOne({ const existingEnt = await repo.findOne({
where: { id: ent.id, deleteTime: Not(IsNull()) }, where: { id: ent.id },
select: ['id'], select: ['id', 'deleteTime'],
withDeleted: true, withDeleted: true,
}); });
if (existingEnt) { if (existingEnt) {
if (existingEnt) { if (existingEnt.deleteTime) {
await repo.delete(existingEnt.id); await repo.delete(existingEnt.id);
} else { } else {
throw new BlankReturnMessageDto( throw new BlankReturnMessageDto(
...@@ -95,12 +96,16 @@ export class CrudBase< ...@@ -95,12 +96,16 @@ export class CrudBase<
return this.repo.createQueryBuilder(this.entityAliasName); return this.repo.createQueryBuilder(this.entityAliasName);
} }
async findOne(id: EntityId<T>) { async findOne(
id: EntityId<T>,
extraQuery: (qb: SelectQueryBuilder<T>) => void = () => {},
) {
const query = this.queryBuilder() const query = this.queryBuilder()
.where(`${this.entityAliasName}.id = :id`, { id }) .where(`${this.entityAliasName}.id = :id`, { id })
.take(1); .take(1);
this.applyRelationsToQuery(query); this.applyRelationsToQuery(query);
this.extraGetQuery(query); this.extraGetQuery(query);
extraQuery(query);
let ent: T; let ent: T;
try { try {
ent = await query.getOne(); ent = await query.getOne();
...@@ -119,13 +124,17 @@ export class CrudBase< ...@@ -119,13 +124,17 @@ export class CrudBase<
return new ReturnMessageDto(200, 'success', ent); return new ReturnMessageDto(200, 'success', ent);
} }
async findAll(ent?: T) { async findAll(
ent?: T,
extraQuery: (qb: SelectQueryBuilder<T>) => void = () => {},
) {
const query = this.queryBuilder(); const query = this.queryBuilder();
if (ent) { if (ent) {
ent.applyQuery(query, this.entityAliasName); ent.applyQuery(query, this.entityAliasName);
} }
this.applyRelationsToQuery(query); this.applyRelationsToQuery(query);
this.extraGetQuery(query); this.extraGetQuery(query);
extraQuery(query);
try { try {
return new ReturnMessageDto(200, 'success', await query.getMany()); return new ReturnMessageDto(200, 'success', await query.getMany());
} catch (e) { } catch (e) {
...@@ -157,10 +166,12 @@ export class CrudBase< ...@@ -157,10 +166,12 @@ export class CrudBase<
return new BlankReturnMessageDto(200, 'success'); return new BlankReturnMessageDto(200, 'success');
} }
async remove(id: EntityId<T>) { async remove(id: EntityId<T>, hardDelete = false) {
let result: UpdateResult; let result: UpdateResult | DeleteResult;
try { try {
result = await this.repo.softDelete(id); result = await (hardDelete
? this.repo.delete(id)
: this.repo.softDelete(id));
} catch (e) { } catch (e) {
this.error(`Failed to delete entity ID ${id}: ${e.toString()}`); this.error(`Failed to delete entity ID ${id}: ${e.toString()}`);
throw new BlankReturnMessageDto(500, 'internal error').toException(); throw new BlankReturnMessageDto(500, 'internal error').toException();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment