Skip to content

Migrate filter and field args into a where #181

Closed
@Andy2003

Description

@Andy2003

Given Schema:

type Movie {
    id: ID
    actorCount: Int
    averageRating: Float
    isActive: Boolean
}

The new API would be like:

type Query {
  movies(where: MovieWhere, options: MovieOptions): [Movie]!
}

input MovieWhere {
  AND: [_MovieFilter!]
  NOT: [_MovieFilter!]
  OR: [_MovieFilter!]
  actorCount: Int
  actorCount_gt: Int
  actorCount_gte: Int
  actorCount_in: [Int]
  actorCount_lt: Int
  actorCount_lte: Int
  actorCount_not: Int
  actorCount_not_in: [Int]
  averageRating: Float
  averageRating_gt: Float
  averageRating_gte: Float
  averageRating_in: [Float]
  averageRating_lt: Float
  averageRating_lte: Float
  averageRating_not: Float
  averageRating_not_in: [Float]
  id: ID
  id_contains: ID
  id_ends_with: ID
  id_gt: ID
  id_gte: ID
  id_in: [ID]
  id_lt: ID
  id_lte: ID
  id_matches: ID
  id_not: ID
  id_not_contains: ID
  id_not_ends_with: ID
  id_not_in: [ID]
  id_not_starts_with: ID
  id_starts_with: ID
  isActive: Boolean
  isActive_not: Boolean
}

enum MovieSort {
  actorCount_asc
  actorCount_desc
  averageRating_asc
  averageRating_desc
  id_asc
  id_desc
  isActive_asc
  isActive_desc
}

input MovieOptions {
  sort: [MovieSort]
  limit: Int
  skip: Int
}

This means:

  1. remove filter args
  2. renaming *Filter to *Where
  3. move sorting and paging into *Options

Currently we generate:

type Query {
  movie(actorCount: Int, averageRating: Float, filter: _MovieFilter, first: Int, id: ID, isActive: Boolean, offset: Int, orderBy: [_MovieOrdering!]): [Movie!]!
}

input _MovieFilter {
  AND: [_MovieFilter!]
  NOT: [_MovieFilter!]
  OR: [_MovieFilter!]
  actorCount: Int
  actorCount_gt: Int
  actorCount_gte: Int
  actorCount_in: [Int]
  actorCount_lt: Int
  actorCount_lte: Int
  actorCount_not: Int
  actorCount_not_in: [Int]
  averageRating: Float
  averageRating_gt: Float
  averageRating_gte: Float
  averageRating_in: [Float]
  averageRating_lt: Float
  averageRating_lte: Float
  averageRating_not: Float
  averageRating_not_in: [Float]
  id: ID
  id_contains: ID
  id_ends_with: ID
  id_gt: ID
  id_gte: ID
  id_in: [ID]
  id_lt: ID
  id_lte: ID
  id_matches: ID
  id_not: ID
  id_not_contains: ID
  id_not_ends_with: ID
  id_not_in: [ID]
  id_not_starts_with: ID
  id_starts_with: ID
  isActive: Boolean
  isActive_not: Boolean
}

enum _MovieOrdering {
  actorCount_asc
  actorCount_desc
  averageRating_asc
  averageRating_desc
  id_asc
  id_desc
  isActive_asc
  isActive_desc
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    API-AlignmentAlign the API with the one defined by @neo4j/graphql

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions