Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 4 additions & 84 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,89 +1,9 @@
# Academic Team Management

The `Academic Team Management` application is used to automate many of the facilities of managing a large class of multi-person groups and supports the following use cases:
The `Academic Team Management` application is used to automate many of the facilities of managing a large class of multi-person groups. Currently, it is being used by the SEG4910/4911 Software Engineering Capstone Course at the University of Ottawa. By automating essential processes, the system enhances collaboration and efficiency for `students`, `professors`, `TAs`, and `external clients`.

1. Creating lists of projects with a title, description, and other metadata
2. Importing lists of students from Excel
3. Enabling students to form teams, express interest in projects, express an interest in being matched with other students, etc...
4. Allowing the professor and TAs to communicate with students using chat
5. Allowing the professor and TAs to take notes about progress, presentations, etc...
6. Exporting the data to Excel sheets
7. Allowing the professor or TAs to input grades
This project is open-source.

The application is expected to be open-source and allow other professors from different educational institutions to adopt it as their project management system.
For more general information check the [wiki](https://github.com/umple/AcademicTeamManagement/wiki).

For more information check the [general](./docs/general/README.md) and [design](./docs/design/README.md) documents.

## Development

### Prerequisites
Make sure to have these technologies installed in your system

1. Docker
2. NodeJs
3. Python


### Building

#### Locally

For local development, try to build each service individually

```sh
# Build the database first
$ ./gradlew startMongo

# Build the server, make sure to add the password of the DB in the ./scripts/runBackendTests.sh file
$ ./gradlew runBackendLocally

# Build the frontend
$ ./gradlew runFrontendLocally

```

#### Production

For prod development, build using all the services using docker-compose
```sh
# To start the app
$ ./gradlew composeUp

# To stop the app
$ ./gradlew composeDown
```

### Testing

#### Backend Unit Tests

```sh
# Unit tests
$ ./gradlew runUnitTests
```

#### Frontend Unit Tests

```sh
# Unit tests
$ ./gradlew runReactUnitTests
```

#### End-To-End Tests

```sh
# E2E tests
$ ./gradlew runEndToEndTests

```

### Linting

You can lint the code locally.

```sh
$ ./gradlew runReactLint
```

### Deployment
See [DevOps](./docs/devops/README.md) section for more information
For a comprehensive guide to using the system, check the [onboarding guide](https://github.com/umple/AcademicTeamManagement/wiki/Onboarding).
95 changes: 38 additions & 57 deletions client/README.md
Original file line number Diff line number Diff line change
@@ -1,70 +1,51 @@
# Getting Started with Create React App
# Client - Academic Team Management

This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
This directory contains the frontend code for the **Academic Team Management** web application, built with **React**. The client side is responsible for providing a user-friendly interface for managing academic teams, students, and projects.

## Available Scripts
## Features

In the project directory, you can run:
- **Role-Based Access**: Secure navigation and functionality based on user roles (e.g., Student, Professor, Admin).
- **Dynamic Translations**: Supports English and French through i18n integration.
- **Responsive Design**: Optimized for desktop and mobile devices.
- **State Management**: Efficient state handling using React's `useState` and `useEffect`.

### `npm start`
## Structure Overview

Runs the app in the development mode.\
Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
- **Components**: Reusable UI elements like buttons, forms, and modals.
- **Pages**: Views that correspond to application routes (e.g., Dashboard, Student Groups, Projects).
- **Helpers**: Utility functions and quick scripts for handling specific tasks like session checks.
- **Services**: Comprehensive modules for API interaction and data fetching.
- **Styles**: CSS and styling configurations for maintaining a consistent design.

The page will reload when you make changes.\
You may also see any lint errors in the console.
## Key Files

### `npm test`
- **`App.js`**: Main application entry point, defines routing and layout.
- **`i18n.js`**: Handles app localization and translations.
- **`.env`**: Configuration file for environment variables (e.g., backend API URL).

Launches the test runner in the interactive watch mode.\
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
## Development Workflow

### `npm run build`
1. **Install Dependencies**:
```bash
npm install
```
2. **Run Development Server**:
```bash
npm start
```
The app will be accessible at `http://localhost:3000`.
3. **Build for Production**:
```bash
npm run build
```

Builds the app for production to the `build` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance.
## Environment Variables

The build is minified and the filenames include the hashes.\
Your app is ready to be deployed!
- **`REACT_APP_BACKEND_HOST`**: Backend API URL (e.g., `http://localhost:5000`).

See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
## Technologies Used

### `npm run eject`

**Note: this is a one-way operation. Once you `eject`, you can't go back!**

If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.

Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.

You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.

## Learn More

You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).

To learn React, check out the [React documentation](https://reactjs.org/).

### Code Splitting

This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)

### Analyzing the Bundle Size

This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)

### Making a Progressive Web App

This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)

### Advanced Configuration

This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)

### Deployment

This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)

### `npm run build` fails to minify

This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
- **React**: For building the user interface.
- **React Router**: For navigation and routing.
- **i18next**: For internationalization.
- **Axios/Fetch**: For API communication.
4 changes: 4 additions & 0 deletions client/src/Authentication/PrivateRoutes.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Only authenticated users can access certain routes.
// If the user is authenticated, it renders the child components (via Outlet).
// If not, the user is redirected to the login page.

import { useState } from 'react'
import { Outlet, Navigate } from 'react-router-dom'

Expand Down
3 changes: 3 additions & 0 deletions client/src/Authentication/RoleBasedRoutes.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// Based on user role, this will point user in the correct route.
// If the role matches, it renders the corresponding child components (via Outlet).
// Otherwise, it redirects the user to a "Not Found" page.
import { useState, useEffect } from 'react'
import { Outlet, Navigate } from 'react-router-dom'
import { getUserType } from '../helpers/UserType'
Expand Down
8 changes: 8 additions & 0 deletions client/src/helpers/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
### `README` for `helpers` Folder

---

#### **Purpose:**
The `helpers` folder contains scripts designed to perform small, focused tasks that simplify repetitive or complex operations in the application. These scripts are lightweight and often function as "helpers" to other parts of the codebase.


2 changes: 2 additions & 0 deletions client/src/i18n.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// Initializes i18n for internationalization in the app and enables language support with English and French translations.

import i18n from 'i18next'
import { initReactI18next } from 'react-i18next'

Expand Down
6 changes: 6 additions & 0 deletions client/src/services/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
### `README` for `services` Folder

---

#### **Purpose:**
The `services` folder contains modules that manage core business logic and interactions with external resources, such as APIs, databases, or authentication systems.
6 changes: 4 additions & 2 deletions init-mongo.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// This script initializes the AcademicTeamManagementDB database in MongoDB.

db = db.getSiblingDB("AcademicTeamManagementDB");
db.createUser(
{
db.createUser( // Creates a user with readWrite permissions for secure access to the database.
{
user: "root",
pwd : "pass",
roles: [
Expand Down