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
11 changes: 4 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Pizza App
# Pizza App By Stephen Ignatius Maduabuchi
This is an api for a pizza app

---
Expand Down Expand Up @@ -63,7 +63,7 @@ This is an api for a pizza app
- Body:
```
{
"email": "doe@example.com",
"email": "steve@example.com",
"password": "Password1",
"firstname": "jon",
"lastname": "doe",
Expand All @@ -78,7 +78,7 @@ Success
{
message: 'Signup successful',
user: {
"email": "doe@example.com",
"email": "steve@example.com",
"password": "Password1",
"firstname": "jon",
"lastname": "doe",
Expand All @@ -95,7 +95,7 @@ Success
```
{
"password": "Password1",
"username": 'jon_doe",
"username": 'steve",
}
```

Expand Down Expand Up @@ -181,6 +181,3 @@ Success
---

...

## Contributor
- Daniel Adesoji
1 change: 1 addition & 0 deletions .gitignore → Users/user/Desktop/pizza_app/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
.env
node_modules
.env
183 changes: 183 additions & 0 deletions Users/user/Desktop/pizza_app/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
# Pizza App By Stephen Ignatius Maduabuchi
This is an api for a pizza app

---

## Requirements
1. User should be able to register
2. User should be able to login with Passport using JWT
3. Implement basic auth
4. User should be able to get orders
5. Users should be able to create orders
6. Users should be able to update and delete orders
7. Test application
---
## Setup
- Install NodeJS, mongodb
- pull this repo
- update env with example.env
- run `npm run start:dev`

---
## Base URL
- somehostsite.com


## Models
---

### User
| field | data_type | constraints |
|---|---|---|
| id | string | required |
| username | string | required |
| firstname | string | optional|
| lastname | string | optional |
| email | string | optional |
| password | string | required |
| user_type | string | required, default: user, enum: ['user', 'admin'] |


### Order
| field | data_type | constraints |
|---|---|---|
| id | string | required |
| created_at | date | required |
| state | number | required,default:1|
| total_price | number | required |
| items | array | required |
| item.name | string | required |
| item.price | number | required |
| item.size | string | required, enum: ['m', 's', 'l'] |
| item.quantity | number | required, enum: ['m', 's', 'l'] |



## APIs
---

### Signup User

- Route: /signup
- Method: POST
- Body:
```
{
"email": "steve@example.com",
"password": "Password1",
"firstname": "jon",
"lastname": "doe",
"username": 'jon_doe",
}
```

- Responses

Success
```
{
message: 'Signup successful',
user: {
"email": "steve@example.com",
"password": "Password1",
"firstname": "jon",
"lastname": "doe",
"username": 'jon_doe",
}
}
```
---
### Login User

- Route: /login
- Method: POST
- Body:
```
{
"password": "Password1",
"username": 'steve",
}
```

- Responses

Success
```
{
message: 'Login successful',
token: 'sjlkafjkldsfjsd'
}
```

---
### Create Order

- Route: /orders
- Method: POST
- Header
- Authorization: Bearer {token}
- Body:
```
{
items: [{ name: 'chicken pizza', price: 900, size: 'm', quantity: 1}]
}
```

- Responses

Success
```
{
state: 1,
total_price: 900,
created_at: Mon Oct 31 2022 08:35:00 GMT+0100,
items: [{ name: 'chicken pizza', price: 900, size: 'm', quantity: 1}]
}
```
---
### Get Order

- Route: /orders/:id
- Method: GET
- Header
- Authorization: Bearer {token}
- Responses

Success
```
{
state: 1,
total_price: 900,
created_at: Mon Oct 31 2022 08:35:00 GMT+0100,
items: [{ name: 'chicken pizza', price: 900, size: 'm', quantity: 1}]
}
```
---

### Get Orders

- Route: /orders
- Method: GET
- Header:
- Authorization: Bearer {token}
- Query params:
- page (default: 1)
- per_page (default: 10)
- order_by (default: created_at)
- order (options: asc | desc, default: desc)
- state
- created_at
- Responses

Success
```
{
state: 1,
total_price: 900,
created_at: Mon Oct 31 2022 08:35:00 GMT+0100,
items: [{ name: 'chicken pizza', price: 900, size: 'm', quantity: 1}]
}
```
---

...
File renamed without changes.
73 changes: 73 additions & 0 deletions Users/user/Desktop/pizza_app/authorization.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
const passport = require('passport');
const localStrategy = require('passport-local').Strategy;
const UserModel = require('./model/userModel');


const JWTstrategy = require('passport-jwt').Strategy;
const ExtractJWT = require('passport-jwt').ExtractJwt;
require('dotenv').config();

passport.use(
new JWTstrategy(
{
secretOrKey: process.env.JWT_SECRET,
jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken()
},
async (token, done) => {
try {
return done(null, token);
} catch (error) {
done(error);
}
}
)
);

passport.use(
'signup',
new localStrategy(
{
usernameField: 'username',
passwordField: 'password'
},
async (username, password, done) => {
try {
const user = await UserModel.create({ username, password });

return done(null, user);
} catch (error) {
done(error);
}
}
)
);


passport.use(
'login',
new localStrategy(
{
usernameField: 'username',
passwordField: 'password'
},
async (username, password, done) => {
try {
const user = await UserModel.findOne({ username });

if (!user) {
return done(null, false, { message: 'no user found' });
}

const validate = await user.isValidPassword(password);

if (!validate) {
return done(null, false, { message: 'Wrong Password' });
}

return done(null, user, { message: 'Logged in Successfully' });
} catch (error) {
return done(error);
}
}
)
);
Loading