Zawee.Preview.mov
Access to the website here -> Zawee
The Inter-module Project was carried out during the last 2 months of class before the FCT.
The project consists of the Lesson Assignment to Professors of the Department. It will also implement roles and we will have 3 types
- Administrator: Can perform any operation on the tables.
- Registered User: Can consult all the data without making modifications.
- Unregistered User: Can consult the group structure of the current course.
Project is created with:
|
FRONTEND |
BACKEND |
TOOLS |
|
|
|
- Node.js and npm installed
- MySQL installed and configured
To clone and run this applicaion, you'll need Git and Node.js (which comes with npm) installed on you computer.
Next you'll need to create the eduAssignment database created
# Clone this repository
$ git clone https://github.com/jmcamposdev/integralProjectIZV.git
# Go into the repository
$ cd integralProjectIZV
# Install dependencies on the Server and Client
$ cd client && npm i
$ cd ../server && npm i
# Run the app
$ npm run dev // On the Client and Server
integralProjectIZV/
│
├── client/
│ ├── public/
│ │ └── ... (React public files)
│ ├── src/
│ │ ├── components/
│ │ │ └── ... (React components)
│ │ ├── pages/
│ │ │ └── ... (React pages)
│ │ ├── App.js
│ │ └── index.js
│ │
│ ├── .gitignore
│ ├── package.json
│ └── README.md
│
├── server/
│ ├── controllers/
│ │ └── ... (Node.js controllers)
│ ├── models/
│ │ └── ... (Database models)
│ ├── routes/
│ │ └── ... (Express routes)
│ ├── index.js
│ │
│ ├── .gitignore
│ ├── package.json
│ └── README.md
│
├── .gitignore
├── package.json
├── README.md
└── ...Welcome to the Integral Project RESTful API. This API provides access to the management of all available resources.
The API can be accessed through the following base URL: https://api.zawee.jmcampos.dev
To access certain resources, authentication is required. Be sure to include the x-access-token header with a valid token in the relevant requests.
POST /auth/signin: Sign in a user. Returns aJSONobject with the user's data and a token. Requires aJSONobject with the user's data.
GET /users: Get all users. Returns aJSONarray of all users.x-access-tokenheader required.GET /users/:id: Get a user by ID. Returns aJSONobject with the user's data.x-access-tokenheader required.POST /users: Create a new user. Returns aJSONobject with the new user's data. Requires aJSONobject with the user's data.x-access-tokenheader required.PUT /users/:senecaUser: Update a user by ID. Returns aJSONobject with the updated user's data. Requires aJSONobject with the user's data.x-access-tokenheader required.DELETE /users/:id: Delete a user by ID. Returns aJSONobject with the deleted user's data.x-access-tokenheader required.
GET /professors: Get all professors. Returns aJSONarray of all professors.GET /professors/:id: Get a professor by ID. Returns aJSONobject with the professor's data.GET /professors/:id/lessons: Get all lessons assigned to a professor by ID. Returns aJSONarray of all lessons.POST /professors: Create a new professor. Returns aJSONobject with the new professor's data. Requires aJSONobject with the professor's data.x-access-tokenheader required.PUT /professors/:id: Update a professor by ID. Returns aJSONobject with the updated professor's data. Requires aJSONobject with the professor's data.x-access-tokenheader required.DELETE /professors/:id: Delete a professor by ID. Returns aJSONobject with the deleted professor's data.x-access-tokenheader required.
GET /formations: Get all formations. Returns aJSONarray of all formations.GET /formations/:id: Get a formation by ID. Returns aJSONobject with the formation's data.GET /formations/:id/groups: Get all groups of a formation by ID. Returns aJSONarray of all groups.GET /formations/:id/modules: Get all modules of a formation by ID. Returns aJSONarray of all modules.POST /formations: Create a new formation. Returns aJSONobject with the new formation's data. Requires aJSONobject with the formation's data.x-access-tokenheader required.PUT /formations/:id: Update a formation by ID. Returns aJSONobject with the updated formation's data. Requires aJSONobject with the formation's data.x-access-tokenheader required.DELETE /formations/:id: Delete a formation by ID. Returns aJSONobject with the deleted formation's data.x-access-tokenheader required.
GET /modules: Get all modules. Returns aJSONarray of all modules.GET /modules/:id: Get a module by ID. Returns aJSONobject with the module's data.GET /modules/:id/lessons: Get all lessons of a module by ID. Returns aJSONarray of all lessons.POST /modules: Create a new module. Returns aJSONobject with the new module's data. Requires aJSONobject with the module's data.x-access-tokenheader required.PUT /modules/:id: Update a module by ID. Returns aJSONobject with the updated module's data. Requires aJSONobject with the module's data.x-access-tokenheader required.DELETE /modules/:id: Delete a module by ID. Returns aJSONobject with the deleted module's data.x-access-tokenheader required.
GET /groups: Get all groups. Returns aJSONarray of all groups.GET /groups/:id: Get a group by ID. Returns aJSONobject with the group's data.GET /groups/:id/lessons: Get all lessons of a group by ID. Returns aJSONarray of all lessons.POST /groups: Create a new group. Returns aJSONobject with the new group's data. Requires aJSONobject with the group's data.x-access-tokenheader required.PUT /groups/:id: Update a group by ID. Returns aJSONobject with the updated group's data. Requires aJSONobject with the group's data.x-access-tokenheader required.DELETE /groups/:id: Delete a group by ID. Returns aJSONobject with the deleted group's data.x-access-tokenheader required.
GET /lessons: Get all lessons. Returns aJSONarray of all lessons.GET /lessons/:id: Get a lesson by ID. Returns aJSONobject with the lesson's data.GET /lessons-current-year: Get all lessons of the current year e.g. 2024/2025POST /lessons: Create a new lesson. Returns aJSONobject with the new lesson's data. Requires aJSONobject with the lesson's data.x-access-tokenheader required.POST /lessons-generate: Automatically generates as many lessons as possible with the available groups and modules by assigning the teacher to null.PUT /lessons/:id: Update a lesson by ID. Returns aJSONobject with the updated lesson's data. Requires aJSONobject with the lesson's data.x-access-tokenheader required.DELETE /lessons/:id: Delete a lesson by ID. Returns aJSONobject with the deleted lesson's data.x-access-tokenheader required.
# Request
GET /professors/
# Response
[
{
"id": 1,
"senecaUser": "josemariacampos",
"name": "José María",
"firstSurname": "Campos",
"lastSurname": "Trujillo",
"specialty": "FP",
},
{
"id": 2,
"senecaUser": "carloshernandez",
"name": "Carlos",
"firstSurname": "Hernández",
"lastSurname": "Palma",
"specialty": "Secundary",
},
]
# Request
POST /professors/
Headers: x-access-token: <token>
{
"seneceUser": "davidluque",
"name": "David",
"firstSurname": "Luque",
"lastSurname": "Vegas",
"specialty": "FP"
}
# Response - 201 Created
{
"id": 3,
"senecaUser": "davidluque",
"name": "David",
"firstSurname": "Luque",
"lastSurname": "Vegas",
"specialty": "FP"
}- Management of five tables: Professor, Formation, Module, Group, Lesson.
- Administrators can perform any operation on the tables.
- Registered users can view data without making modifications.
- Unregistered users can view the structure of groups in the current school year.
- Enter data into the Professor, Formation, and Module tables.
- Register data in the Group table.
- Create lessons for the school year, leaving the professor_id field blank (null).
- Multiple lessons can be created for a module, assigned to different professors.
- Create lessons to ensure no hours are left untaught in any module.
- Administrators can filter and assign professors to lessons.
- Authenticated users can check the progress of lesson assignments.
This project is under the MIT License - see the LICENSE file for details.
Campos Trujillo, José María - jmcamposdev
Carlos Hernandez Palma - carloshpdev
Luque Vegas, David - Daviiid999
Capdevila Rodríguez, Víctor - vilacprd
Rodríguez Jareño, Manuel - Manabimassu
We appreciate the collaboration of IES Zaidín-Vergeles in this project.















