
/* <%- lintDisableUnused %> */
// Define GraphQL resolvers for forming raw SQL statements. (Can be re-generated.)
<%- tplTsOnly([
  `import { App } from '../../app.interface'${sc}`,
  `import { FGraphQLResolverMap } from 'feathers-hooks-common'${sc}`,
  ``,
  `export interface SqlResolverFactoryOptions {`,
  `  dialect: string${sc}`,
  `  executeSql: any${sc}`,
  `  genAndRunSql: any${sc}`,
  `}`,
  '',
]) -%>
<%- insertFragment('imports') %>
<%- insertFragment('init') %>

let moduleExports = function sqlResolvers<%- tplJsOrTs('(app, options)', '(app: App, options: SqlResolverFactoryOptions)') %> {
  let { dialect, executeSql, genAndRunSql } = options<%- sc %>
  let genRunSql = genAndRunSql(executeSql, { dialect }, options)<%- sc %>

  const returns<%- tplTsOnly(': FGraphQLResolverMap') -%> = {
    <%- insertFragment('resolver_field_more') %>

    Query: {
<%# -%>
<%# --- forEach-1 starts below. Loop thru the schemas of GraphQL enabled services. -%>
<% Object.keys(mapping.graphqlSql).forEach(graphqlName => {
  __temp = [
    `      // get${graphqlName}(query: JSON, params: JSON, key: JSON): ${graphqlName}`,
    `      get${graphqlName}: (parent, args, content, ast) => genRunSql(content, ast),`,
    '',
    `      // find${graphqlName}(query: JSON, params: JSON, key: JSON): [${graphqlName}!]`,
    `      find${graphqlName}: (parent, args, content, ast) => genRunSql(content, ast),`,
  ];
-%>

      <%- insertFragment(`query-${graphqlName}`, __temp) %>
<% }); -%>
<%# --- forEach-1 ends above. -%>

      <%- insertFragment('resolver_query_more') %>
    },
  }<%- sc %>

  <%- insertFragment('func_return') %>
  return returns<%- sc %>
}<%- sc %>

<%- insertFragment('more') %>

<%- insertFragment('exports') %>
<%- `${tplExport('moduleExports')}${sc}` %>

<%- insertFragment('funcs') %>
<%- insertFragment('end') %>
