git clone empty repo -> cd foldername -> npm init -> (package.json is made )
tsc --init (to have tsconfig file)
created index.ts in Main folder
dont forget to add scripts to package.json file for index.ts
- utility
- services
- routes
- models
- middlewares
- images
- images
- dto
- controllers
- config
Then we moved to contollers Folder to control AdminRoute and inside AdminControll.ts we created three functions that are
CreateVandor : for posting data
GetVandor : for getting all vandors
GetVandorbyID : getting vandor by ID
- router.post('/vandor',CreateVandor)
- router.post('/vandors',GetVandor )
- router.post('/vandor/:id',GetVandorbyID)
Now we moved to dto folder (Data Transfer Object)
We created Vandor Interface (you can say class)
For fetching data from url we will use body-parser in main file
Then we completed CreateVandor function in AdminControl.ts file
![image](https://private-user-images.githubusercontent.com/78752342/291926341-ec7ec256-fc6a-4ad6-858e-2de119152195.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTE5MjYzNDEtZWM3ZWMyNTYtZmM2YS00YWQ2LTg1OGUtMmRlMTE5MTUyMTk1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE5MzdiODNlMjc4ZjRlYzA5NGRmM2FhZmUxZTE5YTU0YjZlYTIwZDYxNTZlMGFlMTQyYzJkMjY0YTQwMjc5OTEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.ue8CqBU-KyvpBUYHLOfSgeOTMMLkJQu7oWulLg3WMig)
Inside Vandor Scema foods field is an array of object ids , basciaaly its forein key from Food Table
It's an array of objects, where each object is expected to be of type mongoose.Schema.ObjectId and is referring to the "food" model (specified by ref: "food")
![image](https://private-user-images.githubusercontent.com/78752342/291931069-6c997b45-f9c4-4fa2-ae72-cfb5963b2dc1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTE5MzEwNjktNmM5OTdiNDUtZjljNC00ZmEyLWFlNzItY2ZiNTk2M2IyZGMxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFmZTE0YmQ4MTQ4YThmMDRhNDIzYTk3NGJiZjdmODljOTNjYjBjNGM1ZDQ0NTg0ZDI1OWE0MjA5ZmE0ZDg4Y2YmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.8-ZG62uiuYEWd6dwgIj1MtpkEaeSUE-4EkmJHhfGicY)
Creating a vandor in AdminController.ts , checking if it already exists and using salt excrypting the password
A Password utility is made inside utility folder where generating salt and hashing is done.
Install below first :
![image](https://private-user-images.githubusercontent.com/78752342/291964295-39e05706-1dd1-4eb8-87dd-8e6fcf913e0d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTE5NjQyOTUtMzllMDU3MDYtMWRkMS00ZWI4LTg3ZGQtOGU2ZmNmOTEzZTBkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTM0OGI0ZjdkODczNGJlYWE2NDUzZTY2NzNhMDA3Y2MyZTg2MGU4MGFjNmZmZDIwOTE1ZmJlOTRmYWM5ZGRhMTUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.PHcBORRX2btSTmNP94xpVV7NM3tEDXldaVwULYzeokE)
![image](https://private-user-images.githubusercontent.com/78752342/291964516-7b07d145-c514-42c3-af97-ea1a6b35bb38.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTE5NjQ1MTYtN2IwN2QxNDUtYzUxNC00MmMzLWFmOTctZWExYTZiMzViYjM4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk2ODQwZjQyOTc4MjEyYTgyNjBlOTc5OWE0NGJjY2JhM2Q0ZmM0M2NjYThiZDYzYjA2ODBkYTA0ZTVmMmNhYWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.WrPf4FHb6r6H3BfvvCyW79TlZUJRZfsG3-CxPb_XbX0)
![image](https://private-user-images.githubusercontent.com/78752342/291964951-3b7bf82b-986e-4846-84b4-f02dc580e562.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTE5NjQ5NTEtM2I3YmY4MmItOTg2ZS00ODQ2LTg0YjQtZjAyZGM1ODBlNTYyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVkNjdhNDg5Njk2NWE2ZWVjNDk1YmZjNWZhYWE1MGNjYmMxNGI5NWRhMzY1MTc4Y2NlZTI3MDQxZjk0NGRjOWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.dEpTlN3XO8qjI8DucAWNkJKt_lB9fjyqkh-AXMssO9I)
As you can see now we are not able to see the password in JSON format which is good for security purpose , but in database they all are stored , so hacker will not be able to acess password or salt from json response as we have removed it .
20 dec 23
Storing helper classes in utility folder if data is not available or incorrect
Completed getVandors , getvandorById
![image](https://private-user-images.githubusercontent.com/78752342/292140742-c5d8e7fd-7110-4c80-b788-c605f0510795.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTIxNDA3NDItYzVkOGU3ZmQtNzExMC00YzgwLWI3ODgtYzYwNWYwNTEwNzk1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTFhN2M3OGZkNzEzNmU3MTIzYjk3ZDM2YWUyYTI0MjRlZWEwZmEwY2RmNWU1MjgyYzdhYzFlZTg5ZmIxM2U1YzMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.kEP9NhfJHXr17HksX3oU5T6sJTF7bIYcgFJdos6jbIk)
![image](https://private-user-images.githubusercontent.com/78752342/292142215-1d25bec8-7131-496a-af5b-807a2eafc72d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTIxNDIyMTUtMWQyNWJlYzgtNzEzMS00OTZhLWFmNWItODA3YTJlYWZjNzJkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTY4ZDM3ZjUwNDBiYjMzMDFkMWMxMDU1MmM0OGI1ZTA3YTJiMWViMDIzZDM5ZjdlZjczODEzMThhNzkxNDQ3NmYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.g8H2uiHhGjh_gYsgpcBb4t8cmEmVVllUtsEXKaLrklo)
![image](https://private-user-images.githubusercontent.com/78752342/292141227-0ec7feda-9fa9-47df-a5ff-a382b911d652.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTIxNDEyMjctMGVjN2ZlZGEtOWZhOS00N2RmLWE1ZmYtYTM4MmI5MTFkNjUyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBhZjU4Y2Y4YjRhOTRlMWY1ODg1Y2IzOTUzOTY4NmUxOGZiNWM1MGY2MTcwN2E3MmI2MzE5YzYxMTUyYmJjMDImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.yKwp1ivXirI3KlUX57VPsDY8u35VtRKiKcPf0ttyMes)
![image](https://private-user-images.githubusercontent.com/78752342/292140914-5ba2da67-4803-4afd-bd96-abbb518b6d2e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTIxNDA5MTQtNWJhMmRhNjctNDgwMy00YWZkLWJkOTYtYWJiYjUxOGI2ZDJlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBiNTQ4NTg0YjkzOWZlZDliZDkyNDY5ZWM2MDgxY2Y5MzRkMmNiODEwYzgxN2ZmYzc2ZTkwMThmYjVlNTMwNjAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.m2UcNCWcx0-CjappZLyGcdfkgs6U_v9SHhtLxvEkLcs)
The signature verification process involves the use of a secret key that only the server knows. The key is used to sign the JWT when it is created and to verify the signature when the JWT is presented to the server. The signature is a cryptographic hash generated using this secret key and the content of the JWT (header and payload).
![image](https://private-user-images.githubusercontent.com/78752342/292384364-5fb39a49-a6d4-479f-9792-c3670c09dc98.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTIzODQzNjQtNWZiMzlhNDktYTZkNC00NzlmLTk3OTItYzM2NzBjMDlkYzk4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTMyNGUxYjE4M2M3YmJkMmNmOTIwYTcyYTM1NmZhNTBkMzNkNzk3OTQyNTU0YTZjZjY0MDcyYmQ2NDYyNGUxOTcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.oZKJVU6CvDtQlnQvCn6KwZIW44v8ve-6LUGzVh84rp8)
![image](https://private-user-images.githubusercontent.com/78752342/292389038-2375f013-1870-4856-b857-5bad077487e1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTIzODkwMzgtMjM3NWYwMTMtMTg3MC00ODU2LWI4NTctNWJhZDA3NzQ4N2UxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWVmOWJlZGJlNTRmYjllOGI0M2ExODM3NDU2YWJlY2JjZDdmOGY5YTA3YTMxZTZiMzkwYmY2Zjk4NjlhOWRhZDImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.YIS38C9yIQqXb8ou9wNhXPKbbmz6Ap7HE8iJ24siuIw)
In payload variable we are able to acess id , name , email , foodTypes
![image](https://private-user-images.githubusercontent.com/78752342/292388701-8b2c5187-280f-465c-a282-833a2af4fdc1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTIzODg3MDEtOGIyYzUxODctMjgwZi00NjVjLWEyODItODMzYTJhZjRmZGMxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTM2YTdmYzlmODRjYjMwNjczM2M4ZDc3YmM5ZDM4MzFlN2Y0MDRiYjU0MTUxNTMwZWVhMjRhYTE3YzlhMWQyY2MmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rnK_-TrD4Yt90SzBLHuc6YrTNO-TpbeNJM1WUHQIKOw)
![image](https://private-user-images.githubusercontent.com/78752342/292390967-cda0ffdf-2fdd-4d73-b307-f24b0188cc3c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTIzOTA5NjctY2RhMGZmZGYtMmZkZC00ZDczLWIzMDctZjI0YjAxODhjYzNjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFlZTNkOTNjZGY1ZmQ0OTk1OWYwMjc0NWU0NzVmNjg4NmNhOTlkNDY4Y2MwMzZiYjQxODAzNmU2MzZmYWI0MjEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OvACVnxZ7fFblXDzWkcQ5KryE3vPZOkYLAKmnfzXips)
![image](https://private-user-images.githubusercontent.com/78752342/293336719-9c94903c-36da-428c-a399-f7f372ac88b3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTMzMzY3MTktOWM5NDkwM2MtMzZkYS00MjhjLWEzOTktZjdmMzcyYWM4OGIzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTcyODMzZWI2MzkwNzU0ZDhiYzhlOTE5N2ZkMWExZmU4NjdiNGNkZGY5ZDVmNTc2ODhmOTdhNjc1NDMzYTlmZTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Ubcb8tZoQOeETM_qrHPQo-_xwVrVnW5QRnJZezbpCz4)
![image](https://private-user-images.githubusercontent.com/78752342/293335494-4869fcf4-9c07-48ff-84a5-220d386043d0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTMzMzU0OTQtNDg2OWZjZjQtOWMwNy00OGZmLTg0YTUtMjIwZDM4NjA0M2QwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTkwNTUzOTg4ODJjZWMxNWMxZGExM2Q2NjRmZTQ3Y2M1NGY0ZGNjMDU3ZmNjZTM5YTFjZWQxOWIwYTY4MjUzMmEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.VOx1wICRH3BzLWTLr8GxrNPp8yxUC52o8yP_0DMyhwA)
![image](https://private-user-images.githubusercontent.com/78752342/293335624-c95bff50-6681-48e4-bbdb-b5b831fc49a0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTMzMzU2MjQtYzk1YmZmNTAtNjY4MS00OGU0LWJiZGItYjViODMxZmM0OWEwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWVkMTM1NmYzYzIxNzZiOGU4MDVhNGRiMDVhNjQ3OTk3NDNhMzkxZjczZGQwMjRjZGM5MTNhMzE2MGY4OWU2ZTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.u_wzzJbnipf5NjO6wVrJ29KSOdx_4k1s-jsof3LUDuQ)
![image](https://private-user-images.githubusercontent.com/78752342/293335726-7807106a-31f6-42c2-84e6-c43d0f6cbbb6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTMzMzU3MjYtNzgwNzEwNmEtMzFmNi00MmMyLTg0ZTYtYzQzZDBmNmNiYmI2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk5YTM5ODI4N2E3YWY4YmE4ZTA3YTc3ZTM0MzIzOWRjM2JlNzExMTI5NTA5YWIwYTZkYjk4ODdhODc4MDQ0ZjQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.7MMEwanswJJiPteQsyHaq3D79g6psXOw2aYaAbYfSjg)
![image](https://private-user-images.githubusercontent.com/78752342/293336114-3aae1a26-a8a6-4812-a04b-7a6904e13643.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTMzMzYxMTQtM2FhZTFhMjYtYThhNi00ODEyLWEwNGItN2E2OTA0ZTEzNjQzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTc0YjlkMTYzZDdhMTMyOWYwZDc3OTQ1MzNkZmE0OTA0ZDRmNjBhZWY0NTAyOTg4YmYxN2QwZDg4MGFkMDMxZmMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.L_Vl_IZKy176P6zlQnHn1DkpupRcE37AP83dF6ftpws)
![image](https://private-user-images.githubusercontent.com/78752342/293336359-e64f1bfa-182f-46a1-ab59-253d546c47b9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTMzMzYzNTktZTY0ZjFiZmEtMTgyZi00NmExLWFiNTktMjUzZDU0NmM0N2I5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTgwNGRhYWRlOWEwNTAwOWU5YmE4MjI4NWEyOGM2OWM4ZDVjYjFhMWRiZjkyMjVkN2FlMTE1MDhmZmYzOGExZDImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.94oIxUKDrlXxrBuwF-5wZ7OsCCHps3ZBUIeTYE4sWuo)
![image](https://private-user-images.githubusercontent.com/78752342/293497930-c73fc2dd-7493-4210-82b1-b64e72369467.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTM0OTc5MzAtYzczZmMyZGQtNzQ5My00MjEwLTgyYjEtYjY0ZTcyMzY5NDY3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI0ZDdiNTk4ZTM0NWNhOTNjMjY1YmY3YWMyMjMxY2RhODM4YzUxMGNiYzhmYjY0NzlhYTNhZWJmNjBhNzUyZTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rjpwUM4N1CmFSOIV9_rQZJqabQqmr-V1De7Xg3COq4o)
![image](https://private-user-images.githubusercontent.com/78752342/293497912-11477ad8-db24-4e24-9da9-a63869a79fc3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTM0OTc5MTItMTE0NzdhZDgtZGIyNC00ZTI0LTlkYTktYTYzODY5YTc5ZmMzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThmYmNlZDRiZWM3MDdjMDgxZTkwMjg4ZTc1YTY5MjJhYjIwM2M1ZmUzNTc4OTIzMzY2MGExZmNiMTVhNDI5ZTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.W1IMK0SxYk8EGkgNS-fnbN0YmTv4-rOHRscTuw6lgxY)
Multer is a node.js middleware for handling multipart/form-data, which is primarily used for uploading files
![image](https://private-user-images.githubusercontent.com/78752342/293498075-3efd2cde-8fba-45fc-ad04-f5c11699dcbe.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5MDAxODIsIm5iZiI6MTcxOTg5OTg4MiwicGF0aCI6Ii83ODc1MjM0Mi8yOTM0OTgwNzUtM2VmZDJjZGUtOGZiYS00NWZjLWFkMDQtZjVjMTE2OTlkY2JlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA1NTgwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTRmNGYwMmI4NmFmNTFmNWQyNWU0NjVmZTA4ODQ3MWFlZTlhMjQ1M2RlYWI5MGUxNzhjNGZhNjVkMDViYWZiYmUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.6UtU1u4Z29XgCSnlg9SQqu1qQp4Ga5VFbqNibePxf30)