slinden
slinden

Reputation: 1025

How to create a GraphQL query in type-graphql with a custom return type

I am trying to create a graphql query that queries two database tables and returns a custom object. I am having hard time figuring out how to define this custom type.

I have created two entities in typeorm: Track and Vehicle:

import { Entity, PrimaryGeneratedColumn, Column, BaseEntity } from "typeorm";
import { ObjectType, Field, ID } from "type-graphql";

@ObjectType()
@Entity()
export class Track extends BaseEntity {
  @Field(() => ID)
  @PrimaryGeneratedColumn()
  id: number;

  @Field()
  @Column("text", { unique: true })
  trackId: string;

  @Field()
  @Column()
  origin: string;

  @Field()
  @Column("text", { unique: true })
  name: string;
}
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity } from "typeorm";
import { ObjectType, Field, ID } from "type-graphql";

@ObjectType()
@Entity()
export class Vehicle extends BaseEntity {
  @Field(() => ID)
  @PrimaryGeneratedColumn()
  id: number;

  @Field()
  @Column("text", { unique: true })
  vehicleId: string;

  @Field()
  @Column()
  vehicleFolder: string;

  @Field()
  @Column("text", { unique: true })
  name: string;
}

I want to make a query that returns an object like this:

interface TracksAndVehicles {
  tracks: Track[];
  vehicles: Vehicle[];

I can't figure out how to do this. This is my resolver:

import { Resolver, Query, Field, ObjectType } from "type-graphql";
import { Track } from "../../entity/Track";
import { Vehicle } from "../../entity/Vehicle";

@ObjectType()
class TracksAndVehicles {
  @Field()
  tracks: Track[];

  @Field()
  vehicles: Vehicle[];
}

@Resolver()
export class GetTracksAndVehiclesResolver {
  @Query(() => TracksAndVehicles)
  async getTracksAndVehicles(): Promise<TracksAndVehicles> {
    const tracks = await Track.find();
    const vehicles = await Vehicle.find();
    return { tracks, vehicles };
  }
}

I get this error: Error: You need to provide explicit type for TracksAndVehicles#tracks

Any ideas?

Upvotes: 1

Views: 1394

Answers (1)

Michał Lytek
Michał Lytek

Reputation: 12077

https://typegraphql.com/docs/types-and-fields.html

  @Field(type => [Track])
  tracks: Track[];

Upvotes: 4

Related Questions