Welcome to our project readme file!
This project was made during a 4-week Internship at Mistral (Maestral Solutions).
The whole project took 2 work weeks to finish.
Note: This summary is very brief and consists of far more details but it will help you understand the basics of the project.
The project consists of 3 parts, applications, selections, and users. Application is a part where applicants can apply for internships with their data which will be stored in a database with added status "applied".
The selections part is for admin/user roles only and no one else can access it. Selections are created by the user/admin which includes applicants who pass the expectations. After an applicant is moved to status "in-selection" he/she will receive an email "Welcome to Internship".
There are 2 roles for users:
1. Administrator
2. Editor
The users part is only accessible to the admin who can add new users who will be able to see applications and selections.
Before going into installation you need to have installed:
Angular CLI :
npm install -g @angular/cliNode.js: https://nodejs.org/en/
Dotnet:
dotnet tool install --global dotnet-efNow we can move on to frontend installation. After cloning the repository with
(Note: Be in empty folder while doing cloning or remove the ".")
git clone https://github.com/MahirPrcanovic/InternApp.git .you are ready to begin the next stage.
cd client
npm install --legacy-peer-depsaaand your frontend is ready!
ng serveto start the frontend and you should see a landing page!
First of backend you will need to run
dotnet ef migrations add MyMigration dotnet ef database updateto create database on your machine and load it up with default data.
Before startin your backend, you will need to setup few environment variables
To run this project, you will need to add the following environment variables to your project.
dotnet user-secrets init
dotnet user-secrets set SendGridApiKey [YOUR_SENDGRID_API_KEY] setx ASPNETCORE_JwtConfig__secret "Your secret token key"Note: In file EmailService.cs (line 23) you will need to put your sengrid email and name which you configured on their website since it won't work with ours.
And that should be it!
You can now start your backend and frontend and try it out!
POST /auth/login| Body | Type | Description |
|---|---|---|
userName |
string |
Required. |
password |
string |
Required. |
rememberMe |
boolean |
Required. |
Every request for /api/Application/* you will need:
| Header | Type | Description |
|---|---|---|
Authorization |
string |
Required. "Bearer + yourToken" |
GET /api/Application| Parameter | Type | Description |
|---|---|---|
page |
integer |
Page number (default = 1) |
pageSize |
integer |
Page size (default = 10) |
sortBy |
string |
Sort by (default = 'name') |
filterType |
string |
Filter by (default = 'name') |
filter |
string |
Filter Value |
POST /api/Application| Body | Type | Description |
|---|---|---|
firstName |
string |
Required. |
lastName |
string |
Required. |
email |
string |
Required. |
educationLevel |
string |
Required. |
coverLetter |
string |
Required. |
cv |
string |
Required. |
GET /api/Application/{id}| Parameter | Type | Description |
|---|---|---|
id |
string |
Required. |
PUT /api/ApplicationForm/{id}| Header | Type | Description |
|---|---|---|
Authorization |
string |
Required. Your token |
POST /api/Application/{id}| Body | Type | Description |
|---|---|---|
commentText |
string |
Required. Your comment |
Every request for /api/Selections/* you will need:
| Header | Type | Description |
|---|---|---|
Authorization |
string |
Required. "Bearer + yourToken" |
GET /api/Selections/GetAll| Parameter | Type | Description |
|---|---|---|
pageNumber |
integer |
Page number (default = 1) |
pageSize |
integer |
Page size (default = 5) |
sort |
string |
Sort by |
filterBy |
string |
Filter by |
GET /api/Selections/GetSelectionsById/{id}| Parameter | Type | Description |
|---|---|---|
id |
string |
Required |
POST /api/Selections/AddNewSelection| Body | Type | Description |
|---|---|---|
name |
string |
Required |
startDate |
Date |
Required |
endDate |
Date |
Required |
description |
string |
Required |
PUT /api/Selections/EditSelection/{id}| Parameter | Type | Description |
|---|---|---|
id |
string |
Required |
DELETE /api/Selections/DeleteApplicants/{selectionId}/{applicationId}| Parameter | Type | Description |
|---|---|---|
selectionId |
string |
Required |
applicationId |
string |
Required |
POST /api/Selections/AddNewApplicantToSelection/{selectionId}/{applicationId}| Parameter | Type | Description |
|---|---|---|
selectionId |
string |
Required |
applicationId |
string |
Required |
POST /api/Selections/AddNewCommentToSelection/{selectionId}| Parameter | Type | Description |
|---|---|---|
selectionId |
string |
Required |
Every request for /api/Selections/* you will need:
| Header | Type | Description |
|---|---|---|
Authorization |
string |
Required. "Bearer + yourToken" |
On top of Authorization, you have to have Administrator role to access this endpoint.
GET /api/User DELETE /api/User/{id}| Parameter | Type | Description |
|---|---|---|
id |
string |
Required |
POST /api/User/addNewUser| Body | Type | Description |
|---|---|---|
userName |
string |
Required |
password |
string |
Required |
email |
string |
Required |
Client: Angular 14, Bootstrap 5, AOS
Server: ASP.NET Core 6, Entity Framework Core, Identity, MSSQL, SendGrid
If you have any feedback, please reach out to mahirprcanovic@gmail.com