graphql-go / graphql

An implementation of GraphQL for Go / Golang
MIT License
9.82k stars 836 forks source link

MongoDB _id field #676

Open drksbr opened 11 months ago

drksbr commented 11 months ago

Hey guys.

It must be silly, but I'm not managing to evolve in this issue of ID fields.

Example:

# schema.graphql

type Mutation {
   createISP(isp: NewISP!): ISP!
}

type ISP {
   ID: ID!
   Name: String!
   Location: String!
   Devices: [Devices]
}

input NewISP {
   Name: String!
   Location: String!
}

// isp.resolver.go

type ISP struct {
IDField graphql.ID
NameField string
LocationField string
DevicesField *[]*Device
}

func (i *ISP) ID() graphql.ID {
    return i.IDField
}

func (i *ISP) Name() string {
    return i.NameField
}

func (i *ISP) Location() string {
    return i.LocationField
}

func (r *Resolver) GetISPs() []*ISP {

    var results []*ISP
    cursor, err := DB.Find(context.Background(), bson.M{})
    if err != nil {
        return nil
    }
    if err := cursor.All(context.Background(), &results); err != nil {
        return nil
    }
    return results
}

type NewISP struct {
    Name     string
    Location string
}

func (r *Resolver) CreateISP(args *struct{ Isp NewISP }) *ISP {

    // create new
    ispId := randomID() // Here I make a fake ID for testing because I couldn't use the id of the mongo object.

    isp := &ISP{
        IDField:       graphql.ID(ispId),
        NameField:     args.Isp.Name,
        LocationField: args.Isp.Location,
    }

    DB.InsertOne(ctx, isp)

    return isp
}

Can you help me with this issue?