import { Resolver, Query, Mutation, Args, ResolveField, Root, } from '@nestjs/graphql'; import { ITagGroup } from '../interfaces/tagGroup.interface'; import { TagGroup } from './tagGroup.entity'; import { TagGroupService } from './tagGroup.service'; import { TagGroupInputType } from './tagGroup.input'; import { Tag } from '../tag/tag.entity'; import { TagService } from '../tag/tag.service'; import { ITag } from '../interfaces/tag.interface'; @Resolver(() => TagGroup) export class TagGroupResolver { constructor(private readonly tagGroupService: TagGroupService, private readonly tagService: TagService) {} /** * Queries */ @Query(() => [TagGroup], { nullable: true }) async tagGroups(@Args('tagGroup') tagGroupFilter: TagGroupInputType): Promise<ITagGroup[]> { return this.tagGroupService.findAll(tagGroupFilter); } @Query(() => TagGroup, { nullable: true }) async tagGroupById(@Args('id') id: string): Promise<ITagGroup> { return this.tagGroupService.findOne(id); } /** * Mutations */ @Mutation(() => TagGroup) async createTagGroup(@Args('tagGroup') tagGroup: TagGroupInputType): Promise<ITagGroup> { return this.tagGroupService.create(tagGroup); } @Mutation(() => TagGroup) async updateTagGroup(@Args('id') id: string, @Args('tagGroup') tagGroup: TagGroupInputType): Promise<ITagGroup> { return this.tagGroupService.update(id, tagGroup); } @Mutation(() => TagGroup) async replaceTagGroup(@Args('id') id: string, @Args('tagGroup') tagGroup: TagGroupInputType): Promise<ITagGroup> { return this.tagGroupService.replace(id, tagGroup); } @Mutation(() => Boolean) async deleteTagGroup(@Args('id') id: string): Promise<boolean> { return this.tagGroupService.delete(id); } /** * Field resolver */ @ResolveField(() => [Tag]) async tags(@Root() tagGroup: TagGroup): Promise<ITag[]> { // eslint-disable-next-line no-underscore-dangle return this.tagService.findAll({ tagGroup: { _id: tagGroup._id } }); } }