Learning Nest Js на самом деле и столкнулся с проблемой сохранения отношения типа OneToMany. Допустим, у меня есть два модуля ProjectsModule @ PlanModule
Существует связь OneToMany между сущностями Plan и Project
@Entity()
export class Project extends BaseEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
...
@OneToMany(type => Plan, plan => plan.project, { eager: true })
plans: Plan[];
}
@Entity()
export class Plan extends BaseEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
...
@ManyToOne(type => Project, project => project.plans, { eager: false } )
project: Project;
@Column()
projectId: string;
}
В ProjectsModule у меня есть ProjectsService с этим методом:
async getProjectById(
id: string,
user: User
): Promise<Project> {
const found = await this.projectRepository.findOne({ where: { id, ownerId: user.id } });
if(!found) {
throw new NotFoundException(`Project with ID "${id}" not found`)
}
return found;
}
Моя проблема - когда я пытаюсь сохранить новый План. My PlanService вызывает PlanRepository вот так
async createPlan(
createPlanDto: CreatePlanDto,
user: User
): Promise<Plan> {
return this.planRepository.createPlan(createPlanDto, user);
}
А в PlanRepository:
constructor(
@Inject(ProjectsService)
private projectsService: ProjectsService
) {
super();
}
async createPlan(
createPlanDto: CreatePlanDto,
user: User
): Promise<Plan> {
const { title, description, project } = createPlanDto;
const plan = new Plan();
const projectFound = await this.projectsService.getProjectById(project, user)
plan.title = title;
plan.description = description;
plan.status = PlanStatus.ENABLED;
plan.owner = user;
plan.project = project;
try {
await plan.save();
} catch (error) {
this.logger.error(`Failed to create a Plan for user "${user.email}". Data: ${JSON.stringify(createPlanDto)}`, error.stack);
throw new InternalServerErrorException();
}
delete plan.owner;
return plan;
}
Попытка этого выдает эту ошибку при отправке запроса POST контроллеру моего плана:
TypeError: this.projectsService.getProjectById is not a function
И попробовав
console.log('service', this.projectsService)
дайте мне
service EntityManager {
repositories: [],
plainObjectToEntityTransformer: PlainObjectToNewEntityTransformer {},
connection: Connection {
Думаю, я неправильно использую projectsService, но я не понимаю, где я мог бы сделать ошибка.
На стороне модуля я экспортирую ProjectsService в его модуле:
exports: [ProjectsService]
И импортирую полный модуль ProjectsModule в модуль планов:
imports: [
TypeOrmModule.forFeature([PlanRepository]),
AuthModule,
ProjectsModule
],
Извините для длинного поста, пытаюсь быть исчерпывающим.