{"id":18064926,"url":"https://github.com/eoin-obrien/ul-timetable-api","last_synced_at":"2026-04-12T07:34:02.027Z","repository":{"id":40443873,"uuid":"100881438","full_name":"eoin-obrien/ul-timetable-api","owner":"eoin-obrien","description":"GraphQL API for the University of Limerick's timetable","archived":false,"fork":false,"pushed_at":"2023-12-15T20:09:39.000Z","size":1043,"stargazers_count":1,"open_issues_count":6,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-13T16:05:54.427Z","etag":null,"topics":["aws-lambda","graphql","nodejs","serverless","typescript","university-of-limerick"],"latest_commit_sha":null,"homepage":"https://api.timetable.videtur.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eoin-obrien.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-08-20T18:38:20.000Z","updated_at":"2019-03-07T00:49:37.000Z","dependencies_parsed_at":"2024-12-18T20:43:46.629Z","dependency_job_id":"fb19e272-5f48-4c1b-b5f0-63a7dc1021fd","html_url":"https://github.com/eoin-obrien/ul-timetable-api","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/eoin-obrien/ul-timetable-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoin-obrien%2Ful-timetable-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoin-obrien%2Ful-timetable-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoin-obrien%2Ful-timetable-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoin-obrien%2Ful-timetable-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eoin-obrien","download_url":"https://codeload.github.com/eoin-obrien/ul-timetable-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoin-obrien%2Ful-timetable-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279016062,"owners_count":26085798,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws-lambda","graphql","nodejs","serverless","typescript","university-of-limerick"],"created_at":"2024-10-31T06:08:31.197Z","updated_at":"2025-10-13T16:08:01.519Z","avatar_url":"https://github.com/eoin-obrien.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# UL Timetable API\n\n[GraphQL](http://graphql.org/learn/) API for the University of Limerick's [timetable](http://www.timetable.ul.ie).\n\n## Features\n- Written in TypeScript\n- Uses DataLoader for per-request caching\n- Caches scraped data in MongoDB\n- Graph*i*QL IDE for development and debugging\n\n## API endpoints\n- `/` - Graph*i*QL IDE\n- `/graphql` - GraphQL API endpoint\n\n## Pre-requisites\n- [Node.js](https://nodejs.org/en/)\n- [MongoDB](https://docs.mongodb.com/manual/installation/)\n\n## Getting started\n- Clone the repository\n```\n$ git clone https://github.com/videtur/ul-timetable-api.git\n```\n- Install dependencies\n```\n$ cd \u003cproject_name\u003e\n$ npm install\n```\n- Start your MongoDB server (you'll probably want another command prompt)\n```\n$ mongod\n```\n- Build and run the project\n```\nnpm start\n```\nNavigate to `http://localhost:3000`\n\n## Environment variables\n\nEnvironment variables can be set at system level, or can be configured using a dotenv (`.env`) environment variables file.\n\n| Npm Script | Description |\n| ------------------------- | ---------------------------------------------------------------------------------------- |\n| `NODE_ENV`                | Can be set to `development` or `production`                                              |\n| `PORT`                    | Defaults to `3000` in development and `8080` in production                               |\n| `MONGODB_URI`             | URI of the MongoDB database to use                                                       |\n\n## Scripts\n\n| Npm Script | Description |\n| ------------------------- | ---------------------------------------------------------------------------------------- |\n| `start`                   | Runs full build before starting all watch tasks. Can be invoked with `npm start`         |\n| `build`                   | Full build. Runs ALL build tasks (`build-ts`, `tslint`)                                  |\n| `serve`                   | Runs node on `dist/server.js` which is the apps entry point                              |\n| `watch`                   | Runs all watch tasks (TypeScript, Node). Use this if you're not touching static assets.  |\n| `build-ts`                | Compiles all source `.ts` files to `.js` files in the `dist` folder                      |\n| `watch-ts`                | Same as `build-ts` but continuously watches `.ts` files and re-compiles when needed      |\n| `tslint`                  | Runs TSLint on project files                                                             |\n\n## GraphQL schema\n\n```graphql schema\nschema {\n  query: RootQuery\n}\n\n# A type describing the root query.\ntype RootQuery {\n  # Request a student's timetable.\n  timetable(\n    # The student's ID number.\n    _id: ID!,\n    # Week numer as displayed on the timetable (optional).\n    week: String\n  ): Timetable\n  \n  # Request module details.\n  module(\n    # The module code.\n    _id: ID!\n  ): Module\n  \n  # Request room details.\n  room(\n    # The room number.\n    _id: ID!\n  ): Room\n  \n  # Request week details.\n  week(\n    # Week number as displayed on the timetable.\n    _id: ID!\n  ): Week\n  \n  # Request all weeks.\n  weeks: [Week!]!\n}\n\n# A type that describes a module.\ntype Module {\n  # The module's code.\n  _id: ID!\n  # The module's name.\n  name: String!\n}\n\n# A type that describes a room.\ntype Room {\n  # The room number.\n  _id: ID!\n  # The name of the building in which the room is located.\n  building: String!\n  # The code of the building in which the room is located.\n  buildingCode: String!\n  # The floor on which the room is located.\n  floor: String!\n  # The numeric part of the room number.\n  number: String!\n}\n\n# An enum describing a lesson's type.\nenum Type {\n  LEC # Lecture\n  TUT # Tutorial\n  LAB # Lab\n}\n  \n# A type describing a single lesson on a timetable.\ntype Lesson {\n  # The lesson's start time on the 24-hour clock.\n  startTime: String!\n  # The lesson's end time on the 24-hour clock.\n  endTime: String!\n  # The lesson's module.\n  module: Module!\n  # The lesson's group, if applicable.\n  group: String\n  # The lesson's type (lab, lecture or tutorial).\n  type: Type!\n  # The room(s) in which the lesson is held.\n  rooms: [Room!]!\n  # The week(s) in which the lesson is held.\n  weeks: [Week!]!\n}\n\n# A type describing a student's timetable.\ntype Timetable {\n  # The student's ID number.\n  _id: ID!\n  # The timetable's lessons held on a Monday.\n  monday: [Lesson!]!\n  # The timetable's lessons held on a Tuesday.\n  tuesday: [Lesson!]!\n  # The timetable's lessons held on a Wednesday.\n  wednesday: [Lesson!]!\n  # The timetable's lessons held on a Thursday.\n  thursday: [Lesson!]!\n  # The timetable's lessons held on a Friday.\n  friday: [Lesson!]!\n  # The timetable's lessons held on a Saturday.\n  saturday: [Lesson!]!\n}\n  \n# A type describing a week of the current semester.\ntype Week {\n  # The week number displayed on the timetable.\n  _id: ID!\n  # The teaching week name.\n  name: String!\n  # The ISO8601 datetime on which the week commences.\n  date: Date!\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feoin-obrien%2Ful-timetable-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feoin-obrien%2Ful-timetable-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feoin-obrien%2Ful-timetable-api/lists"}