Reputation: 29
I have this type of GraphQL schema
type FileInfo {
fileId: Int!
sources: [ProcessedFiles!]!
}
type ProcessedFiles {
filename: String!
url: String!
type: String!
quality: String!
}
type Episode{
id: Int!
position: Int!
seriesId: Int!
seriesName: String!
seasonId: Int!
seasonName: String!
name: String!
description: String!
duration: Int!
images: MovieImage!
episodeLanguages: [LanguageWithDescription!]!
languages: [Language!]!
warnings: [Warning!]!
status: Int!
mediaInfo: [MediaInfo!]!
note: String!
fileInfo: FileInfo!
transcodeStatus:[TranscodeStatus!]!
}
type Query{
getEpisodesOfSeason(seasonId: Int!): [Episode!]!
}
And here is my gqlgen.yml
models:
Episode:
fields:
episodeLanguages:
resolver: true
languages:
resolver: true
warnings:
resolver: true
mediaInfo:
resolver: true
fileInfo:
resolver: true
transcodeStatus:
resolver: true
It generates me additional resolvers for each of them. Like code below:
func (e episodeResolver) FileInfo(ctx context.Context, obj *models.Episode) (*models.FileInfo, error) {
fileInfo, err := e.Services.Movie.GetFileInfoByMovieId(obj.ID)
if err != nil {
return nil, err
}
return fileInfo, nil
}
e.Services.Movie.GetFileInfoByMovieId(obj.ID)
func (m *MovieService) GetFileInfoByMovieId(movieId int) (*models.FileInfo, error) {
fileInfo, err := m.repos.Movie.GetFileInfoByMovieId(movieId)
if err != nil {
return nil, err
}
return fileInfo, nil
}
m.repos.Movie.GetFileInfoByMovieId(movieId)
func (m *MoviePostgres) GetFileInfoByMovieId(movieId int) (*models.FileInfo, error) {
var fileId int
query := `select id from files where movie_id=$1`
err := m.db.QueryRow(query, movieId).Scan(&fileId)
if errors.Is(err, sql.ErrNoRows) {
return &models.FileInfo{
FileID: 0,
Sources: nil,
}, nil
}
if err != nil {
return nil, err
}
var processedFiles *models.MoviesSources
var processedFilesString string
query = `select tf.data from transcode_files as tf where movie_id=$1`
err = m.db.QueryRow(query, movieId).Scan(&processedFilesString)
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return nil, err
}
err = json.Unmarshal([]byte(processedFilesString), &processedFiles)
return &models.FileInfo{
FileID: fileId,
Sources: processedFiles.Sources,
}, nil
}
// this is structure of MoviesSources above
//type MoviesSources struct {
// Sources []*ProcessedFiles `json:"sources"`
//}
Gqlgen throws me Internal system error when code is returned from if statement below. But my code return no errors. I tried removing all ! from schema. But it also throws error on gqlgen. Gqlgen version v0.17.45
if errors.Is(err, sql.ErrNoRows) {
return &models.FileInfo{
FileID: 0,
Sources: nil,
}, nil
}
I want to get response like this:
"fileInfo": { "fileId": 12345, "sources": null } if there is no rows in database in fileInfo field.
Upvotes: 1
Views: 52