Programming Challenge

This project consists in three parts. Each item is important and relevant to the upcoming steps.

Step 1

The first step consists in analyzing the data in the files:

  • title.basics.tsv.gz
  • title.ratings.tsv.gz
  • name.basics.tsv.gz

The data in title.basics.tsv.gz contains the following information for titles:

  • tconst (string) -- alphanumeric unique identifier of the title;
  • titleType (string) -- the type/format of the title (e.g. movie, short, tvseries, tvepisode, video, etc);
  • primaryTitle (string) -- the more popular title / the title used by the filmmakers on promotional materials at the point of release;
  • originalTitle (string) -- original title, in the original language;
  • isAdult (boolean) -- 0: non-adult title; 1: adult title;
  • startYear (YYYY) -- represents the release year of a title. In the case of TV Series, it is the series start year;
  • endYear (YYYY) -- TV Series end year. '\N' for all other title types;
  • runtimeMinutes -- primary runtime of the title, in minutes;
  • genres (string array) -- includes up to three genres associated with the title.

The data in title.ratings.tsv.gz contains the following information for ratings:

  • tconst (string) -- alphanumeric unique identifier of the title;
  • averageRating -- weighted average of all the individual user ratings;
  • numVotes -- number of votes the title has received.

The data in name.basics.tsv.gz contains the following information for names:

  • nconst (string) - alphanumeric unique identifier of the name/person;
  • primaryName (string)– name by which the person is most often credited;
  • birthYear – in YYYY format;
  • deathYear – in YYYY format if applicable, else '\N';
  • primaryProfession (array of strings)– the top-3 professions of the person;
  • knownForTitles (array of tconsts) – titles the person is known for.

You need to generate a model that represents such data and create a database to be further used in your project.

Step 2

You have to implement a REST API to consume the generated database.

Moreover, you need to implement at least the following methods:

  • List movies (with their relevant data) filtered by category;
  • List the top 10 movies (in terms of rating) filtered by year. If no year is given as parameter, the API should list all movies with pagination;

In both cases, the API should remove both adult movies and/or with rating less than 6.

Step 3

You have to implement a client application to access such API. The client should be preferably an Android, WPF, or web application.

The client application must present the data from the API for the methods specified in Step 2.

Deliverables

You have to deliver:

  • A document with all relevant information and decisions that you made throughout the development. Feel free to write down your architectural decisions, the design patterns you used, the languages you chose, your testing scenarios, and so on;
  • All required details to install/run/test both your API and client applications;
  • Any other artifact you find relevant for your overall evaluation;

Tips

  • For Steps 1 and 2, we suggest you to use one of the following languages: C#, Java, or Python;
  • Testing is more than welcome;
  • Show us everything you know about best practices in Git;
  • Think carefully about your code quality, in terms of maintainability, readability, and simplicity. Also, do not overenginer your solution;
  • Keep in mind that we want to know how you create your solution from scratch.