{"id":26291403,"url":"https://github.com/edwinhern/nfl-game-dashboard","last_synced_at":"2026-04-28T19:36:10.686Z","repository":{"id":258006358,"uuid":"870916923","full_name":"edwinhern/nfl-game-dashboard","owner":"edwinhern","description":null,"archived":false,"fork":false,"pushed_at":"2025-02-25T07:46:10.000Z","size":186,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-25T08:23:01.524Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/edwinhern.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-10-10T22:53:43.000Z","updated_at":"2024-12-16T17:11:07.000Z","dependencies_parsed_at":"2025-02-25T08:32:03.580Z","dependency_job_id":null,"html_url":"https://github.com/edwinhern/nfl-game-dashboard","commit_stats":null,"previous_names":["edwinhern/nfl-game-dashboard"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edwinhern%2Fnfl-game-dashboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edwinhern%2Fnfl-game-dashboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edwinhern%2Fnfl-game-dashboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edwinhern%2Fnfl-game-dashboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/edwinhern","download_url":"https://codeload.github.com/edwinhern/nfl-game-dashboard/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243667992,"owners_count":20328036,"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","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":[],"created_at":"2025-03-15T00:38:14.117Z","updated_at":"2025-12-29T19:08:47.011Z","avatar_url":"https://github.com/edwinhern.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🏈 Parkhub NFL Game Dashboard - Coding Challenge\n\n[![Build CI](https://github.com/edwinhern/nfl-game-dashboard/actions/workflows/backend-ci.yml/badge.svg?branch=main)](https://github.com/edwinhern/nfl-game-dashboard/actions/workflows/backend-ci.yml)[![Backend Code Quality](https://github.com/edwinhern/nfl-game-dashboard/actions/workflows/backend-code-quality.yml/badge.svg?branch=main)](https://github.com/edwinhern/nfl-game-dashboard/actions/workflows/backend-code-quality.yml)\n\nA robust backend system providing NFL game information synchronized with Ticketmaster's Discovery API.\n\n## 📋 Overview\n\nThe NFL Game Dashboard is a robust backend system that provides comprehensive game information synchronized with Ticketmaster's Discovery API. It offers a RESTful API for querying NFL game data and manages automated synchronization with external ticketing services.\n\n## 🎥 Project Demo\n\nTo see an example of the project in action, you can view the demo video:\n[View Project Demo](https://photos.onedrive.com/share/814EB5940A8CC8AF!149046?cid=814EB5940A8CC8AF\u0026resId=814EB5940A8CC8AF!149046\u0026authkey=!AGSJl13Mt-p0s1Q\u0026ithint=video\u0026e=9kS8H1)\n\n## 🌟 Key Features\n\n- 🚀 RESTful API for efficient querying of NFL game data\n- 🔄 Automated synchronization with Ticketmaster API (every 12 hours)\n- 🔍 Flexible filtering options for game queries\n- 🐘 Scalable database architecture using PostgreSQL and Kysely ORM\n- ⏰ Scheduled tasks for data updates using node-cron\n- 🚦 Comprehensive error handling and logging\n- 🐳 Dockerized development environment for consistent setup and testing\n\n## 🛠️ Technology Stack\n\n- 🟢 **Node.js** (v22.9.0): JavaScript runtime\n- 🔷 **TypeScript**: Typed superset of JavaScript\n- 🚂 **Express**: Web application framework\n- 🐘 **PostgreSQL**: Relational database\n- 🔑 **Kysely**: Type-safe SQL query builder\n- 🦋 **Flyway**: Database migration tool\n- ⏲️ **node-cron**: Task scheduler for periodic data synchronization\n- 📝 **Winston**: Logging library\n- 🧪 **Vitest**: Testing framework\n- 🐳 **Docker**: Containerization for consistent environments\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- 🐳 Docker and Docker Compose\n\n## 🛠️ Setup Instructions\n\n1. 📥 Clone the repository:\n\n   ```\n   git clone https://github.com/edwinhern/nfl-game-dashboard.git\n   cd nfl-game-dashboard\n   ```\n\n2. 🔑 Set up environment variables:\n\n   - Copy `.env.template` to `.env`\n   - Update `.env` with necessary values, including your Ticketmaster API key\n\n3. 🚀 Start the application using Docker Compose:\n\n   - This command initializes the PostgreSQL database, executes Flyway migrations, and launches the backend server.\n\n   ```\n   docker-compose up --build\n   ```\n\n### 🖥️ Running Without Docker\n\nIf you prefer to run the project without Docker:\n\n1. 🐘 Ensure you have a PostgreSQL instance running and accessible\n2. 🔗 Update the `DATABASE_URL` in `.env` to point to your PostgreSQL instance\n3. 📂 Navigate to the backend directory: `cd backend`\n4. 📦 Install dependencies: `pnpm install`\n5. 🏃‍♂️ Run the development server: `pnpm run dev`\n\n## 🎮 API Usage\n\nThe system offers several endpoints for querying game data. Key examples include:\n\n- 🏉 `GET /api/games`: Retrieve a list of games with optional filters\n- 👥 `GET /api/games/teams`: Get all teams\n- 🏟️ `GET /api/games/stadiums`: Get all stadiums\n- 🔄 `GET /api/sync/testSync`: Manually trigger a sync with Ticketmaster API\n\nFor a comprehensive list of endpoints and their usage, please consult the [API documentation](docs/API.md).\n\n## 👩‍💻 Development\n\nFor more information on the backend development, see the [Backend documentation](docs/BACKEND.md).\n\nFor more information on api endpoint response format, see the [API documentation](docs/API.md).\n\n## 🗄️ Database\n\nThe project uses PostgreSQL with Flyway for database migrations. Key details:\n\n- 📊 Database name: `nfldb`\n- 👤 Default username: `postgres`\n- 🔑 Default password: `postgres`\n\nFor more information on the database schema and management, see the [Database documentation](docs/DATABASE.md).\n\n## 🔄 Data Synchronization\n\nThe system automatically synchronizes with Ticketmaster every 12 hours. This process ensures that:\n\n- 🆕 New games are added to the database\n- 🔄 Existing game information is updated\n- 🚦 Game statuses are kept current\n\nFor manual synchronization, use the `/api/sync/testSync` endpoint.\n\n## 🚀 Potential Improvements\n\n1. 🚀 Implement caching for frequently accessed data\n2. 🛑 Add rate limiting to protect the API\n3. 🧪 Expand test coverage for edge cases\n4. 🔐 Implement auth permissions system\n5. 🔍 Add parameter validation for `api/games/` requests\n6. 📄 Implement pagination for `api/games/` endpoint\n\n## 📚 Additional Documentation\n\nFor more detailed information about the system components, please refer to:\n\n- 📘 [API Documentation](docs/API.md)\n- 📘 [API Curls Documentation](docs/API_CURLS.md)\n- 🗄️ [Database Schema](docs/DATABASE.md)\n- 🏗️ [Backend Architecture](docs/BACKEND.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedwinhern%2Fnfl-game-dashboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fedwinhern%2Fnfl-game-dashboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedwinhern%2Fnfl-game-dashboard/lists"}