import { SessionStore } from '@backend/auth'
import { SoftDeleteEntity } from '@backend/domain'
import { FindOptionsWhere, Repository, UpdateResult } from 'typeorm'
import { UserModifiableEntityRepository } from './user-modifiable-entity.repository'

export abstract class SoftDeleteEntityRepository<
	T extends SoftDeleteEntity<T>,
> extends UserModifiableEntityRepository<T> {
	constructor(override readonly _repository: Repository<T>) {
		super(_repository)
	}

	override async softDelete(criteria: FindOptionsWhere<T>): Promise<UpdateResult> {
		const userId = SessionStore.userId
		if (userId) {
			await super.update(criteria, { deletedBy: userId } as never)
		}
		return super.softDelete(criteria)
	}
}
