<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Opjain</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Opjain"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Opjain"/>
	<updated>2026-07-14T04:59:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=156881</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints-Design-Document</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=156881"/>
		<updated>2024-04-24T17:55:00Z</updated>

		<summary type="html">&lt;p&gt;Opjain: /* Pages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Live Demo &amp;amp; Source Code=&lt;br /&gt;
[http://152.7.176.174:5000/ Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.ncsu.edu/opjain/GH_Miner Source Code]&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. Phase 2 of this project involves creating a frontend for this application using ReactJS. More details regarding the probable design of the frontend of the project is provided in the Frontend section in this page&lt;br /&gt;
&lt;br /&gt;
=System Architecture=&lt;br /&gt;
&lt;br /&gt;
Below is the system architecture of our project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:System Architecture GH-2401.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Our system follows the Model-View-Controller architecture.&lt;br /&gt;
Frontend is the View with which user will interact.&lt;br /&gt;
Once user invokes an endpoint, we get to the github_routes file which acts as the controller of the system, which find the appropriate route for the method from the graphql_services which is the model of the system. Once the relevant method is called, model returns the API response to the controller and then this response is finally sent to the view which is our frontend.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
Below is our layout of our application, which is similar to the GitHub UI:&lt;br /&gt;
&lt;br /&gt;
This is the welcome page of our application. This has a login button.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Welcome_page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once you click on the login button, this page is displayed, where the application would ask for the required permissions&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Login github.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user clicks on login, below page is displayed where username and user's top repositories are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Landing page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user clicks on Repositories button on the nav bar, below page is displayed where all the user's repositories are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Repo page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user clicks on Time Range contributions button on the nav bar, below page is displayed where for a particular start and end time all the user's contributions are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Contribution page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user searches for someone else in the search box on the nav bar, below page is displayed where username and user's top repositories are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Search others profile.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
The user interface includes the following pages - &lt;br /&gt;
&lt;br /&gt;
* '''Login page''' - GitHub Oauth is used to authenticate users with GitHub. The user is asked to enter the GitHub username and will be redirected to GitHub for the required permissions to access the data. Once authenticated, the user will be redirected to the profile page.&lt;br /&gt;
&lt;br /&gt;
* '''Profile page''' - This page contains the user statistics - profile image, bio, number of followers, popular repositories, contribution data, etc. The user can view the statistics of each of the popular repos - number of forks, number of watchers, repository access status, etc. The contribution graph will give insights into the number of contributions on a particular day.&lt;br /&gt;
&lt;br /&gt;
* '''Repositories page''' - This page will list down all the repositories of an authenticated user.&lt;br /&gt;
&lt;br /&gt;
* '''Time-range contributions''' - This page will display the statistics of the required user within the desired period of time. The user has to provide the GitHub username, start date, and end date of the user.&lt;br /&gt;
&lt;br /&gt;
* '''Logout''' - This will log out the user from our application.&lt;br /&gt;
&lt;br /&gt;
= File Structure =&lt;br /&gt;
=== '''Components''' ===&lt;br /&gt;
&lt;br /&gt;
* '''RepositoryCard''': This adaptable element is crafted to showcase information in a rectangular box layout, catering to a range of functions like presenting statistics, repositories, and item lists across different sections of the application. Each card features a title, description, star and fork counts for the repository, as well as indicating its accessibility status (Private or Public).&lt;br /&gt;
&lt;br /&gt;
* '''SearchBox''': A Higher Order Component (HOC) tailored to accommodate relevant input fields and a submit button component. It facilitates search operations by allowing users to input parameters such as usernames, start dates, and end dates for filtering contributions data within a specified time range.&lt;br /&gt;
&lt;br /&gt;
* '''Navbar''': This versatile component acts as the application's navigation bar, providing convenient links to all sections/pages within the interface. It utilizes react-router for seamless state management, ensuring smooth transitions between different sections/pages of the app. Users can effortlessly navigate to the Profile page, Repository page, and Time-range contributions page. Moreover, it features a sign-out button for logging out from the application, along with a search box allowing users to search for other users' profiles using their GitHub usernames.&lt;br /&gt;
&lt;br /&gt;
=== '''Pages''' ===&lt;br /&gt;
&lt;br /&gt;
* '''LoginPage''': This page provides a summary of the user's profile statistics, displaying their GitHub username, follower count, following count, and six highlighted repositories.&lt;br /&gt;
&lt;br /&gt;
* '''ProfilePage''': This page presents an overview of the user's profile statistics, including their GitHub username, follower count, following count, and six highlighted repositories. &lt;br /&gt;
&lt;br /&gt;
* '''RepositoryPage''': This page will display a list of all repositories belonging to the user. The user will have the ability to view the repository's name, the number of stars it has received, the number of times it has been forked, and the date on which the repository was created.&lt;br /&gt;
&lt;br /&gt;
* '''UserContributionPage''': This page presents comprehensive metrics within the specified date and time parameters. It facilitates a comprehensive understanding of various aspects, including the cumulative number of commits, open issues, pull requests, and total pull request reviews, among others.&lt;br /&gt;
&lt;br /&gt;
=== '''Utils''' ===&lt;br /&gt;
&lt;br /&gt;
* '''AxiosInstance''': Utilizing the &amp;quot;axios&amp;quot; library, AxiosInstance is a dedicated file within the project aimed at creating and configuring an instance of axios for handling HTTP requests. This file establishes default headers, including authentication tokens and request types, along with a base URL. Adopting the singleton pattern, this single instance ensures consistency and efficiency throughout the project.&lt;br /&gt;
&lt;br /&gt;
* '''Constants''': To maintain consistency and minimize naming errors, the Constants file serves as a repository for frequently used terms within the project. By storing and exporting these terms, the code becomes standardized, promoting clarity and ease of maintenance.&lt;br /&gt;
&lt;br /&gt;
= Implementation Details and Use of LLM = &lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
Since there were two types of endpoints for each API, i.e. graphql and rest variant, we unified the endpoints to have the '''api_type''' as a dynamic parameter. Furthermore, we route the request to the respective service based on the api_type value we get from the URL. &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns used ===&lt;br /&gt;
# The REST API Client '''/backend/app/services/github_query/github_rest/client.py''' is a Singleton since we only needed a single instance of github object from the pyGithub library throughout the lifecycle of the application&lt;br /&gt;
&lt;br /&gt;
# The '''paginate_and_format_comments''' method declared in the '''github_rest_services.py''' is a very well thought and formulated method for performing pagination and transforming and formatting the REST api output like graphQL output. It uses the dependency inversion principle i.e. it has a single responsibility of performing the task based on the given parameters, it doesn't hold any special processing logic of its own which makes it very scalable.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
As of now, testing was performed manually as there was a dependency on Github Rest API and the output would vary for each input and all the routes are protected.&lt;br /&gt;
&lt;br /&gt;
== Use of LLM ==&lt;br /&gt;
We used CoPilot extension integrated in VS Code editor for code autocompletion, explanation and debugging throughout the project. Generating the dockerfile, boiler plate and even main logic for the API services, all of them were carried out with the help of CoPilot which made the development experience extremely smooth and helped us stay productive.&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
'''Mentor'''&lt;br /&gt;
&lt;br /&gt;
* Jialin Cui &amp;lt;jcui9@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Members'''&lt;br /&gt;
&lt;br /&gt;
* Om Jain &amp;lt;opjain@ncsu.edu&amp;gt;&lt;br /&gt;
* Jash Gopani &amp;lt;jbgopani@ncsu.edu&amp;gt;&lt;br /&gt;
* Anshul Khairnar &amp;lt;akhairn@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=156879</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints-Design-Document</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=156879"/>
		<updated>2024-04-24T17:49:00Z</updated>

		<summary type="html">&lt;p&gt;Opjain: /* Pages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Live Demo &amp;amp; Source Code=&lt;br /&gt;
[http://152.7.176.174:5000/ Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.ncsu.edu/opjain/GH_Miner Source Code]&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. Phase 2 of this project involves creating a frontend for this application using ReactJS. More details regarding the probable design of the frontend of the project is provided in the Frontend section in this page&lt;br /&gt;
&lt;br /&gt;
=System Architecture=&lt;br /&gt;
&lt;br /&gt;
Below is the system architecture of our project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:System Architecture GH-2401.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Our system follows the Model-View-Controller architecture.&lt;br /&gt;
Frontend is the View with which user will interact.&lt;br /&gt;
Once user invokes an endpoint, we get to the github_routes file which acts as the controller of the system, which find the appropriate route for the method from the graphql_services which is the model of the system. Once the relevant method is called, model returns the API response to the controller and then this response is finally sent to the view which is our frontend.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
Below is our layout of our application, which is similar to the GitHub UI:&lt;br /&gt;
&lt;br /&gt;
This is the welcome page of our application. This has a login button.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Welcome_page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once you click on the login button, this page is displayed, where the application would ask for the required permissions&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Login github.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user clicks on login, below page is displayed where username and user's top repositories are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Landing page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user clicks on Repositories button on the nav bar, below page is displayed where all the user's repositories are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Repo page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user clicks on Time Range contributions button on the nav bar, below page is displayed where for a particular start and end time all the user's contributions are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Contribution page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user searches for someone else in the search box on the nav bar, below page is displayed where username and user's top repositories are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Search others profile.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
The user interface includes the following pages - &lt;br /&gt;
&lt;br /&gt;
* '''Login page''' - GitHub Oauth is used to authenticate users with GitHub. The user is asked to enter the GitHub username and will be redirected to GitHub for the required permissions to access the data. Once authenticated, the user will be redirected to the profile page.&lt;br /&gt;
&lt;br /&gt;
* '''Profile page''' - This page contains the user statistics - profile image, bio, number of followers, popular repositories, contribution data, etc. The user can view the statistics of each of the popular repos - number of forks, number of watchers, repository access status, etc. The contribution graph will give insights into the number of contributions on a particular day.&lt;br /&gt;
&lt;br /&gt;
* '''Repositories page''' - This page will list down all the repositories of an authenticated user.&lt;br /&gt;
&lt;br /&gt;
* '''Time-range contributions''' - This page will display the statistics of the required user within the desired period of time. The user has to provide the GitHub username, start date, and end date of the user.&lt;br /&gt;
&lt;br /&gt;
* '''Logout''' - This will log out the user from our application.&lt;br /&gt;
&lt;br /&gt;
= File Structure =&lt;br /&gt;
=== '''Components''' ===&lt;br /&gt;
&lt;br /&gt;
* '''RepositoryCard''': This adaptable element is crafted to showcase information in a rectangular box layout, catering to a range of functions like presenting statistics, repositories, and item lists across different sections of the application. Each card features a title, description, star and fork counts for the repository, as well as indicating its accessibility status (Private or Public).&lt;br /&gt;
&lt;br /&gt;
* '''SearchBox''': A Higher Order Component (HOC) tailored to accommodate relevant input fields and a submit button component. It facilitates search operations by allowing users to input parameters such as usernames, start dates, and end dates for filtering contributions data within a specified time range.&lt;br /&gt;
&lt;br /&gt;
* '''Navbar''': This versatile component acts as the application's navigation bar, providing convenient links to all sections/pages within the interface. It utilizes react-router for seamless state management, ensuring smooth transitions between different sections/pages of the app. Users can effortlessly navigate to the Profile page, Repository page, and Time-range contributions page. Moreover, it features a sign-out button for logging out from the application, along with a search box allowing users to search for other users' profiles using their GitHub usernames.&lt;br /&gt;
&lt;br /&gt;
=== '''Pages''' ===&lt;br /&gt;
&lt;br /&gt;
* '''LoginPage''': This page provides a summary of the user's profile statistics, displaying their GitHub username, follower count, following count, and six highlighted repositories.&lt;br /&gt;
&lt;br /&gt;
* '''ProfilePage''': This page presents an overview of the user's profile statistics, including their GitHub username, follower count, following count, and six highlighted repositories. &lt;br /&gt;
&lt;br /&gt;
* '''RepositoryPage''': This page will display a list of all repositories belonging to the user. The user will have the ability to view the repository's name, the number of stars it has received, the number of times it has been forked, and the date on which the repository was created.&lt;br /&gt;
&lt;br /&gt;
=== '''Utils''' ===&lt;br /&gt;
&lt;br /&gt;
* '''AxiosInstance''': Utilizing the &amp;quot;axios&amp;quot; library, AxiosInstance is a dedicated file within the project aimed at creating and configuring an instance of axios for handling HTTP requests. This file establishes default headers, including authentication tokens and request types, along with a base URL. Adopting the singleton pattern, this single instance ensures consistency and efficiency throughout the project.&lt;br /&gt;
&lt;br /&gt;
* '''Constants''': To maintain consistency and minimize naming errors, the Constants file serves as a repository for frequently used terms within the project. By storing and exporting these terms, the code becomes standardized, promoting clarity and ease of maintenance.&lt;br /&gt;
&lt;br /&gt;
= Implementation Details and Use of LLM = &lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
Since there were two types of endpoints for each API, i.e. graphql and rest variant, we unified the endpoints to have the '''api_type''' as a dynamic parameter. Furthermore, we route the request to the respective service based on the api_type value we get from the URL. &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns used ===&lt;br /&gt;
# The REST API Client '''/backend/app/services/github_query/github_rest/client.py''' is a Singleton since we only needed a single instance of github object from the pyGithub library throughout the lifecycle of the application&lt;br /&gt;
&lt;br /&gt;
# The '''paginate_and_format_comments''' method declared in the '''github_rest_services.py''' is a very well thought and formulated method for performing pagination and transforming and formatting the REST api output like graphQL output. It uses the dependency inversion principle i.e. it has a single responsibility of performing the task based on the given parameters, it doesn't hold any special processing logic of its own which makes it very scalable.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
As of now, testing was performed manually as there was a dependency on Github Rest API and the output would vary for each input and all the routes are protected.&lt;br /&gt;
&lt;br /&gt;
== Use of LLM ==&lt;br /&gt;
We used CoPilot extension integrated in VS Code editor for code autocompletion, explanation and debugging throughout the project. Generating the dockerfile, boiler plate and even main logic for the API services, all of them were carried out with the help of CoPilot which made the development experience extremely smooth and helped us stay productive.&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
'''Mentor'''&lt;br /&gt;
&lt;br /&gt;
* Jialin Cui &amp;lt;jcui9@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Members'''&lt;br /&gt;
&lt;br /&gt;
* Om Jain &amp;lt;opjain@ncsu.edu&amp;gt;&lt;br /&gt;
* Jash Gopani &amp;lt;jbgopani@ncsu.edu&amp;gt;&lt;br /&gt;
* Anshul Khairnar &amp;lt;akhairn@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=156878</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints-Design-Document</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=156878"/>
		<updated>2024-04-24T17:46:00Z</updated>

		<summary type="html">&lt;p&gt;Opjain: /* Components */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Live Demo &amp;amp; Source Code=&lt;br /&gt;
[http://152.7.176.174:5000/ Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.ncsu.edu/opjain/GH_Miner Source Code]&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. Phase 2 of this project involves creating a frontend for this application using ReactJS. More details regarding the probable design of the frontend of the project is provided in the Frontend section in this page&lt;br /&gt;
&lt;br /&gt;
=System Architecture=&lt;br /&gt;
&lt;br /&gt;
Below is the system architecture of our project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:System Architecture GH-2401.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Our system follows the Model-View-Controller architecture.&lt;br /&gt;
Frontend is the View with which user will interact.&lt;br /&gt;
Once user invokes an endpoint, we get to the github_routes file which acts as the controller of the system, which find the appropriate route for the method from the graphql_services which is the model of the system. Once the relevant method is called, model returns the API response to the controller and then this response is finally sent to the view which is our frontend.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
Below is our layout of our application, which is similar to the GitHub UI:&lt;br /&gt;
&lt;br /&gt;
This is the welcome page of our application. This has a login button.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Welcome_page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once you click on the login button, this page is displayed, where the application would ask for the required permissions&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Login github.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user clicks on login, below page is displayed where username and user's top repositories are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Landing page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user clicks on Repositories button on the nav bar, below page is displayed where all the user's repositories are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Repo page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user clicks on Time Range contributions button on the nav bar, below page is displayed where for a particular start and end time all the user's contributions are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Contribution page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user searches for someone else in the search box on the nav bar, below page is displayed where username and user's top repositories are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Search others profile.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
The user interface includes the following pages - &lt;br /&gt;
&lt;br /&gt;
* '''Login page''' - GitHub Oauth is used to authenticate users with GitHub. The user is asked to enter the GitHub username and will be redirected to GitHub for the required permissions to access the data. Once authenticated, the user will be redirected to the profile page.&lt;br /&gt;
&lt;br /&gt;
* '''Profile page''' - This page contains the user statistics - profile image, bio, number of followers, popular repositories, contribution data, etc. The user can view the statistics of each of the popular repos - number of forks, number of watchers, repository access status, etc. The contribution graph will give insights into the number of contributions on a particular day.&lt;br /&gt;
&lt;br /&gt;
* '''Repositories page''' - This page will list down all the repositories of an authenticated user.&lt;br /&gt;
&lt;br /&gt;
* '''Time-range contributions''' - This page will display the statistics of the required user within the desired period of time. The user has to provide the GitHub username, start date, and end date of the user.&lt;br /&gt;
&lt;br /&gt;
* '''Logout''' - This will log out the user from our application.&lt;br /&gt;
&lt;br /&gt;
= File Structure =&lt;br /&gt;
=== '''Components''' ===&lt;br /&gt;
&lt;br /&gt;
* '''RepositoryCard''': This adaptable element is crafted to showcase information in a rectangular box layout, catering to a range of functions like presenting statistics, repositories, and item lists across different sections of the application. Each card features a title, description, star and fork counts for the repository, as well as indicating its accessibility status (Private or Public).&lt;br /&gt;
&lt;br /&gt;
* '''SearchBox''': A Higher Order Component (HOC) tailored to accommodate relevant input fields and a submit button component. It facilitates search operations by allowing users to input parameters such as usernames, start dates, and end dates for filtering contributions data within a specified time range.&lt;br /&gt;
&lt;br /&gt;
* '''Navbar''': This versatile component acts as the application's navigation bar, providing convenient links to all sections/pages within the interface. It utilizes react-router for seamless state management, ensuring smooth transitions between different sections/pages of the app. Users can effortlessly navigate to the Profile page, Repository page, and Time-range contributions page. Moreover, it features a sign-out button for logging out from the application, along with a search box allowing users to search for other users' profiles using their GitHub usernames.&lt;br /&gt;
&lt;br /&gt;
=== '''Pages''' ===&lt;br /&gt;
&lt;br /&gt;
* '''LoginPage''': This page manages client-side authentication. When users access it, they're redirected to the GitHub OAuth Authorization page, where the application requests specific permissions to access their repositories. After granting permission, users are redirected to the Profile Page.&lt;br /&gt;
&lt;br /&gt;
* '''ProfilePage''': This page offers an overview of the user's profile statistics. It shows the user's GitHub username, number of followers, number of people the user is following, and six popular repositories. &lt;br /&gt;
&lt;br /&gt;
* '''RepositoryPage''': This page will list down all the user's repositories. The user will be able to view the repository name, star count, number of forks and the date at which this repo was created.&lt;br /&gt;
&lt;br /&gt;
=== '''Utils''' ===&lt;br /&gt;
&lt;br /&gt;
* '''AxiosInstance''': Utilizing the &amp;quot;axios&amp;quot; library, AxiosInstance is a dedicated file within the project aimed at creating and configuring an instance of axios for handling HTTP requests. This file establishes default headers, including authentication tokens and request types, along with a base URL. Adopting the singleton pattern, this single instance ensures consistency and efficiency throughout the project.&lt;br /&gt;
&lt;br /&gt;
* '''Constants''': To maintain consistency and minimize naming errors, the Constants file serves as a repository for frequently used terms within the project. By storing and exporting these terms, the code becomes standardized, promoting clarity and ease of maintenance.&lt;br /&gt;
&lt;br /&gt;
= Implementation Details and Use of LLM = &lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
Since there were two types of endpoints for each API, i.e. graphql and rest variant, we unified the endpoints to have the '''api_type''' as a dynamic parameter. Furthermore, we route the request to the respective service based on the api_type value we get from the URL. &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns used ===&lt;br /&gt;
# The REST API Client '''/backend/app/services/github_query/github_rest/client.py''' is a Singleton since we only needed a single instance of github object from the pyGithub library throughout the lifecycle of the application&lt;br /&gt;
&lt;br /&gt;
# The '''paginate_and_format_comments''' method declared in the '''github_rest_services.py''' is a very well thought and formulated method for performing pagination and transforming and formatting the REST api output like graphQL output. It uses the dependency inversion principle i.e. it has a single responsibility of performing the task based on the given parameters, it doesn't hold any special processing logic of its own which makes it very scalable.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
As of now, testing was performed manually as there was a dependency on Github Rest API and the output would vary for each input and all the routes are protected.&lt;br /&gt;
&lt;br /&gt;
== Use of LLM ==&lt;br /&gt;
We used CoPilot extension integrated in VS Code editor for code autocompletion, explanation and debugging throughout the project. Generating the dockerfile, boiler plate and even main logic for the API services, all of them were carried out with the help of CoPilot which made the development experience extremely smooth and helped us stay productive.&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
'''Mentor'''&lt;br /&gt;
&lt;br /&gt;
* Jialin Cui &amp;lt;jcui9@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Members'''&lt;br /&gt;
&lt;br /&gt;
* Om Jain &amp;lt;opjain@ncsu.edu&amp;gt;&lt;br /&gt;
* Jash Gopani &amp;lt;jbgopani@ncsu.edu&amp;gt;&lt;br /&gt;
* Anshul Khairnar &amp;lt;akhairn@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=156877</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints-Design-Document</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=156877"/>
		<updated>2024-04-24T17:44:00Z</updated>

		<summary type="html">&lt;p&gt;Opjain: /* Pages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Live Demo &amp;amp; Source Code=&lt;br /&gt;
[http://152.7.176.174:5000/ Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.ncsu.edu/opjain/GH_Miner Source Code]&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. Phase 2 of this project involves creating a frontend for this application using ReactJS. More details regarding the probable design of the frontend of the project is provided in the Frontend section in this page&lt;br /&gt;
&lt;br /&gt;
=System Architecture=&lt;br /&gt;
&lt;br /&gt;
Below is the system architecture of our project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:System Architecture GH-2401.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Our system follows the Model-View-Controller architecture.&lt;br /&gt;
Frontend is the View with which user will interact.&lt;br /&gt;
Once user invokes an endpoint, we get to the github_routes file which acts as the controller of the system, which find the appropriate route for the method from the graphql_services which is the model of the system. Once the relevant method is called, model returns the API response to the controller and then this response is finally sent to the view which is our frontend.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
Below is our layout of our application, which is similar to the GitHub UI:&lt;br /&gt;
&lt;br /&gt;
This is the welcome page of our application. This has a login button.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Welcome_page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once you click on the login button, this page is displayed, where the application would ask for the required permissions&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Login github.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user clicks on login, below page is displayed where username and user's top repositories are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Landing page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user clicks on Repositories button on the nav bar, below page is displayed where all the user's repositories are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Repo page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user clicks on Time Range contributions button on the nav bar, below page is displayed where for a particular start and end time all the user's contributions are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Contribution page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Once the user searches for someone else in the search box on the nav bar, below page is displayed where username and user's top repositories are displayed.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Search others profile.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
The user interface includes the following pages - &lt;br /&gt;
&lt;br /&gt;
* '''Login page''' - GitHub Oauth is used to authenticate users with GitHub. The user is asked to enter the GitHub username and will be redirected to GitHub for the required permissions to access the data. Once authenticated, the user will be redirected to the profile page.&lt;br /&gt;
&lt;br /&gt;
* '''Profile page''' - This page contains the user statistics - profile image, bio, number of followers, popular repositories, contribution data, etc. The user can view the statistics of each of the popular repos - number of forks, number of watchers, repository access status, etc. The contribution graph will give insights into the number of contributions on a particular day.&lt;br /&gt;
&lt;br /&gt;
* '''Repositories page''' - This page will list down all the repositories of an authenticated user.&lt;br /&gt;
&lt;br /&gt;
* '''Time-range contributions''' - This page will display the statistics of the required user within the desired period of time. The user has to provide the GitHub username, start date, and end date of the user.&lt;br /&gt;
&lt;br /&gt;
* '''Logout''' - This will log out the user from our application.&lt;br /&gt;
&lt;br /&gt;
= File Structure =&lt;br /&gt;
=== '''Components''' ===&lt;br /&gt;
&lt;br /&gt;
* '''RepositoryCard''': This adaptable element is crafted to showcase information in a rectangular box layout, catering to a range of functions like presenting statistics, repositories, and item lists across different sections of the application. Each card features a title, description, star and fork counts for the repository, as well as indicating its accessibility status (Private or Public).&lt;br /&gt;
&lt;br /&gt;
* '''SearchBox''': A Higher Order Component (HOC) tailored to accommodate relevant input fields and a submit button component. It facilitates search operations by allowing users to input parameters such as usernames, start dates, and end dates for filtering contributions data within a specified time range.&lt;br /&gt;
&lt;br /&gt;
* '''Navbar''': This component functions as the application's navigation bar, offering links to all sections/pages within the interface. It leverages react-router for efficient state management, facilitating smooth transitions between different sections/pages of the app. Users can easily navigate to the Profile page, Repository page, and Time-range contributions page. Additionally, it includes a sign-out button for logging out from the application.&lt;br /&gt;
&lt;br /&gt;
=== '''Pages''' ===&lt;br /&gt;
&lt;br /&gt;
* '''LoginPage''': This page manages client-side authentication. When users access it, they're redirected to the GitHub OAuth Authorization page, where the application requests specific permissions to access their repositories. After granting permission, users are redirected to the Profile Page.&lt;br /&gt;
&lt;br /&gt;
* '''ProfilePage''': This page offers an overview of the user's profile statistics. It shows the user's GitHub username, number of followers, number of people the user is following, and six popular repositories. &lt;br /&gt;
&lt;br /&gt;
* '''RepositoryPage''': This page will list down all the user's repositories. The user will be able to view the repository name, star count, number of forks and the date at which this repo was created.&lt;br /&gt;
&lt;br /&gt;
=== '''Utils''' ===&lt;br /&gt;
&lt;br /&gt;
* '''AxiosInstance''': Utilizing the &amp;quot;axios&amp;quot; library, AxiosInstance is a dedicated file within the project aimed at creating and configuring an instance of axios for handling HTTP requests. This file establishes default headers, including authentication tokens and request types, along with a base URL. Adopting the singleton pattern, this single instance ensures consistency and efficiency throughout the project.&lt;br /&gt;
&lt;br /&gt;
* '''Constants''': To maintain consistency and minimize naming errors, the Constants file serves as a repository for frequently used terms within the project. By storing and exporting these terms, the code becomes standardized, promoting clarity and ease of maintenance.&lt;br /&gt;
&lt;br /&gt;
= Implementation Details and Use of LLM = &lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
Since there were two types of endpoints for each API, i.e. graphql and rest variant, we unified the endpoints to have the '''api_type''' as a dynamic parameter. Furthermore, we route the request to the respective service based on the api_type value we get from the URL. &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns used ===&lt;br /&gt;
# The REST API Client '''/backend/app/services/github_query/github_rest/client.py''' is a Singleton since we only needed a single instance of github object from the pyGithub library throughout the lifecycle of the application&lt;br /&gt;
&lt;br /&gt;
# The '''paginate_and_format_comments''' method declared in the '''github_rest_services.py''' is a very well thought and formulated method for performing pagination and transforming and formatting the REST api output like graphQL output. It uses the dependency inversion principle i.e. it has a single responsibility of performing the task based on the given parameters, it doesn't hold any special processing logic of its own which makes it very scalable.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
As of now, testing was performed manually as there was a dependency on Github Rest API and the output would vary for each input and all the routes are protected.&lt;br /&gt;
&lt;br /&gt;
== Use of LLM ==&lt;br /&gt;
We used CoPilot extension integrated in VS Code editor for code autocompletion, explanation and debugging throughout the project. Generating the dockerfile, boiler plate and even main logic for the API services, all of them were carried out with the help of CoPilot which made the development experience extremely smooth and helped us stay productive.&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
'''Mentor'''&lt;br /&gt;
&lt;br /&gt;
* Jialin Cui &amp;lt;jcui9@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Members'''&lt;br /&gt;
&lt;br /&gt;
* Om Jain &amp;lt;opjain@ncsu.edu&amp;gt;&lt;br /&gt;
* Jash Gopani &amp;lt;jbgopani@ncsu.edu&amp;gt;&lt;br /&gt;
* Anshul Khairnar &amp;lt;akhairn@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=156874</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints-Design-Document</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=156874"/>
		<updated>2024-04-24T17:23:29Z</updated>

		<summary type="html">&lt;p&gt;Opjain: /* Components */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Live Demo &amp;amp; Source Code=&lt;br /&gt;
[http://152.7.176.174:5000/ Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.ncsu.edu/opjain/GH_Miner Source Code]&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. Phase 2 of this project involves creating a frontend for this application using ReactJS. More details regarding the probable design of the frontend of the project is provided in the Frontend section in this page&lt;br /&gt;
&lt;br /&gt;
=System Architecture=&lt;br /&gt;
&lt;br /&gt;
Below is the system architecture of our project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:System Architecture GH-2401.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Our system follows the Model-View-Controller architecture.&lt;br /&gt;
Frontend is the View with which user will interact.&lt;br /&gt;
Once user invokes an endpoint, we get to the github_routes file which acts as the controller of the system, which find the appropriate route for the method from the graphql_services which is the model of the system. Once the relevant method is called, model returns the API response to the controller and then this response is finally sent to the view which is our frontend.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
Below is our layout of our application, which is similar to the GitHub UI:&lt;br /&gt;
&lt;br /&gt;
This is the welcome page of our application&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Welcome_page.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub image2.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
The user interface includes the following pages - &lt;br /&gt;
&lt;br /&gt;
* '''Login page''' - GitHub Oauth is used to authenticate users with GitHub. The user is asked to enter the GitHub username and will be redirected to GitHub for the required permissions to access the data. Once authenticated, the user will be redirected to the profile page.&lt;br /&gt;
&lt;br /&gt;
* '''Profile page''' - This page contains the user statistics - profile image, bio, number of followers, popular repositories, contribution data, etc. The user can view the statistics of each of the popular repos - number of forks, number of watchers, repository access status, etc. The contribution graph will give insights into the number of contributions on a particular day.&lt;br /&gt;
&lt;br /&gt;
* '''Repositories page''' - This page will list down all the repositories of an authenticated user.&lt;br /&gt;
&lt;br /&gt;
* '''Time-range contributions''' - This page will display the statistics of the required user within the desired period of time. The user has to provide the GitHub username, start date, and end date of the user.&lt;br /&gt;
&lt;br /&gt;
* '''Logout''' - This will log out the user from our application.&lt;br /&gt;
&lt;br /&gt;
= File Structure =&lt;br /&gt;
=== '''Components''' ===&lt;br /&gt;
&lt;br /&gt;
* '''RepositoryCard''': This adaptable element is crafted to showcase information in a rectangular box layout, catering to a range of functions like presenting statistics, repositories, and item lists across different sections of the application. Each card features a title, description, star and fork counts for the repository, as well as indicating its accessibility status (Private or Public).&lt;br /&gt;
&lt;br /&gt;
* '''SearchBox''': A Higher Order Component (HOC) tailored to accommodate relevant input fields and a submit button component. It facilitates search operations by allowing users to input parameters such as usernames, start dates, and end dates for filtering contributions data within a specified time range.&lt;br /&gt;
&lt;br /&gt;
* '''Navbar''': This component functions as the application's navigation bar, offering links to all sections/pages within the interface. It leverages react-router for efficient state management, facilitating smooth transitions between different sections/pages of the app. Users can easily navigate to the Profile page, Repository page, and Time-range contributions page. Additionally, it includes a sign-out button for logging out from the application.&lt;br /&gt;
&lt;br /&gt;
=== '''Pages''' ===&lt;br /&gt;
&lt;br /&gt;
* '''LoginPage''': Serving as the initial landing page, users are prompted to input their GitHub username via a simple text box. Upon clicking the Login button, users are redirected to GitHub for necessary permissions. Upon completion, users are directed to the dashboard.&lt;br /&gt;
&lt;br /&gt;
* '''Dashboard''': This page offers an overview of the user's profile statistics. It incorporates various components such as UserCard, GitHubCalendar, and Navbar to enhance user experience and accessibility.&lt;br /&gt;
&lt;br /&gt;
* '''RepositoryPage''': Here, users can view a comprehensive list of their repositories. Each repository is represented by a RepositoryComponent, providing detailed information and functionality for individual repositories within the list. &lt;br /&gt;
&lt;br /&gt;
=== '''Utils''' ===&lt;br /&gt;
&lt;br /&gt;
* '''AxiosInstance''': Utilizing the &amp;quot;axios&amp;quot; library, AxiosInstance is a dedicated file within the project aimed at creating and configuring an instance of axios for handling HTTP requests. This file establishes default headers, including authentication tokens and request types, along with a base URL. Adopting the singleton pattern, this single instance ensures consistency and efficiency throughout the project.&lt;br /&gt;
&lt;br /&gt;
* '''Constants''': To maintain consistency and minimize naming errors, the Constants file serves as a repository for frequently used terms within the project. By storing and exporting these terms, the code becomes standardized, promoting clarity and ease of maintenance.&lt;br /&gt;
&lt;br /&gt;
= Implementation Details and Use of LLM = &lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
Since there were two types of endpoints for each API, i.e. graphql and rest variant, we unified the endpoints to have the '''api_type''' as a dynamic parameter. Furthermore, we route the request to the respective service based on the api_type value we get from the URL. &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns used ===&lt;br /&gt;
# The REST API Client '''/backend/app/services/github_query/github_rest/client.py''' is a Singleton since we only needed a single instance of github object from the pyGithub library throughout the lifecycle of the application&lt;br /&gt;
&lt;br /&gt;
# The '''paginate_and_format_comments''' method declared in the '''github_rest_services.py''' is a very well thought and formulated method for performing pagination and transforming and formatting the REST api output like graphQL output. It uses the dependency inversion principle i.e. it has a single responsibility of performing the task based on the given parameters, it doesn't hold any special processing logic of its own which makes it very scalable.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
As of now, testing was performed manually as there was a dependency on Github Rest API and the output would vary for each input and all the routes are protected.&lt;br /&gt;
&lt;br /&gt;
== Use of LLM ==&lt;br /&gt;
We used CoPilot extension integrated in VS Code editor for code autocompletion, explanation and debugging throughout the project. Generating the dockerfile, boiler plate and even main logic for the API services, all of them were carried out with the help of CoPilot which made the development experience extremely smooth and helped us stay productive.&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
'''Mentor'''&lt;br /&gt;
&lt;br /&gt;
* Jialin Cui &amp;lt;jcui9@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Members'''&lt;br /&gt;
&lt;br /&gt;
* Om Jain &amp;lt;opjain@ncsu.edu&amp;gt;&lt;br /&gt;
* Jash Gopani &amp;lt;jbgopani@ncsu.edu&amp;gt;&lt;br /&gt;
* Anshul Khairnar &amp;lt;akhairn@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=155551</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints-Design-Document</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=155551"/>
		<updated>2024-04-09T02:25:38Z</updated>

		<summary type="html">&lt;p&gt;Opjain: /* File Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Live Demo &amp;amp; Source Code=&lt;br /&gt;
[http://152.7.176.174:5000/ Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.ncsu.edu/opjain/GH_Miner Source Code]&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. Phase 2 of this project involves creating a frontend for this application using ReactJS. More details regarding the probable design of the frontend of the project is provided in the Frontend section in this page&lt;br /&gt;
&lt;br /&gt;
=System Architecture=&lt;br /&gt;
&lt;br /&gt;
Below is the system architecture of our project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:System Architecture GH-2401.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Our system follows the Model-View-Controller architecture.&lt;br /&gt;
Frontend is the View with which user will interact.&lt;br /&gt;
Once user invokes an endpoint, we get to the github_routes file which acts as the controller of the system, which find the appropriate route for the method from the graphql_services which is the model of the system. Once the relevant method is called, model returns the API response to the controller and then this response is finally sent to the view which is our frontend.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
Below is our planned layout, which is similar to the GitHub UI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub Image.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub image2.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
The user interface includes the following pages - &lt;br /&gt;
&lt;br /&gt;
* '''Login page''' - GitHub Oauth is used to authenticate users with GitHub. The user is asked to enter the GitHub username and will be redirected to GitHub for the required permissions to access the data. Once authenticated, the user will be redirected to the profile page.&lt;br /&gt;
&lt;br /&gt;
* '''Profile page''' - This page contains the user statistics - profile image, bio, number of followers, popular repositories, contribution data, etc. The user can view the statistics of each of the popular repos - number of forks, number of watchers, repository access status, etc. The contribution graph will give insights into the number of contributions on a particular day.&lt;br /&gt;
&lt;br /&gt;
* '''Repositories page''' - This page will list down all the repositories of an authenticated user.&lt;br /&gt;
&lt;br /&gt;
* '''Time-range contributions''' - This page will display the statistics of the required user within the desired period of time. The user has to provide the GitHub username, start date, and end date of the user.&lt;br /&gt;
&lt;br /&gt;
* '''Logout''' - This will log out the user from our application.&lt;br /&gt;
&lt;br /&gt;
= File Structure =&lt;br /&gt;
=== '''Components''' ===&lt;br /&gt;
&lt;br /&gt;
* '''Card''': A versatile component designed to display information in a rectangular box format. It serves various purposes such as presenting statistics, repositories, and lists of items across multiple sections of the application.&lt;br /&gt;
&lt;br /&gt;
* '''SearchBox''': A Higher Order Component (HOC) tailored to accommodate relevant input fields and a submit button component. It facilitates search operations by allowing users to input parameters such as usernames, start dates, and end dates for filtering contributions data within a specified time range.&lt;br /&gt;
&lt;br /&gt;
* '''Navbar''': This component serves as the navigation bar, providing links to all sections/pages within the application. Utilizing react-router for state management, it enables seamless navigation between different sections/pages of the app.&lt;br /&gt;
&lt;br /&gt;
=== '''Pages''' ===&lt;br /&gt;
&lt;br /&gt;
* '''LoginPage''': Serving as the initial landing page, users are prompted to input their GitHub username via a simple text box. Upon clicking the Login button, users are redirected to GitHub for necessary permissions. Upon completion, users are directed to the dashboard.&lt;br /&gt;
&lt;br /&gt;
* '''Dashboard''': This page offers an overview of the user's profile statistics. It incorporates various components such as UserCard, GitHubCalendar, and Navbar to enhance user experience and accessibility.&lt;br /&gt;
&lt;br /&gt;
* '''RepositoryPage''': Here, users can view a comprehensive list of their repositories. Each repository is represented by a RepositoryComponent, providing detailed information and functionality for individual repositories within the list. &lt;br /&gt;
&lt;br /&gt;
=== '''Utils''' ===&lt;br /&gt;
&lt;br /&gt;
* '''AxiosInstance''': Utilizing the &amp;quot;axios&amp;quot; library, AxiosInstance is a dedicated file within the project aimed at creating and configuring an instance of axios for handling HTTP requests. This file establishes default headers, including authentication tokens and request types, along with a base URL. Adopting the singleton pattern, this single instance ensures consistency and efficiency throughout the project.&lt;br /&gt;
&lt;br /&gt;
* '''Constants''': To maintain consistency and minimize naming errors, the Constants file serves as a repository for frequently used terms within the project. By storing and exporting these terms, the code becomes standardized, promoting clarity and ease of maintenance.&lt;br /&gt;
&lt;br /&gt;
= Implementation Details and Use of LLM = &lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
Since there were two types of endpoints for each API, i.e. graphql and rest variant, we unified the endpoints to have the '''api_type''' as a dynamic parameter. Furthermore, we route the request to the respective service based on the api_type value we get from the URL. &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns used ===&lt;br /&gt;
# The REST API Client '''/backend/app/services/github_query/github_rest/client.py''' is a Singleton since we only needed a single instance of github object from the pyGithub library throughout the lifecycle of the application&lt;br /&gt;
&lt;br /&gt;
# The '''paginate_and_format_comments''' method declared in the '''github_rest_services.py''' is a very well thought and formulated method for performing pagination and transforming and formatting the REST api output like graphQL output. It uses the dependency inversion principle i.e. it has a single responsibility of performing the task based on the given parameters, it doesn't hold any special processing logic of its own which makes it very scalable.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
As of now, testing was performed manually as there was a dependency on Github Rest API and the output would vary for each input and all the routes are protected.&lt;br /&gt;
&lt;br /&gt;
== Use of LLM ==&lt;br /&gt;
We used CoPilot extension integrated in VS Code editor for code autocompletion, explanation and debugging throughout the project. Generating the dockerfile, boiler plate and even main logic for the API services, all of them were carried out with the help of CoPilot which made the development experience extremely smooth and helped us stay productive.&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
'''Mentor'''&lt;br /&gt;
&lt;br /&gt;
* Jialin Cui &amp;lt;jcui9@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Members'''&lt;br /&gt;
&lt;br /&gt;
* Om Jain &amp;lt;opjain@ncsu.edu&amp;gt;&lt;br /&gt;
* Jash Gopani &amp;lt;jbgopani@ncsu.edu&amp;gt;&lt;br /&gt;
* Anshul Khairnar &amp;lt;akhairn@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=155550</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints-Design-Document</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=155550"/>
		<updated>2024-04-09T02:25:11Z</updated>

		<summary type="html">&lt;p&gt;Opjain: /* Components */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Live Demo &amp;amp; Source Code=&lt;br /&gt;
[http://152.7.176.174:5000/ Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.ncsu.edu/opjain/GH_Miner Source Code]&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. Phase 2 of this project involves creating a frontend for this application using ReactJS. More details regarding the probable design of the frontend of the project is provided in the Frontend section in this page&lt;br /&gt;
&lt;br /&gt;
=System Architecture=&lt;br /&gt;
&lt;br /&gt;
Below is the system architecture of our project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:System Architecture GH-2401.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Our system follows the Model-View-Controller architecture.&lt;br /&gt;
Frontend is the View with which user will interact.&lt;br /&gt;
Once user invokes an endpoint, we get to the github_routes file which acts as the controller of the system, which find the appropriate route for the method from the graphql_services which is the model of the system. Once the relevant method is called, model returns the API response to the controller and then this response is finally sent to the view which is our frontend.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
Below is our planned layout, which is similar to the GitHub UI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub Image.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub image2.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
The user interface includes the following pages - &lt;br /&gt;
&lt;br /&gt;
* '''Login page''' - GitHub Oauth is used to authenticate users with GitHub. The user is asked to enter the GitHub username and will be redirected to GitHub for the required permissions to access the data. Once authenticated, the user will be redirected to the profile page.&lt;br /&gt;
&lt;br /&gt;
* '''Profile page''' - This page contains the user statistics - profile image, bio, number of followers, popular repositories, contribution data, etc. The user can view the statistics of each of the popular repos - number of forks, number of watchers, repository access status, etc. The contribution graph will give insights into the number of contributions on a particular day.&lt;br /&gt;
&lt;br /&gt;
* '''Repositories page''' - This page will list down all the repositories of an authenticated user.&lt;br /&gt;
&lt;br /&gt;
* '''Time-range contributions''' - This page will display the statistics of the required user within the desired period of time. The user has to provide the GitHub username, start date, and end date of the user.&lt;br /&gt;
&lt;br /&gt;
* '''Logout''' - This will log out the user from our application.&lt;br /&gt;
&lt;br /&gt;
= File Structure =&lt;br /&gt;
=== '''Components''' ===&lt;br /&gt;
&lt;br /&gt;
* '''Card''': A versatile component designed to display information in a rectangular box format. It serves various purposes such as presenting statistics, repositories, and lists of items across multiple sections of the application.&lt;br /&gt;
&lt;br /&gt;
* '''SearchBox''': A Higher Order Component (HOC) tailored to accommodate relevant input fields and a submit button component. It facilitates search operations by allowing users to input parameters such as usernames, start dates, and end dates for filtering contributions data within a specified time range.&lt;br /&gt;
&lt;br /&gt;
* '''Navbar''': This component serves as the navigation bar, providing links to all sections/pages within the application. Utilizing react-router for state management, it enables seamless navigation between different sections/pages of the app.&lt;br /&gt;
&lt;br /&gt;
'''Pages'''&lt;br /&gt;
&lt;br /&gt;
* '''LoginPage''': Serving as the initial landing page, users are prompted to input their GitHub username via a simple text box. Upon clicking the Login button, users are redirected to GitHub for necessary permissions. Upon completion, users are directed to the dashboard.&lt;br /&gt;
&lt;br /&gt;
* '''Dashboard''': This page offers an overview of the user's profile statistics. It incorporates various components such as UserCard, GitHubCalendar, and Navbar to enhance user experience and accessibility.&lt;br /&gt;
&lt;br /&gt;
* '''RepositoryPage''': Here, users can view a comprehensive list of their repositories. Each repository is represented by a RepositoryComponent, providing detailed information and functionality for individual repositories within the list. &lt;br /&gt;
&lt;br /&gt;
'''Utils'''&lt;br /&gt;
&lt;br /&gt;
* '''AxiosInstance''': Utilizing the &amp;quot;axios&amp;quot; library, AxiosInstance is a dedicated file within the project aimed at creating and configuring an instance of axios for handling HTTP requests. This file establishes default headers, including authentication tokens and request types, along with a base URL. Adopting the singleton pattern, this single instance ensures consistency and efficiency throughout the project.&lt;br /&gt;
&lt;br /&gt;
* '''Constants''': To maintain consistency and minimize naming errors, the Constants file serves as a repository for frequently used terms within the project. By storing and exporting these terms, the code becomes standardized, promoting clarity and ease of maintenance.&lt;br /&gt;
&lt;br /&gt;
= Implementation Details and Use of LLM = &lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
Since there were two types of endpoints for each API, i.e. graphql and rest variant, we unified the endpoints to have the '''api_type''' as a dynamic parameter. Furthermore, we route the request to the respective service based on the api_type value we get from the URL. &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns used ===&lt;br /&gt;
# The REST API Client '''/backend/app/services/github_query/github_rest/client.py''' is a Singleton since we only needed a single instance of github object from the pyGithub library throughout the lifecycle of the application&lt;br /&gt;
&lt;br /&gt;
# The '''paginate_and_format_comments''' method declared in the '''github_rest_services.py''' is a very well thought and formulated method for performing pagination and transforming and formatting the REST api output like graphQL output. It uses the dependency inversion principle i.e. it has a single responsibility of performing the task based on the given parameters, it doesn't hold any special processing logic of its own which makes it very scalable.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
As of now, testing was performed manually as there was a dependency on Github Rest API and the output would vary for each input and all the routes are protected.&lt;br /&gt;
&lt;br /&gt;
== Use of LLM ==&lt;br /&gt;
We used CoPilot extension integrated in VS Code editor for code autocompletion, explanation and debugging throughout the project. Generating the dockerfile, boiler plate and even main logic for the API services, all of them were carried out with the help of CoPilot which made the development experience extremely smooth and helped us stay productive.&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
'''Mentor'''&lt;br /&gt;
&lt;br /&gt;
* Jialin Cui &amp;lt;jcui9@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Members'''&lt;br /&gt;
&lt;br /&gt;
* Om Jain &amp;lt;opjain@ncsu.edu&amp;gt;&lt;br /&gt;
* Jash Gopani &amp;lt;jbgopani@ncsu.edu&amp;gt;&lt;br /&gt;
* Anshul Khairnar &amp;lt;akhairn@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=155549</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints-Design-Document</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=155549"/>
		<updated>2024-04-09T02:24:51Z</updated>

		<summary type="html">&lt;p&gt;Opjain: /* File Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Live Demo &amp;amp; Source Code=&lt;br /&gt;
[http://152.7.176.174:5000/ Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.ncsu.edu/opjain/GH_Miner Source Code]&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. Phase 2 of this project involves creating a frontend for this application using ReactJS. More details regarding the probable design of the frontend of the project is provided in the Frontend section in this page&lt;br /&gt;
&lt;br /&gt;
=System Architecture=&lt;br /&gt;
&lt;br /&gt;
Below is the system architecture of our project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:System Architecture GH-2401.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Our system follows the Model-View-Controller architecture.&lt;br /&gt;
Frontend is the View with which user will interact.&lt;br /&gt;
Once user invokes an endpoint, we get to the github_routes file which acts as the controller of the system, which find the appropriate route for the method from the graphql_services which is the model of the system. Once the relevant method is called, model returns the API response to the controller and then this response is finally sent to the view which is our frontend.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
Below is our planned layout, which is similar to the GitHub UI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub Image.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub image2.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
The user interface includes the following pages - &lt;br /&gt;
&lt;br /&gt;
* '''Login page''' - GitHub Oauth is used to authenticate users with GitHub. The user is asked to enter the GitHub username and will be redirected to GitHub for the required permissions to access the data. Once authenticated, the user will be redirected to the profile page.&lt;br /&gt;
&lt;br /&gt;
* '''Profile page''' - This page contains the user statistics - profile image, bio, number of followers, popular repositories, contribution data, etc. The user can view the statistics of each of the popular repos - number of forks, number of watchers, repository access status, etc. The contribution graph will give insights into the number of contributions on a particular day.&lt;br /&gt;
&lt;br /&gt;
* '''Repositories page''' - This page will list down all the repositories of an authenticated user.&lt;br /&gt;
&lt;br /&gt;
* '''Time-range contributions''' - This page will display the statistics of the required user within the desired period of time. The user has to provide the GitHub username, start date, and end date of the user.&lt;br /&gt;
&lt;br /&gt;
* '''Logout''' - This will log out the user from our application.&lt;br /&gt;
&lt;br /&gt;
= File Structure =&lt;br /&gt;
== '''Components''' ==&lt;br /&gt;
&lt;br /&gt;
* '''Card''': A versatile component designed to display information in a rectangular box format. It serves various purposes such as presenting statistics, repositories, and lists of items across multiple sections of the application.&lt;br /&gt;
&lt;br /&gt;
* '''SearchBox''': A Higher Order Component (HOC) tailored to accommodate relevant input fields and a submit button component. It facilitates search operations by allowing users to input parameters such as usernames, start dates, and end dates for filtering contributions data within a specified time range.&lt;br /&gt;
&lt;br /&gt;
* '''Navbar''': This component serves as the navigation bar, providing links to all sections/pages within the application. Utilizing react-router for state management, it enables seamless navigation between different sections/pages of the app.&lt;br /&gt;
&lt;br /&gt;
'''Pages'''&lt;br /&gt;
&lt;br /&gt;
* '''LoginPage''': Serving as the initial landing page, users are prompted to input their GitHub username via a simple text box. Upon clicking the Login button, users are redirected to GitHub for necessary permissions. Upon completion, users are directed to the dashboard.&lt;br /&gt;
&lt;br /&gt;
* '''Dashboard''': This page offers an overview of the user's profile statistics. It incorporates various components such as UserCard, GitHubCalendar, and Navbar to enhance user experience and accessibility.&lt;br /&gt;
&lt;br /&gt;
* '''RepositoryPage''': Here, users can view a comprehensive list of their repositories. Each repository is represented by a RepositoryComponent, providing detailed information and functionality for individual repositories within the list. &lt;br /&gt;
&lt;br /&gt;
'''Utils'''&lt;br /&gt;
&lt;br /&gt;
* '''AxiosInstance''': Utilizing the &amp;quot;axios&amp;quot; library, AxiosInstance is a dedicated file within the project aimed at creating and configuring an instance of axios for handling HTTP requests. This file establishes default headers, including authentication tokens and request types, along with a base URL. Adopting the singleton pattern, this single instance ensures consistency and efficiency throughout the project.&lt;br /&gt;
&lt;br /&gt;
* '''Constants''': To maintain consistency and minimize naming errors, the Constants file serves as a repository for frequently used terms within the project. By storing and exporting these terms, the code becomes standardized, promoting clarity and ease of maintenance.&lt;br /&gt;
&lt;br /&gt;
= Implementation Details and Use of LLM = &lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
Since there were two types of endpoints for each API, i.e. graphql and rest variant, we unified the endpoints to have the '''api_type''' as a dynamic parameter. Furthermore, we route the request to the respective service based on the api_type value we get from the URL. &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns used ===&lt;br /&gt;
# The REST API Client '''/backend/app/services/github_query/github_rest/client.py''' is a Singleton since we only needed a single instance of github object from the pyGithub library throughout the lifecycle of the application&lt;br /&gt;
&lt;br /&gt;
# The '''paginate_and_format_comments''' method declared in the '''github_rest_services.py''' is a very well thought and formulated method for performing pagination and transforming and formatting the REST api output like graphQL output. It uses the dependency inversion principle i.e. it has a single responsibility of performing the task based on the given parameters, it doesn't hold any special processing logic of its own which makes it very scalable.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
As of now, testing was performed manually as there was a dependency on Github Rest API and the output would vary for each input and all the routes are protected.&lt;br /&gt;
&lt;br /&gt;
== Use of LLM ==&lt;br /&gt;
We used CoPilot extension integrated in VS Code editor for code autocompletion, explanation and debugging throughout the project. Generating the dockerfile, boiler plate and even main logic for the API services, all of them were carried out with the help of CoPilot which made the development experience extremely smooth and helped us stay productive.&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
'''Mentor'''&lt;br /&gt;
&lt;br /&gt;
* Jialin Cui &amp;lt;jcui9@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Members'''&lt;br /&gt;
&lt;br /&gt;
* Om Jain &amp;lt;opjain@ncsu.edu&amp;gt;&lt;br /&gt;
* Jash Gopani &amp;lt;jbgopani@ncsu.edu&amp;gt;&lt;br /&gt;
* Anshul Khairnar &amp;lt;akhairn@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=155548</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints-Design-Document</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=155548"/>
		<updated>2024-04-09T02:24:06Z</updated>

		<summary type="html">&lt;p&gt;Opjain: /* File Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Live Demo &amp;amp; Source Code=&lt;br /&gt;
[http://152.7.176.174:5000/ Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.ncsu.edu/opjain/GH_Miner Source Code]&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. Phase 2 of this project involves creating a frontend for this application using ReactJS. More details regarding the probable design of the frontend of the project is provided in the Frontend section in this page&lt;br /&gt;
&lt;br /&gt;
=System Architecture=&lt;br /&gt;
&lt;br /&gt;
Below is the system architecture of our project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:System Architecture GH-2401.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Our system follows the Model-View-Controller architecture.&lt;br /&gt;
Frontend is the View with which user will interact.&lt;br /&gt;
Once user invokes an endpoint, we get to the github_routes file which acts as the controller of the system, which find the appropriate route for the method from the graphql_services which is the model of the system. Once the relevant method is called, model returns the API response to the controller and then this response is finally sent to the view which is our frontend.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
Below is our planned layout, which is similar to the GitHub UI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub Image.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub image2.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
The user interface includes the following pages - &lt;br /&gt;
&lt;br /&gt;
* '''Login page''' - GitHub Oauth is used to authenticate users with GitHub. The user is asked to enter the GitHub username and will be redirected to GitHub for the required permissions to access the data. Once authenticated, the user will be redirected to the profile page.&lt;br /&gt;
&lt;br /&gt;
* '''Profile page''' - This page contains the user statistics - profile image, bio, number of followers, popular repositories, contribution data, etc. The user can view the statistics of each of the popular repos - number of forks, number of watchers, repository access status, etc. The contribution graph will give insights into the number of contributions on a particular day.&lt;br /&gt;
&lt;br /&gt;
* '''Repositories page''' - This page will list down all the repositories of an authenticated user.&lt;br /&gt;
&lt;br /&gt;
* '''Time-range contributions''' - This page will display the statistics of the required user within the desired period of time. The user has to provide the GitHub username, start date, and end date of the user.&lt;br /&gt;
&lt;br /&gt;
* '''Logout''' - This will log out the user from our application.&lt;br /&gt;
&lt;br /&gt;
= File Structure =&lt;br /&gt;
'''Components'''&lt;br /&gt;
&lt;br /&gt;
* '''Card''': A versatile component designed to display information in a rectangular box format. It serves various purposes such as presenting statistics, repositories, and lists of items across multiple sections of the application.&lt;br /&gt;
&lt;br /&gt;
* '''SearchBox''': A Higher Order Component (HOC) tailored to accommodate relevant input fields and a submit button component. It facilitates search operations by allowing users to input parameters such as usernames, start dates, and end dates for filtering contributions data within a specified time range.&lt;br /&gt;
&lt;br /&gt;
* '''Navbar''': This component serves as the navigation bar, providing links to all sections/pages within the application. Utilizing react-router for state management, it enables seamless navigation between different sections/pages of the app.&lt;br /&gt;
&lt;br /&gt;
'''Pages'''&lt;br /&gt;
&lt;br /&gt;
* '''LoginPage''': Serving as the initial landing page, users are prompted to input their GitHub username via a simple text box. Upon clicking the Login button, users are redirected to GitHub for necessary permissions. Upon completion, users are directed to the dashboard.&lt;br /&gt;
&lt;br /&gt;
* '''Dashboard''': This page offers an overview of the user's profile statistics. It incorporates various components such as UserCard, GitHubCalendar, and Navbar to enhance user experience and accessibility.&lt;br /&gt;
&lt;br /&gt;
* '''RepositoryPage''': Here, users can view a comprehensive list of their repositories. Each repository is represented by a RepositoryComponent, providing detailed information and functionality for individual repositories within the list. &lt;br /&gt;
&lt;br /&gt;
'''Utils'''&lt;br /&gt;
&lt;br /&gt;
* '''AxiosInstance''': Utilizing the &amp;quot;axios&amp;quot; library, AxiosInstance is a dedicated file within the project aimed at creating and configuring an instance of axios for handling HTTP requests. This file establishes default headers, including authentication tokens and request types, along with a base URL. Adopting the singleton pattern, this single instance ensures consistency and efficiency throughout the project.&lt;br /&gt;
&lt;br /&gt;
* '''Constants''': To maintain consistency and minimize naming errors, the Constants file serves as a repository for frequently used terms within the project. By storing and exporting these terms, the code becomes standardized, promoting clarity and ease of maintenance.&lt;br /&gt;
&lt;br /&gt;
= Implementation Details and Use of LLM = &lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
Since there were two types of endpoints for each API, i.e. graphql and rest variant, we unified the endpoints to have the '''api_type''' as a dynamic parameter. Furthermore, we route the request to the respective service based on the api_type value we get from the URL. &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns used ===&lt;br /&gt;
# The REST API Client '''/backend/app/services/github_query/github_rest/client.py''' is a Singleton since we only needed a single instance of github object from the pyGithub library throughout the lifecycle of the application&lt;br /&gt;
&lt;br /&gt;
# The '''paginate_and_format_comments''' method declared in the '''github_rest_services.py''' is a very well thought and formulated method for performing pagination and transforming and formatting the REST api output like graphQL output. It uses the dependency inversion principle i.e. it has a single responsibility of performing the task based on the given parameters, it doesn't hold any special processing logic of its own which makes it very scalable.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
As of now, testing was performed manually as there was a dependency on Github Rest API and the output would vary for each input and all the routes are protected.&lt;br /&gt;
&lt;br /&gt;
== Use of LLM ==&lt;br /&gt;
We used CoPilot extension integrated in VS Code editor for code autocompletion, explanation and debugging throughout the project. Generating the dockerfile, boiler plate and even main logic for the API services, all of them were carried out with the help of CoPilot which made the development experience extremely smooth and helped us stay productive.&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
'''Mentor'''&lt;br /&gt;
&lt;br /&gt;
* Jialin Cui &amp;lt;jcui9@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Members'''&lt;br /&gt;
&lt;br /&gt;
* Om Jain &amp;lt;opjain@ncsu.edu&amp;gt;&lt;br /&gt;
* Jash Gopani &amp;lt;jbgopani@ncsu.edu&amp;gt;&lt;br /&gt;
* Anshul Khairnar &amp;lt;akhairn@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=155546</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints-Design-Document</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=155546"/>
		<updated>2024-04-09T02:23:43Z</updated>

		<summary type="html">&lt;p&gt;Opjain: /* File Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Live Demo &amp;amp; Source Code=&lt;br /&gt;
[http://152.7.176.174:5000/ Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.ncsu.edu/opjain/GH_Miner Source Code]&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. Phase 2 of this project involves creating a frontend for this application using ReactJS. More details regarding the probable design of the frontend of the project is provided in the Frontend section in this page&lt;br /&gt;
&lt;br /&gt;
=System Architecture=&lt;br /&gt;
&lt;br /&gt;
Below is the system architecture of our project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:System Architecture GH-2401.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Our system follows the Model-View-Controller architecture.&lt;br /&gt;
Frontend is the View with which user will interact.&lt;br /&gt;
Once user invokes an endpoint, we get to the github_routes file which acts as the controller of the system, which find the appropriate route for the method from the graphql_services which is the model of the system. Once the relevant method is called, model returns the API response to the controller and then this response is finally sent to the view which is our frontend.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
Below is our planned layout, which is similar to the GitHub UI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub Image.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub image2.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
The user interface includes the following pages - &lt;br /&gt;
&lt;br /&gt;
* '''Login page''' - GitHub Oauth is used to authenticate users with GitHub. The user is asked to enter the GitHub username and will be redirected to GitHub for the required permissions to access the data. Once authenticated, the user will be redirected to the profile page.&lt;br /&gt;
&lt;br /&gt;
* '''Profile page''' - This page contains the user statistics - profile image, bio, number of followers, popular repositories, contribution data, etc. The user can view the statistics of each of the popular repos - number of forks, number of watchers, repository access status, etc. The contribution graph will give insights into the number of contributions on a particular day.&lt;br /&gt;
&lt;br /&gt;
* '''Repositories page''' - This page will list down all the repositories of an authenticated user.&lt;br /&gt;
&lt;br /&gt;
* '''Time-range contributions''' - This page will display the statistics of the required user within the desired period of time. The user has to provide the GitHub username, start date, and end date of the user.&lt;br /&gt;
&lt;br /&gt;
* '''Logout''' - This will log out the user from our application.&lt;br /&gt;
&lt;br /&gt;
= File Structure =&lt;br /&gt;
'''Components'''&lt;br /&gt;
&lt;br /&gt;
* '''Card''': A versatile component designed to display information in a rectangular box format. It serves various purposes such as presenting statistics, repositories, and lists of items across multiple sections of the application.&lt;br /&gt;
&lt;br /&gt;
* '''SearchBox''': A Higher Order Component (HOC) tailored to accommodate relevant input fields and a submit button component. It facilitates search operations by allowing users to input parameters such as usernames, start dates, and end dates for filtering contributions data within a specified time range.&lt;br /&gt;
&lt;br /&gt;
* '''Navbar''': This component serves as the navigation bar, providing links to all sections/pages within the application. Utilizing react-router for state management, it enables seamless navigation between different sections/pages of the app.&lt;br /&gt;
&lt;br /&gt;
'''Pages'''&lt;br /&gt;
&lt;br /&gt;
* LoginPage: Serving as the initial landing page, users are prompted to input their GitHub username via a simple text box. Upon clicking the Login button, users are redirected to GitHub for necessary permissions. Upon completion, users are directed to the dashboard.&lt;br /&gt;
&lt;br /&gt;
* Dashboard: This page offers an overview of the user's profile statistics. It incorporates various components such as UserCard, GitHubCalendar, and Navbar to enhance user experience and accessibility.&lt;br /&gt;
&lt;br /&gt;
* RepositoryPage: Here, users can view a comprehensive list of their repositories. Each repository is represented by a RepositoryComponent, providing detailed information and functionality for individual repositories within the list. &lt;br /&gt;
&lt;br /&gt;
'''Utils'''&lt;br /&gt;
&lt;br /&gt;
* AxiosInstance: Utilizing the &amp;quot;axios&amp;quot; library, AxiosInstance is a dedicated file within the project aimed at creating and configuring an instance of axios for handling HTTP requests. This file establishes default headers, including authentication tokens and request types, along with a base URL. Adopting the singleton pattern, this single instance ensures consistency and efficiency throughout the project.&lt;br /&gt;
&lt;br /&gt;
* Constants: To maintain consistency and minimize naming errors, the Constants file serves as a repository for frequently used terms within the project. By storing and exporting these terms, the code becomes standardized, promoting clarity and ease of maintenance.&lt;br /&gt;
&lt;br /&gt;
= Implementation Details and Use of LLM = &lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
Since there were two types of endpoints for each API, i.e. graphql and rest variant, we unified the endpoints to have the '''api_type''' as a dynamic parameter. Furthermore, we route the request to the respective service based on the api_type value we get from the URL. &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns used ===&lt;br /&gt;
# The REST API Client '''/backend/app/services/github_query/github_rest/client.py''' is a Singleton since we only needed a single instance of github object from the pyGithub library throughout the lifecycle of the application&lt;br /&gt;
&lt;br /&gt;
# The '''paginate_and_format_comments''' method declared in the '''github_rest_services.py''' is a very well thought and formulated method for performing pagination and transforming and formatting the REST api output like graphQL output. It uses the dependency inversion principle i.e. it has a single responsibility of performing the task based on the given parameters, it doesn't hold any special processing logic of its own which makes it very scalable.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
As of now, testing was performed manually as there was a dependency on Github Rest API and the output would vary for each input and all the routes are protected.&lt;br /&gt;
&lt;br /&gt;
== Use of LLM ==&lt;br /&gt;
We used CoPilot extension integrated in VS Code editor for code autocompletion, explanation and debugging throughout the project. Generating the dockerfile, boiler plate and even main logic for the API services, all of them were carried out with the help of CoPilot which made the development experience extremely smooth and helped us stay productive.&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
'''Mentor'''&lt;br /&gt;
&lt;br /&gt;
* Jialin Cui &amp;lt;jcui9@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Members'''&lt;br /&gt;
&lt;br /&gt;
* Om Jain &amp;lt;opjain@ncsu.edu&amp;gt;&lt;br /&gt;
* Jash Gopani &amp;lt;jbgopani@ncsu.edu&amp;gt;&lt;br /&gt;
* Anshul Khairnar &amp;lt;akhairn@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=155541</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints-Design-Document</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=155541"/>
		<updated>2024-04-09T02:22:05Z</updated>

		<summary type="html">&lt;p&gt;Opjain: /* File Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Live Demo &amp;amp; Source Code=&lt;br /&gt;
[http://152.7.176.174:5000/ Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.ncsu.edu/opjain/GH_Miner Source Code]&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. Phase 2 of this project involves creating a frontend for this application using ReactJS. More details regarding the probable design of the frontend of the project is provided in the Frontend section in this page&lt;br /&gt;
&lt;br /&gt;
=System Architecture=&lt;br /&gt;
&lt;br /&gt;
Below is the system architecture of our project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:System Architecture GH-2401.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Our system follows the Model-View-Controller architecture.&lt;br /&gt;
Frontend is the View with which user will interact.&lt;br /&gt;
Once user invokes an endpoint, we get to the github_routes file which acts as the controller of the system, which find the appropriate route for the method from the graphql_services which is the model of the system. Once the relevant method is called, model returns the API response to the controller and then this response is finally sent to the view which is our frontend.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
Below is our planned layout, which is similar to the GitHub UI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub Image.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub image2.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
The user interface includes the following pages - &lt;br /&gt;
&lt;br /&gt;
* '''Login page''' - GitHub Oauth is used to authenticate users with GitHub. The user is asked to enter the GitHub username and will be redirected to GitHub for the required permissions to access the data. Once authenticated, the user will be redirected to the profile page.&lt;br /&gt;
&lt;br /&gt;
* '''Profile page''' - This page contains the user statistics - profile image, bio, number of followers, popular repositories, contribution data, etc. The user can view the statistics of each of the popular repos - number of forks, number of watchers, repository access status, etc. The contribution graph will give insights into the number of contributions on a particular day.&lt;br /&gt;
&lt;br /&gt;
* '''Repositories page''' - This page will list down all the repositories of an authenticated user.&lt;br /&gt;
&lt;br /&gt;
* '''Time-range contributions''' - This page will display the statistics of the required user within the desired period of time. The user has to provide the GitHub username, start date, and end date of the user.&lt;br /&gt;
&lt;br /&gt;
* '''Logout''' - This will log out the user from our application.&lt;br /&gt;
&lt;br /&gt;
= File Structure =&lt;br /&gt;
'''Components'''&lt;br /&gt;
&lt;br /&gt;
* Card: A versatile component designed to display information in a rectangular box format. It serves various purposes such as presenting statistics, repositories, and lists of items across multiple sections of the application.&lt;br /&gt;
&lt;br /&gt;
* SearchBox: A Higher Order Component (HOC) tailored to accommodate relevant input fields and a submit button component. It facilitates search operations by allowing users to input parameters such as usernames, start dates, and end dates for filtering contributions data within a specified time range.&lt;br /&gt;
&lt;br /&gt;
* Navbar: This component serves as the navigation bar, providing links to all sections/pages within the application. Utilizing react-router for state management, it enables seamless navigation between different sections/pages of the app.&lt;br /&gt;
&lt;br /&gt;
'''Pages'''&lt;br /&gt;
&lt;br /&gt;
* LoginPage: Serving as the initial landing page, users are prompted to input their GitHub username via a simple text box. Upon clicking the Login button, users are redirected to GitHub for necessary permissions. Upon completion, users are directed to the dashboard.&lt;br /&gt;
&lt;br /&gt;
* Dashboard: This page offers an overview of the user's profile statistics. It incorporates various components such as UserCard, GitHubCalendar, and Navbar to enhance user experience and accessibility.&lt;br /&gt;
&lt;br /&gt;
* RepositoryPage: Here, users can view a comprehensive list of their repositories. Each repository is represented by a RepositoryComponent, providing detailed information and functionality for individual repositories within the list. &lt;br /&gt;
&lt;br /&gt;
'''Utils'''&lt;br /&gt;
&lt;br /&gt;
* AxiosInstance: Utilizing the &amp;quot;axios&amp;quot; library, AxiosInstance is a dedicated file within the project aimed at creating and configuring an instance of axios for handling HTTP requests. This file establishes default headers, including authentication tokens and request types, along with a base URL. Adopting the singleton pattern, this single instance ensures consistency and efficiency throughout the project.&lt;br /&gt;
&lt;br /&gt;
* Constants: To maintain consistency and minimize naming errors, the Constants file serves as a repository for frequently used terms within the project. By storing and exporting these terms, the code becomes standardized, promoting clarity and ease of maintenance.&lt;br /&gt;
&lt;br /&gt;
= Implementation Details and Use of LLM = &lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
Since there were two types of endpoints for each API, i.e. graphql and rest variant, we unified the endpoints to have the '''api_type''' as a dynamic parameter. Furthermore, we route the request to the respective service based on the api_type value we get from the URL. &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns used ===&lt;br /&gt;
# The REST API Client '''/backend/app/services/github_query/github_rest/client.py''' is a Singleton since we only needed a single instance of github object from the pyGithub library throughout the lifecycle of the application&lt;br /&gt;
&lt;br /&gt;
# The '''paginate_and_format_comments''' method declared in the '''github_rest_services.py''' is a very well thought and formulated method for performing pagination and transforming and formatting the REST api output like graphQL output. It uses the dependency inversion principle i.e. it has a single responsibility of performing the task based on the given parameters, it doesn't hold any special processing logic of its own which makes it very scalable.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
As of now, testing was performed manually as there was a dependency on Github Rest API and the output would vary for each input and all the routes are protected.&lt;br /&gt;
&lt;br /&gt;
== Use of LLM ==&lt;br /&gt;
We used CoPilot extension integrated in VS Code editor for code autocompletion, explanation and debugging throughout the project. Generating the dockerfile, boiler plate and even main logic for the API services, all of them were carried out with the help of CoPilot which made the development experience extremely smooth and helped us stay productive.&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
'''Mentor'''&lt;br /&gt;
&lt;br /&gt;
* Jialin Cui &amp;lt;jcui9@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Members'''&lt;br /&gt;
&lt;br /&gt;
* Om Jain &amp;lt;opjain@ncsu.edu&amp;gt;&lt;br /&gt;
* Jash Gopani &amp;lt;jbgopani@ncsu.edu&amp;gt;&lt;br /&gt;
* Anshul Khairnar &amp;lt;akhairn@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=155537</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints-Design-Document</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints-Design-Document&amp;diff=155537"/>
		<updated>2024-04-09T02:21:22Z</updated>

		<summary type="html">&lt;p&gt;Opjain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Live Demo &amp;amp; Source Code=&lt;br /&gt;
[http://152.7.176.174:5000/ Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.ncsu.edu/opjain/GH_Miner Source Code]&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. Phase 2 of this project involves creating a frontend for this application using ReactJS. More details regarding the probable design of the frontend of the project is provided in the Frontend section in this page&lt;br /&gt;
&lt;br /&gt;
=System Architecture=&lt;br /&gt;
&lt;br /&gt;
Below is the system architecture of our project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:System Architecture GH-2401.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Our system follows the Model-View-Controller architecture.&lt;br /&gt;
Frontend is the View with which user will interact.&lt;br /&gt;
Once user invokes an endpoint, we get to the github_routes file which acts as the controller of the system, which find the appropriate route for the method from the graphql_services which is the model of the system. Once the relevant method is called, model returns the API response to the controller and then this response is finally sent to the view which is our frontend.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
Below is our planned layout, which is similar to the GitHub UI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub Image.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub image2.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
The user interface includes the following pages - &lt;br /&gt;
&lt;br /&gt;
* '''Login page''' - GitHub Oauth is used to authenticate users with GitHub. The user is asked to enter the GitHub username and will be redirected to GitHub for the required permissions to access the data. Once authenticated, the user will be redirected to the profile page.&lt;br /&gt;
&lt;br /&gt;
* '''Profile page''' - This page contains the user statistics - profile image, bio, number of followers, popular repositories, contribution data, etc. The user can view the statistics of each of the popular repos - number of forks, number of watchers, repository access status, etc. The contribution graph will give insights into the number of contributions on a particular day.&lt;br /&gt;
&lt;br /&gt;
* '''Repositories page''' - This page will list down all the repositories of an authenticated user.&lt;br /&gt;
&lt;br /&gt;
* '''Time-range contributions''' - This page will display the statistics of the required user within the desired period of time. The user has to provide the GitHub username, start date, and end date of the user.&lt;br /&gt;
&lt;br /&gt;
* '''Logout''' - This will log out the user from our application.&lt;br /&gt;
&lt;br /&gt;
= File Structure =&lt;br /&gt;
Components:&lt;br /&gt;
&lt;br /&gt;
* Card: A versatile component designed to display information in a rectangular box format. It serves various purposes such as presenting statistics, repositories, and lists of items across multiple sections of the application.&lt;br /&gt;
&lt;br /&gt;
* SearchBox: A Higher Order Component (HOC) tailored to accommodate relevant input fields and a submit button component. It facilitates search operations by allowing users to input parameters such as usernames, start dates, and end dates for filtering contributions data within a specified time range.&lt;br /&gt;
&lt;br /&gt;
* Navbar: This component serves as the navigation bar, providing links to all sections/pages within the application. Utilizing react-router for state management, it enables seamless navigation between different sections/pages of the app.&lt;br /&gt;
&lt;br /&gt;
Pages:&lt;br /&gt;
&lt;br /&gt;
* LoginPage: Serving as the initial landing page, users are prompted to input their GitHub username via a simple text box. Upon clicking the Login button, users are redirected to GitHub for necessary permissions. Upon completion, users are directed to the dashboard.&lt;br /&gt;
&lt;br /&gt;
* Dashboard: This page offers an overview of the user's profile statistics. It incorporates various components such as UserCard, GitHubCalendar, and Navbar to enhance user experience and accessibility.&lt;br /&gt;
&lt;br /&gt;
* RepositoryPage: Here, users can view a comprehensive list of their repositories. Each repository is represented by a RepositoryComponent, providing detailed information and functionality for individual repositories within the list. &lt;br /&gt;
&lt;br /&gt;
Utils:&lt;br /&gt;
&lt;br /&gt;
* AxiosInstance: Utilizing the &amp;quot;axios&amp;quot; library, AxiosInstance is a dedicated file within the project aimed at creating and configuring an instance of axios for handling HTTP requests. This file establishes default headers, including authentication tokens and request types, along with a base URL. Adopting the singleton pattern, this single instance ensures consistency and efficiency throughout the project.&lt;br /&gt;
&lt;br /&gt;
* Constants: To maintain consistency and minimize naming errors, the Constants file serves as a repository for frequently used terms within the project. By storing and exporting these terms, the code becomes standardized, promoting clarity and ease of maintenance.&lt;br /&gt;
&lt;br /&gt;
= Implementation Details and Use of LLM = &lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
Since there were two types of endpoints for each API, i.e. graphql and rest variant, we unified the endpoints to have the '''api_type''' as a dynamic parameter. Furthermore, we route the request to the respective service based on the api_type value we get from the URL. &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns used ===&lt;br /&gt;
# The REST API Client '''/backend/app/services/github_query/github_rest/client.py''' is a Singleton since we only needed a single instance of github object from the pyGithub library throughout the lifecycle of the application&lt;br /&gt;
&lt;br /&gt;
# The '''paginate_and_format_comments''' method declared in the '''github_rest_services.py''' is a very well thought and formulated method for performing pagination and transforming and formatting the REST api output like graphQL output. It uses the dependency inversion principle i.e. it has a single responsibility of performing the task based on the given parameters, it doesn't hold any special processing logic of its own which makes it very scalable.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
As of now, testing was performed manually as there was a dependency on Github Rest API and the output would vary for each input and all the routes are protected.&lt;br /&gt;
&lt;br /&gt;
== Use of LLM ==&lt;br /&gt;
We used CoPilot extension integrated in VS Code editor for code autocompletion, explanation and debugging throughout the project. Generating the dockerfile, boiler plate and even main logic for the API services, all of them were carried out with the help of CoPilot which made the development experience extremely smooth and helped us stay productive.&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
'''Mentor'''&lt;br /&gt;
&lt;br /&gt;
* Jialin Cui &amp;lt;jcui9@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Members'''&lt;br /&gt;
&lt;br /&gt;
* Om Jain &amp;lt;opjain@ncsu.edu&amp;gt;&lt;br /&gt;
* Jash Gopani &amp;lt;jbgopani@ncsu.edu&amp;gt;&lt;br /&gt;
* Anshul Khairnar &amp;lt;akhairn@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints&amp;diff=154827</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints&amp;diff=154827"/>
		<updated>2024-04-06T20:57:59Z</updated>

		<summary type="html">&lt;p&gt;Opjain: /* Frontend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Live Demo &amp;amp; Source Code=&lt;br /&gt;
[http://152.7.176.174:5000/ Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.ncsu.edu/opjain/GH_Miner Source Code]&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. &lt;br /&gt;
&lt;br /&gt;
=Setup=&lt;br /&gt;
&lt;br /&gt;
== Software Requirements ==&lt;br /&gt;
* Python 3.9 or above&lt;br /&gt;
* Git&lt;br /&gt;
* VSCode&lt;br /&gt;
* formatter plugin (autopep8)&lt;br /&gt;
* Docker&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
* Clone the project repository &amp;quot;https://github.ncsu.edu/opjain/GH_Miner&amp;quot;&lt;br /&gt;
* Add your github client secret and client id in a .env file in the backend folder&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
GITHUB_OAUTH_CLIENT_ID=&amp;lt;your client id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GITHUB_OAUTH_CLIENT_SECRET=&amp;lt;your client secret&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SECRET_KEY=&amp;lt;any string but empty not allowed&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MYSQL_DATABASE_PASSWORD=&amp;lt;your password&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Open the project folder and build the docker image using the following command&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
docker build -t gh_miner .&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* To run the docker image &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
docker run -p 5000:5000 gh_miner&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
The &amp;quot;-p 5000:5000&amp;quot; is for port forwarding the 5000 port. You can also use &amp;quot;-d&amp;quot; argument in the command to run the image in background&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''Optionally'''&amp;lt;/big&amp;gt;, if you want to run without docker, you can follow the below steps&lt;br /&gt;
* Open up terminal in the project folder &amp;quot;GH_Miner&amp;quot;&lt;br /&gt;
* Create a python virtual environment and activate it&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
python -m venv venv&lt;br /&gt;
&lt;br /&gt;
# If you're on windows&lt;br /&gt;
.\venv\Scripts\Activate&lt;br /&gt;
&lt;br /&gt;
# If you're on linux / Mac&lt;br /&gt;
source ./venv/bin/activate&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Install all the dependencies&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Run the backend flask app&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
python -m backend.run&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=System Architecture=&lt;br /&gt;
&lt;br /&gt;
Below is the system architecture of our project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:System Architecture GH-2401.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
Our system follows the Model-View-Controller architecture.&lt;br /&gt;
Frontend is the View with which user will interact.&lt;br /&gt;
Once user invokes an endpoint, we get to the github_routes file which acts as the controller of the system, which find the appropriate route for the method from the graphql_services which is the model of the system. Once the relevant method is called, model returns the API response to the controller and then this response is finally sent to the view which is our frontend.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
Below is our planned layout, which is similar to the GitHub UI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub Image.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:GitHub image2.jpeg|900px|Image : 900 pixels]]&lt;br /&gt;
&lt;br /&gt;
The user interface includes the following pages - &lt;br /&gt;
&lt;br /&gt;
* '''Login page''' - GitHub Oauth is used to authenticate users with GitHub. The user is asked to enter the GitHub username and will be redirected to GitHub for the required permissions to access the data. Once authenticated, the user will be redirected to the profile page.&lt;br /&gt;
&lt;br /&gt;
* '''Profile page''' - This page contains the user statistics - profile image, bio, number of followers, popular repositories, contribution data, etc. The user can view the statistics of each of the popular repos - number of forks, number of watchers, repository access status, etc. The contribution graph will give insights into the number of contributions on a particular day.&lt;br /&gt;
&lt;br /&gt;
* '''Repositories page''' - This page will list down all the repositories of an authenticated user.&lt;br /&gt;
&lt;br /&gt;
* '''Time-range contributions''' - This page will display the statistics of the required user within the desired period of time. The user has to provide the GitHub username, start date, and end date of the user.&lt;br /&gt;
&lt;br /&gt;
* '''Logout''' - This will log out the user from our application.&lt;br /&gt;
&lt;br /&gt;
=Endpoints=&lt;br /&gt;
Below are the endpoints implemented in the flask backend&lt;br /&gt;
&lt;br /&gt;
All the endpoints except the home and login are protected&lt;br /&gt;
&lt;br /&gt;
== Authentication ==&lt;br /&gt;
=== Login ===&lt;br /&gt;
'/auth/login'&lt;br /&gt;
&lt;br /&gt;
Visiting this endpoint will take the user to github login page, once authenticated the user will be redirected to '''/index''' page&lt;br /&gt;
&lt;br /&gt;
=== Logout ===&lt;br /&gt;
'/auth/logout'&lt;br /&gt;
&lt;br /&gt;
To terminate the current session, user can visit this endpoint&lt;br /&gt;
&lt;br /&gt;
==View Current User ==&lt;br /&gt;
The below endpoint returns the login name of the currently authenticated user&lt;br /&gt;
&lt;br /&gt;
'/api/graphql/current-user-login'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;viewer&amp;quot;: {&lt;br /&gt;
    &amp;quot;login&amp;quot;: &amp;quot;omjain2001&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
=== User Gists ===&lt;br /&gt;
This query returns the comments in gists of the authenticated user.&lt;br /&gt;
&lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-gist-comments/'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;user&amp;quot;: {&lt;br /&gt;
      &amp;quot;gistComments&amp;quot;: {&lt;br /&gt;
        &amp;quot;nodes&amp;quot;: [],&lt;br /&gt;
        &amp;quot;pageInfo&amp;quot;: {&lt;br /&gt;
          &amp;quot;endCursor&amp;quot;: null,&lt;br /&gt;
          &amp;quot;hasNextPage&amp;quot;: false&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;totalCount&amp;quot;: 0&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;login&amp;quot;: &amp;quot;omjain2001&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-gist-comments/'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;login&amp;quot;: &amp;quot;omjain2001&amp;quot;,&lt;br /&gt;
    &amp;quot;pageInfo&amp;quot;: {&lt;br /&gt;
      &amp;quot;hasNextPage&amp;quot;: false,&lt;br /&gt;
      &amp;quot;totalCount&amp;quot;: 0&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;user&amp;quot;: {&lt;br /&gt;
      &amp;quot;gistComments&amp;quot;: {&lt;br /&gt;
        &amp;quot;nodes&amp;quot;: []&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User Commits ===&lt;br /&gt;
This query returns the comments in all commits of the authenticated user.&lt;br /&gt;
&lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-commit-comments/'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;user&amp;quot;: {&lt;br /&gt;
      &amp;quot;commitComments&amp;quot;: {&lt;br /&gt;
        &amp;quot;nodes&amp;quot;: [],&lt;br /&gt;
        &amp;quot;pageInfo&amp;quot;: {&lt;br /&gt;
          &amp;quot;endCursor&amp;quot;: null,&lt;br /&gt;
          &amp;quot;hasNextPage&amp;quot;: false&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;totalCount&amp;quot;: 0&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;login&amp;quot;: &amp;quot;omjain2001&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-commit-comments/'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;login&amp;quot;: &amp;quot;omjain2001&amp;quot;,&lt;br /&gt;
    &amp;quot;pageInfo&amp;quot;: {&lt;br /&gt;
      &amp;quot;hasNextPage&amp;quot;: false,&lt;br /&gt;
      &amp;quot;totalCount&amp;quot;: 0&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;user&amp;quot;: {&lt;br /&gt;
      &amp;quot;commitComments&amp;quot;: {&lt;br /&gt;
        &amp;quot;nodes&amp;quot;: []&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User Issues ===&lt;br /&gt;
&lt;br /&gt;
This query returns the comments in issues and pull requests of all public repositories of the authenticated user.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-issue-comments'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;user&amp;quot;: {&lt;br /&gt;
      &amp;quot;issueComments&amp;quot;: {&lt;br /&gt;
        &amp;quot;nodes&amp;quot;: [],&lt;br /&gt;
        &amp;quot;pageInfo&amp;quot;: {&lt;br /&gt;
          &amp;quot;endCursor&amp;quot;: null,&lt;br /&gt;
          &amp;quot;hasNextPage&amp;quot;: false&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;totalCount&amp;quot;: 0&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;login&amp;quot;: &amp;quot;omjain2001&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====REST Endpoint ====&lt;br /&gt;
'/api/rest/user-issue-comments'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;login&amp;quot;: &amp;quot;omjain2001&amp;quot;,&lt;br /&gt;
    &amp;quot;pageInfo&amp;quot;: {&lt;br /&gt;
      &amp;quot;hasNextPage&amp;quot;: false,&lt;br /&gt;
      &amp;quot;totalCount&amp;quot;: 7&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;user&amp;quot;: {&lt;br /&gt;
      &amp;quot;issueComments&amp;quot;: {&lt;br /&gt;
        &amp;quot;nodes&amp;quot;: [&lt;br /&gt;
          {&lt;br /&gt;
            &amp;quot;created_at&amp;quot;: &amp;quot;2021-08-31T12:46:01Z&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            &amp;quot;created_at&amp;quot;: &amp;quot;2021-08-31T12:46:02Z&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            &amp;quot;created_at&amp;quot;: &amp;quot;2021-08-31T13:38:09Z&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contributions ==&lt;br /&gt;
&lt;br /&gt;
=== User Gists ===&lt;br /&gt;
This query returns the gists of the authenticated user.&lt;br /&gt;
&lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-gists/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-gists/&amp;lt;username&amp;gt;'&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;comments&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;comments_url&amp;quot;: &amp;quot;https://api.github.com/gists/c3432f34dc2917bd03aa5a0b2a7e0816/comments&amp;quot;,&lt;br /&gt;
    &amp;quot;commits_url&amp;quot;: &amp;quot;https://api.github.com/gists/c3432f34dc2917bd03aa5a0b2a7e0816/commits&amp;quot;,&lt;br /&gt;
    &amp;quot;created_at&amp;quot;: &amp;quot;2022-12-07T15:11:12Z&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Advent of Code (Day 6)&amp;quot;,&lt;br /&gt;
    &amp;quot;files&amp;quot;: {&lt;br /&gt;
      &amp;quot;main.go&amp;quot;: {&lt;br /&gt;
        &amp;quot;filename&amp;quot;: &amp;quot;main.go&amp;quot;,&lt;br /&gt;
        &amp;quot;language&amp;quot;: &amp;quot;Go&amp;quot;,&lt;br /&gt;
        &amp;quot;raw_url&amp;quot;: &amp;quot;https://gist.githubusercontent.com/kenoir/c3432f34dc2917bd03aa5a0b2a7e0816/raw/4e167f92cf844dfadf95d9a7aa4ab596d102b3af/main.go&amp;quot;,&lt;br /&gt;
        &amp;quot;size&amp;quot;: 1251,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;text/plain&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
.......&lt;br /&gt;
]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== User Issues ===&lt;br /&gt;
&lt;br /&gt;
This query returns the issues of the authenticated user.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-issues/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;createdAt&amp;quot;: &amp;quot;2019-09-07T11:39:21Z&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;createdAt&amp;quot;: &amp;quot;2020-06-08T12:25:17Z&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;createdAt&amp;quot;: &amp;quot;2020-06-12T12:05:17Z&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;createdAt&amp;quot;: &amp;quot;2020-06-23T08:13:02Z&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;createdAt&amp;quot;: &amp;quot;2020-06-28T10:27:58Z&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
]&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====REST Endpoint ====&lt;br /&gt;
'/api/rest/user-issues/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User Pull Requests ===&lt;br /&gt;
&lt;br /&gt;
This query returns the pull requests of the authenticated user. For the REST query, we can only fetch pull requests for a particular repository for the authenticated user.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-pull-requests/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-pull-requests/&amp;lt;username&amp;gt;/&amp;lt;repo&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User Repositories ===&lt;br /&gt;
&lt;br /&gt;
This query returns the repositories of the authenticated user.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-repositories/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-repositories/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;allow_forking&amp;quot;: true,&lt;br /&gt;
    &amp;quot;archive_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/{archive_format}{/ref}&amp;quot;,&lt;br /&gt;
    &amp;quot;archived&amp;quot;: false,&lt;br /&gt;
    &amp;quot;assignees_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/assignees{/user}&amp;quot;,&lt;br /&gt;
    &amp;quot;blobs_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/git/blobs{/sha}&amp;quot;,&lt;br /&gt;
    &amp;quot;branches_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/branches{/branch}&amp;quot;,&lt;br /&gt;
    &amp;quot;clone_url&amp;quot;: &amp;quot;https://github.com/omjain2001/Covid-19.git&amp;quot;,&lt;br /&gt;
    &amp;quot;collaborators_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/collaborators{/collaborator}&amp;quot;,&lt;br /&gt;
    &amp;quot;comments_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/comments{/number}&amp;quot;,&lt;br /&gt;
    &amp;quot;commits_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/commits{/sha}&amp;quot;,&lt;br /&gt;
    &amp;quot;compare_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/compare/{base}...{head}&amp;quot;,&lt;br /&gt;
    &amp;quot;contents_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/contents/{+path}&amp;quot;,&lt;br /&gt;
    &amp;quot;contributors_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/contributors&amp;quot;,&lt;br /&gt;
    &amp;quot;created_at&amp;quot;: &amp;quot;2020-05-08T16:12:28Z&amp;quot;,&lt;br /&gt;
    &amp;quot;default_branch&amp;quot;: &amp;quot;master&amp;quot;,&lt;br /&gt;
    &amp;quot;deployments_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/deployments&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Website For COVID-19&amp;quot;,&lt;br /&gt;
    &amp;quot;disabled&amp;quot;: false,&lt;br /&gt;
    &amp;quot;downloads_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/downloads&amp;quot;,&lt;br /&gt;
    &amp;quot;events_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/events&amp;quot;,&lt;br /&gt;
    &amp;quot;fork&amp;quot;: false,&lt;br /&gt;
    &amp;quot;forks&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;forks_count&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;forks_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/forks&amp;quot;,&lt;br /&gt;
    &amp;quot;full_name&amp;quot;: &amp;quot;omjain2001/Covid-19&amp;quot;,&lt;br /&gt;
    &amp;quot;git_commits_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/git/commits{/sha}&amp;quot;,&lt;br /&gt;
    &amp;quot;git_refs_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/git/refs{/sha}&amp;quot;,&lt;br /&gt;
    &amp;quot;git_tags_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/git/tags{/sha}&amp;quot;,&lt;br /&gt;
    &amp;quot;git_url&amp;quot;: &amp;quot;git://github.com/omjain2001/Covid-19.git&amp;quot;,&lt;br /&gt;
    &amp;quot;has_discussions&amp;quot;: false,&lt;br /&gt;
    &amp;quot;has_downloads&amp;quot;: true,&lt;br /&gt;
    &amp;quot;has_issues&amp;quot;: true,&lt;br /&gt;
    &amp;quot;has_pages&amp;quot;: true,&lt;br /&gt;
    &amp;quot;has_projects&amp;quot;: true,&lt;br /&gt;
    &amp;quot;has_wiki&amp;quot;: true,&lt;br /&gt;
    &amp;quot;homepage&amp;quot;: null,&lt;br /&gt;
    &amp;quot;hooks_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/hooks&amp;quot;,&lt;br /&gt;
    &amp;quot;html_url&amp;quot;: &amp;quot;https://github.com/omjain2001/Covid-19&amp;quot;,&lt;br /&gt;
    &amp;quot;id&amp;quot;: 262369559,&lt;br /&gt;
    &amp;quot;is_template&amp;quot;: false,&lt;br /&gt;
    &amp;quot;issue_comment_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/issues/comments{/number}&amp;quot;,&lt;br /&gt;
    &amp;quot;issue_events_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/issues/events{/number}&amp;quot;,&lt;br /&gt;
    &amp;quot;issues_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/issues{/number}&amp;quot;,&lt;br /&gt;
    &amp;quot;keys_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/keys{/key_id}&amp;quot;,&lt;br /&gt;
    &amp;quot;labels_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/labels{/name}&amp;quot;,&lt;br /&gt;
    &amp;quot;language&amp;quot;: &amp;quot;HTML&amp;quot;,&lt;br /&gt;
    &amp;quot;languages_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/languages&amp;quot;,&lt;br /&gt;
    &amp;quot;license&amp;quot;: null,&lt;br /&gt;
    &amp;quot;merges_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/merges&amp;quot;,&lt;br /&gt;
    &amp;quot;milestones_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/milestones{/number}&amp;quot;,&lt;br /&gt;
    &amp;quot;mirror_url&amp;quot;: null,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;Covid-19&amp;quot;,&lt;br /&gt;
    &amp;quot;node_id&amp;quot;: &amp;quot;MDEwOlJlcG9zaXRvcnkyNjIzNjk1NTk=&amp;quot;,&lt;br /&gt;
    &amp;quot;notifications_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/notifications{?since,all,participating}&amp;quot;,&lt;br /&gt;
    &amp;quot;open_issues&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;open_issues_count&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;owner&amp;quot;: {&lt;br /&gt;
      &amp;quot;avatar_url&amp;quot;: &amp;quot;https://avatars.githubusercontent.com/u/60605251?v=4&amp;quot;,&lt;br /&gt;
      &amp;quot;events_url&amp;quot;: &amp;quot;https://api.github.com/users/omjain2001/events{/privacy}&amp;quot;,&lt;br /&gt;
      &amp;quot;followers_url&amp;quot;: &amp;quot;https://api.github.com/users/omjain2001/followers&amp;quot;,&lt;br /&gt;
      &amp;quot;following_url&amp;quot;: &amp;quot;https://api.github.com/users/omjain2001/following{/other_user}&amp;quot;,&lt;br /&gt;
      &amp;quot;gists_url&amp;quot;: &amp;quot;https://api.github.com/users/omjain2001/gists{/gist_id}&amp;quot;,&lt;br /&gt;
      &amp;quot;gravatar_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;html_url&amp;quot;: &amp;quot;https://github.com/omjain2001&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: 60605251,&lt;br /&gt;
      &amp;quot;login&amp;quot;: &amp;quot;omjain2001&amp;quot;,&lt;br /&gt;
      &amp;quot;node_id&amp;quot;: &amp;quot;MDQ6VXNlcjYwNjA1MjUx&amp;quot;,&lt;br /&gt;
      &amp;quot;organizations_url&amp;quot;: &amp;quot;https://api.github.com/users/omjain2001/orgs&amp;quot;,&lt;br /&gt;
      &amp;quot;received_events_url&amp;quot;: &amp;quot;https://api.github.com/users/omjain2001/received_events&amp;quot;,&lt;br /&gt;
      &amp;quot;repos_url&amp;quot;: &amp;quot;https://api.github.com/users/omjain2001/repos&amp;quot;,&lt;br /&gt;
      &amp;quot;site_admin&amp;quot;: false,&lt;br /&gt;
      &amp;quot;starred_url&amp;quot;: &amp;quot;https://api.github.com/users/omjain2001/starred{/owner}{/repo}&amp;quot;,&lt;br /&gt;
      &amp;quot;subscriptions_url&amp;quot;: &amp;quot;https://api.github.com/users/omjain2001/subscriptions&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;User&amp;quot;,&lt;br /&gt;
      &amp;quot;url&amp;quot;: &amp;quot;https://api.github.com/users/omjain2001&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;permissions&amp;quot;: {&lt;br /&gt;
      &amp;quot;admin&amp;quot;: true,&lt;br /&gt;
      &amp;quot;maintain&amp;quot;: true,&lt;br /&gt;
      &amp;quot;pull&amp;quot;: true,&lt;br /&gt;
      &amp;quot;push&amp;quot;: true,&lt;br /&gt;
      &amp;quot;triage&amp;quot;: true&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;private&amp;quot;: false,&lt;br /&gt;
    &amp;quot;pulls_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/pulls{/number}&amp;quot;,&lt;br /&gt;
    &amp;quot;pushed_at&amp;quot;: &amp;quot;2021-07-14T05:08:23Z&amp;quot;,&lt;br /&gt;
    &amp;quot;releases_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/releases{/id}&amp;quot;,&lt;br /&gt;
    &amp;quot;size&amp;quot;: 7759,&lt;br /&gt;
    &amp;quot;ssh_url&amp;quot;: &amp;quot;git@github.com:omjain2001/Covid-19.git&amp;quot;,&lt;br /&gt;
    &amp;quot;stargazers_count&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;stargazers_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/stargazers&amp;quot;,&lt;br /&gt;
    &amp;quot;statuses_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/statuses/{sha}&amp;quot;,&lt;br /&gt;
    &amp;quot;subscribers_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/subscribers&amp;quot;,&lt;br /&gt;
    &amp;quot;subscription_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/subscription&amp;quot;,&lt;br /&gt;
    &amp;quot;svn_url&amp;quot;: &amp;quot;https://github.com/omjain2001/Covid-19&amp;quot;,&lt;br /&gt;
    &amp;quot;tags_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/tags&amp;quot;,&lt;br /&gt;
    &amp;quot;teams_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/teams&amp;quot;,&lt;br /&gt;
    &amp;quot;topics&amp;quot;: [],&lt;br /&gt;
    &amp;quot;trees_url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19/git/trees{/sha}&amp;quot;,&lt;br /&gt;
    &amp;quot;updated_at&amp;quot;: &amp;quot;2021-07-15T06:33:18Z&amp;quot;,&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;https://api.github.com/repos/omjain2001/Covid-19&amp;quot;,&lt;br /&gt;
    &amp;quot;visibility&amp;quot;: &amp;quot;public&amp;quot;,&lt;br /&gt;
    &amp;quot;watchers&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;watchers_count&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;web_commit_signoff_required&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== User Repository Discussions ===&lt;br /&gt;
 &lt;br /&gt;
This query returns the repository discussions of the authenticated user. For the REST query, there is no REST query to fetch repository discussions, hence this endpoint does not return any results.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-repository-discussions/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
== Profiles ==&lt;br /&gt;
&lt;br /&gt;
This endpoint returns all the profile statistics (followers, gists, issues, pull requests, repositories, etc.) of the required user. The user must specify the username in this query.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-stats/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-stats/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;commit_comments&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;company&amp;quot;: &amp;quot;omjain2001&amp;quot;,&lt;br /&gt;
  &amp;quot;created_at&amp;quot;: &amp;quot;2020-02-03T10:55:04Z&amp;quot;,&lt;br /&gt;
  &amp;quot;followers&amp;quot;: 11,&lt;br /&gt;
  &amp;quot;following&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;gist_comments&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;gists&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;github&amp;quot;: &amp;quot;omjain2001&amp;quot;,&lt;br /&gt;
  &amp;quot;issue_comments&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;issues&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;projects&amp;quot;: 1,&lt;br /&gt;
  &amp;quot;pull_requests&amp;quot;: 8,&lt;br /&gt;
  &amp;quot;repositories&amp;quot;: 26,&lt;br /&gt;
  &amp;quot;starred_repositories&amp;quot;: 1,&lt;br /&gt;
  &amp;quot;watching&amp;quot;: 21&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Time Range Contributions ==&lt;br /&gt;
&lt;br /&gt;
This endpoint returns all the details of the user contributions within a specified duration. The user must specify the username, start date, and end date in this query.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-contributions/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;commit&amp;quot;: 37,&lt;br /&gt;
  &amp;quot;issue&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;pr&amp;quot;: 8,&lt;br /&gt;
  &amp;quot;pr_review&amp;quot;: 1,&lt;br /&gt;
  &amp;quot;repository&amp;quot;: 4,&lt;br /&gt;
  &amp;quot;res_con&amp;quot;: 0&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-contributions/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
'''Query Params'''&lt;br /&gt;
* start: DateTime (ISO 8601 format)&lt;br /&gt;
* end: DateTime (ISO 8601 format)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;commit&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;issue&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;pr&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;pr_review&amp;quot;: 6,&lt;br /&gt;
  &amp;quot;repository&amp;quot;: 30,&lt;br /&gt;
  &amp;quot;res_con&amp;quot;: 0&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Implementation Details and Use of LLM = &lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
Since there were two types of endpoints for each API, i.e. graphql and rest variant, we unified the endpoints to have the '''api_type''' as a dynamic parameter. Furthermore, we route the request to the respective service based on the api_type value we get from the URL. &lt;br /&gt;
&lt;br /&gt;
=== Design Patterns used ===&lt;br /&gt;
# The REST API Client '''/backend/app/services/github_query/github_rest/client.py''' is a Singleton since we only needed a single instance of github object from the pyGithub library throughout the lifecycle of the application&lt;br /&gt;
&lt;br /&gt;
# The '''paginate_and_format_comments''' method declared in the '''github_rest_services.py''' is a very well thought and formulated method for performing pagination and transforming and formatting the REST api output like graphQL output. It uses the dependency inversion principle i.e. it has a single responsibility of performing the task based on the given parameters, it doesn't hold any special processing logic of its own which makes it very scalable.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
As of now, testing was performed manually as there was a dependency on Github Rest API and the output would vary for each input. We might need to implement a mock service to unit test the endpoints automatically in the next phase.&lt;br /&gt;
&lt;br /&gt;
== Use of LLM ==&lt;br /&gt;
We used CoPilot extension integrated in VS Code editor for code autocompletion, explanation and debugging throughout the project. Generating the dockerfile, boiler plate and even main logic for the API services, all of them were carried out with the help of CoPilot which made the development experience extremely smooth and helped us stay productive.&lt;br /&gt;
&lt;br /&gt;
=Team=&lt;br /&gt;
&lt;br /&gt;
'''Mentor'''&lt;br /&gt;
&lt;br /&gt;
* Jialin Cui &amp;lt;jcui9@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Members'''&lt;br /&gt;
&lt;br /&gt;
* Om Jain &amp;lt;opjain@ncsu.edu&amp;gt;&lt;br /&gt;
* Jash Gopani &amp;lt;jbgopani@ncsu.edu&amp;gt;&lt;br /&gt;
* Anshul Khairnar &amp;lt;akhairn@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints&amp;diff=153990</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints&amp;diff=153990"/>
		<updated>2024-03-24T23:37:13Z</updated>

		<summary type="html">&lt;p&gt;Opjain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Live Demo=&lt;br /&gt;
[http://152.7.176.174:5000/ Link]&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. &lt;br /&gt;
&lt;br /&gt;
=Setup=&lt;br /&gt;
&lt;br /&gt;
== Software Requirements ==&lt;br /&gt;
* Python 3.9 or above&lt;br /&gt;
* Git&lt;br /&gt;
* VSCode&lt;br /&gt;
* formatter plugin (autopep8)&lt;br /&gt;
* Docker&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
* Clone the project repository &amp;quot;https://github.ncsu.edu/opjain/GH_Miner&amp;quot;&lt;br /&gt;
* Add your github client secret and client id in a .env file in the backend folder&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
GITHUB_OAUTH_CLIENT_ID=&amp;lt;your client id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GITHUB_OAUTH_CLIENT_SECRET=&amp;lt;your client secret&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SECRET_KEY=&amp;lt;any string but empty not allowed&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MYSQL_DATABASE_PASSWORD=&amp;lt;your password&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Open the project folder and build the docker image using the following command&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
docker build -t gh_miner .&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* To run the docker image &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
docker run -p 5000:5000 gh_miner&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
The &amp;quot;-p 5000:5000&amp;quot; is for port forwarding the 5000 port. You can also use &amp;quot;-d&amp;quot; argument in the command to run the image in background&lt;br /&gt;
&lt;br /&gt;
=Endpoints=&lt;br /&gt;
Below are the endpoints implemented in the flask backend&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
=== User Gists ===&lt;br /&gt;
This query returns the comments in gists of the authenticated user.&lt;br /&gt;
&lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-gist-comments/'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-gist-comments/'&lt;br /&gt;
&lt;br /&gt;
=== User Commits ===&lt;br /&gt;
This query returns the comments in all commits of the authenticated user.&lt;br /&gt;
&lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-commit-comments/'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-commit-comments/'&lt;br /&gt;
&lt;br /&gt;
=== User Issues ===&lt;br /&gt;
&lt;br /&gt;
This query returns the comments in issues and pull requests of all public repositories of the authenticated user.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-issue-comments'&lt;br /&gt;
&lt;br /&gt;
====REST Endpoint ====&lt;br /&gt;
'/api/rest/user-issue-comments'&lt;br /&gt;
&lt;br /&gt;
=== User Repository Discussions ===&lt;br /&gt;
 &lt;br /&gt;
This query returns the comments in the repository discussions of the authenticated user. For the REST query, there is no REST query to fetch repository discussions, hence this endpoint does not return any results.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-repository-discussions'&lt;br /&gt;
&lt;br /&gt;
== Contributions ==&lt;br /&gt;
&lt;br /&gt;
=== User Gists ===&lt;br /&gt;
This query returns the gists of the authenticated user.&lt;br /&gt;
&lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-gists/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-gists/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
=== User Issues ===&lt;br /&gt;
&lt;br /&gt;
This query returns the issues of the authenticated user.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-issues/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
====REST Endpoint ====&lt;br /&gt;
'/api/rest/user-issues/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User Pull Requests ===&lt;br /&gt;
&lt;br /&gt;
This query returns the pull requests of the authenticated user. For the REST query, we can only fetch pull requests for a particular repository for the authenticated user.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-pull-requests/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-pull-requests/&amp;lt;username&amp;gt;/&amp;lt;repo&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
=== User Repositories ===&lt;br /&gt;
&lt;br /&gt;
This query returns the repositories of the authenticated user.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-repositories/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-repositories/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
=== User Repository Discussions ===&lt;br /&gt;
 &lt;br /&gt;
This query returns the repository discussions of the authenticated user. For the REST query, there is no REST query to fetch repository discussions, hence this endpoint does not return any results.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-repository-discussions/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/repository-discussions/&amp;lt;username&amp;gt;/&amp;lt;repo&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
== Profiles ==&lt;br /&gt;
&lt;br /&gt;
This endpoint returns all the profile statistics (followers, gists, issues, pull requests, repositories, etc.) of the required user. The user must specify the username in this query.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-stats/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-stats/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
== Time Range Contributions ==&lt;br /&gt;
&lt;br /&gt;
This endpoint returns all the details of the user contributions within a specified duration. The user must specify the username, start date, and end date in this query.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-contributions/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-contributions/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
'''Query Params'''&lt;br /&gt;
* start: DateTime (ISO 8601 format)&lt;br /&gt;
* end: DateTime (ISO 8601 format)&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints&amp;diff=153965</id>
		<title>CSC/ECE 517-GH-2401-Rest-GraphQL-Endpoints</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517-GH-2401-Rest-GraphQL-Endpoints&amp;diff=153965"/>
		<updated>2024-03-24T23:26:01Z</updated>

		<summary type="html">&lt;p&gt;Opjain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=About=&lt;br /&gt;
The project involves developing API endpoints for GitHub GraphQL queries and GitHub REST queries and to integrate these endpoints into the Python Flask framework, enabling the publication of these queries as accessible API endpoints via URLs. We have implemented endpoints for 4 query elements: comment, contributions, profiles and time_range_contributions. Each element contains multiple queries and each query has a separate endpoints for both GraphQL and REST API implemented. &lt;br /&gt;
&lt;br /&gt;
=Setup=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Endpoints=&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User Gists ===&lt;br /&gt;
This query returns the comments in gists of the authenticated user.&lt;br /&gt;
&lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-gist-comments/'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-gist-comments/'&lt;br /&gt;
&lt;br /&gt;
=== User Commits ===&lt;br /&gt;
This query returns the comments in all commits of the authenticated user.&lt;br /&gt;
&lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-commit-comments/'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-commit-comments/'&lt;br /&gt;
&lt;br /&gt;
=== User Issues ===&lt;br /&gt;
&lt;br /&gt;
This query returns the comments in issues and pull requests of all public repositories of the authenticated user.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-issue-comments'&lt;br /&gt;
&lt;br /&gt;
====REST Endpoint ====&lt;br /&gt;
'/api/rest/user-issue-comments'&lt;br /&gt;
&lt;br /&gt;
=== User Repository Discussions ===&lt;br /&gt;
 &lt;br /&gt;
This query returns the comments in the repository discussions of the authenticated user. For the REST query, there is no REST query to fetch repository discussions, hence this endpoint does not return any results.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-repository-discussions'&lt;br /&gt;
&lt;br /&gt;
== Contributions ==&lt;br /&gt;
&lt;br /&gt;
=== User Gists ===&lt;br /&gt;
This query returns the gists of the authenticated user.&lt;br /&gt;
&lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-gists/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-gists/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
=== User Issues ===&lt;br /&gt;
&lt;br /&gt;
This query returns the issues of the authenticated user.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-issues/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
====REST Endpoint ====&lt;br /&gt;
'/api/rest/user-issues/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== User Pull Requests ===&lt;br /&gt;
&lt;br /&gt;
This query returns the pull requests of the authenticated user. For the REST query, we can only fetch pull requests for a particular repository for the authenticated user.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-pull-requests/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-pull-requests/&amp;lt;username&amp;gt;/&amp;lt;repo&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
=== User Repositories ===&lt;br /&gt;
&lt;br /&gt;
This query returns the repositories of the authenticated user.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-repositories/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-repositories/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
=== User Repository Discussions ===&lt;br /&gt;
 &lt;br /&gt;
This query returns the repository discussions of the authenticated user. For the REST query, there is no REST query to fetch repository discussions, hence this endpoint does not return any results.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-repository-discussions/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/repository-discussions/&amp;lt;username&amp;gt;/&amp;lt;repo&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
== Profiles ==&lt;br /&gt;
&lt;br /&gt;
This endpoint returns all the profile statistics (followers, gists, issues, pull requests, repositories, etc.) of the required user. The user must specify the username in this query.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-stats/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-stats/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
== Time Range Contributions ==&lt;br /&gt;
&lt;br /&gt;
This endpoint returns all the details of the user contributions within a specified duration. The user must specify the username, start date, and end date in this query.&lt;br /&gt;
 &lt;br /&gt;
==== GraphQL Endpoint ====&lt;br /&gt;
'/api/graphql/user-contributions/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
==== REST Endpoint ====&lt;br /&gt;
'/api/rest/user-contributions/&amp;lt;username&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Query Params&lt;br /&gt;
&lt;br /&gt;
start: DateTime (ISO 8601 format)&lt;br /&gt;
end: DateTime (ISO 8601 format)&lt;/div&gt;</summary>
		<author><name>Opjain</name></author>
	</entry>
</feed>