Хороший пример ManyToMany и ленивых отношений. Этого будет достаточно, чтобы создать user-author-like.entity.ts и реализовать его там, где это необходимо.
Поскольку он использует обещание ленивых отношений, он не дает мне гибкой возможности использовать его, как я буду sh. Я создал такое решение в своем приложении. Я использую его во всех своих API GraphQL.
user.entity.ts
import { Entity,
PrimaryGeneratedColumn,
Column,
BaseEntity,
OneToMany,
CreateDateColumn,
UpdateDateColumn,
ManyToMany,
JoinTable,
OneToOne } from 'typeorm';
import { ObjectType,
ID,
Field,
InputType,
ArgsType,
Int } from 'type-graphql';
import { Post } from '../post/post.entity';
import { Author } from '../author/author.entity';
@Entity()
@ObjectType()
export class User extends BaseEntity {
@PrimaryGeneratedColumn('uuid')
@Field(() => ID)
id: string;
@Column({ name: 'userName', unique: true })
@Field()
userName: string;
@Column({ name: 'email', unique: true })
@Field()
email: string;
@Column()
password: string;
@CreateDateColumn({ type: 'timestamp' })
createdAt: Date;
@UpdateDateColumn({ type: 'timestamp' })
updatedAt: Date;
// user_author_like
@ManyToMany(() => Author, author => author.yazariBegenenler, { lazy: true })
@JoinTable({
name: 'user_author_like',
joinColumn: {
name: 'userId',
referencedColumnName: 'id'
},
inverseJoinColumn: {
name: 'authorId',
referencedColumnName: 'id'
}
})
@Field(() => [Author])
begenilenYazarlar: Promise<Author[]>;
}
author.entity.ts
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity, ManyToMany } from 'typeorm';
import { ObjectType, Field, ID } from 'type-graphql';
import { User } from '../user/user.entity';
@Entity()
@ObjectType()
export class Author extends BaseEntity {
@PrimaryGeneratedColumn('uuid')
@Field(() => ID)
id: string;
@Column()
@Field()
title: string
// yazari begenenler
@ManyToMany(() => User, user => user.begenilenYazarlar, { lazy: true })
@Field(() => [User])
yazariBegenenler: Promise<User[]>
}
user-author-like.entity.ts
import { BaseEntity, PrimaryColumn, Entity, CreateDateColumn } from 'typeorm';
@Entity()
export class UserAuthorLike extends BaseEntity {
@PrimaryColumn('uuid')
userId: string;
@PrimaryColumn('uuid')
authorId: string;
@CreateDateColumn({ type: 'timestamp' })
likedAt: Date;
}
user-author-like.resolver.ts
import { Resolver, Authorized, Mutation, Arg } from 'type-graphql';
import { UserAuthorLike } from './user-author-like.entity';
@Resolver()
export class UserAuthorLikeResolver {
@Authorized('ADMIN', 'MODERATOR', 'MEMBER')
@Mutation(() => Boolean)
async yazarBegen(
@Arg('userId') userId: string,
@Arg('authorId') authorId: string
): Promise<Boolean> {
await UserAuthorLike.create({ userId, authorId }).save();
return true;
};
@Authorized('ADMIN', 'MODERATOR', 'MEMBER')
@Mutation(() => Boolean)
async yazarBegenme(
@Arg('userId') userId: string,
@Arg('authorId') authorId: string
): Promise<Boolean> {
await UserAuthorLike.delete({ userId, authorId });
return true;
};
}