Skip to content

michaeldfallen/THE_coding_test

 
 

Repository files navigation

Michael Allen - Times Higher Education take home test

A relatively simple GraphQL server to query the data from the json files.

Uses:

  • graphql-code-generator for strong typing
  • apollo-server as a graphql server
  • jest for testing

Lacks:

  • integration tests - testing resolvers well is important but hard.

    I have done it before well on other projects but that takes a few days to get properly set up from scratch with strong typing and good downstream dependency mocking so you can properly test edge cases.

  • complex query interface - filter / paging / limits etc all left out for this simple api

Usage

> npm install
> npm test
> npm start

Server will listen on http://localhost:4000. Navigate there and use the helpful apollo studio link to get an interactive console to play with the data.

Examples

  • List all institutions

    query AllInstitutions {
        institutions {
            name
        }
    }
    
  • List submissions for institutions

    query AllInstitutionsWithSubmissions {
        institutions {
            name
            submissions {
                year
            }
        }
    }
    
  • List all submissions

    query AllSubmissions {
        submissions {
            year
            institution {
                name
            }
        }
    }
    

Comments

The advice said "do one small, relatively simple thing". I figured, I spent all last year building GraphQL APIs so that'll be relatively simple thing to do. I forgot just how much is involved in the initial setup of a GraphQL API.

As a result the actual API interface is significantly smaller and simpler than I expected I could get done in the time.

Some queries I had thought would be interesting to write:

query {
    # Where could I learn Chemistry?
    institutionsBySubject(subject: 'Chemistry') { ... }

    # Which institutions are we still waiting for reply from?
    institutionsMissingSubmission(year: 2021) { ... }
}

These would be pretty easy to implement but you have to draw the line somewhere.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 100.0%