mirror of
https://github.com/yusufipk/RememberMe.git
synced 2026-09-11 10:56:07 +00:00
change(readme) update readme and some changes to database
This commit is contained in:
@@ -1,6 +1,11 @@
|
|||||||
# RememberMe
|
# RememberMe
|
||||||
A database to save the data of people that I've met.
|
A database to save the data of people that I've met. I've created this project because of my personal needs and also I wanted to learn backend. I tried to write the code as much as clean and understandable as I could. If you want to add features please feel free to do so.
|
||||||
## Features (Included Data)
|
|
||||||
|
I want to implement this to a terminal based program and also a webapp in the future.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
You'll be able to save the data specified below using REST API and MongoDB.
|
||||||
|
|
||||||
1. Name
|
1. Name
|
||||||
2. Where you've met
|
2. Where you've met
|
||||||
3. Place (that they live)
|
3. Place (that they live)
|
||||||
@@ -18,3 +23,70 @@ A database to save the data of people that I've met.
|
|||||||
11. When shold I contact next
|
11. When shold I contact next
|
||||||
12. Additional notes
|
12. Additional notes
|
||||||
13. Tags
|
13. Tags
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
1. `npm install`
|
||||||
|
2. You'll need to install MongoDB either locally or from the cloud. Once you get your connection string change `./startup/db.js` connection string to your MongoDB adress.
|
||||||
|
3. You'll need token in order to use REST API. Your private key comes from `process.env.rememberMe_jwtkey` so you want to `setenv process.env.rememberMe_jwtkey "whatever"`
|
||||||
|
1. To get your jwtKey write `node -e 'require("./token").createToken()'` to terminal. This token expires in 30 days.
|
||||||
|
4. Run `node index.js` and you are ready.
|
||||||
|
1. Server port starts at `3002` if undefined. You can define the port by using `process.env.port` environment.
|
||||||
|
|
||||||
|
### Rest API
|
||||||
|
You are going to need to set your jwt key header `x-auth-token: yourjwtkey` in order to make requests.
|
||||||
|
|
||||||
|
Here are the example requests you can make.
|
||||||
|
|
||||||
|
#### GET
|
||||||
|
|
||||||
|
##### GET all entries
|
||||||
|
`http://localhost:3002/api/person/`
|
||||||
|
|
||||||
|
##### GET by name
|
||||||
|
`http://localhost:3002/api/person/get/Mike`
|
||||||
|
|
||||||
|
##### GET by ID
|
||||||
|
`http://localhost:3002/api/person/60fabc01465fd12839091b25`
|
||||||
|
|
||||||
|
#### POST
|
||||||
|
`http://localhost:3002/api/person/`
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"name": "Mike",
|
||||||
|
"metAt": "Wall Maria Cafe",
|
||||||
|
"place": "Üsküdar"
|
||||||
|
"contact": {
|
||||||
|
"phone": "12345",
|
||||||
|
"email": "[email protected]",
|
||||||
|
"socialmedia": {
|
||||||
|
"instagram": "mike123",
|
||||||
|
"youtube": "mike123",
|
||||||
|
"twitter": "mike123"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"birth": "10.05.1998",
|
||||||
|
"age": 22,
|
||||||
|
"likes": ["football", "video games"],
|
||||||
|
"dislikes": ["cats", "spiders"],
|
||||||
|
"occupation": "student",
|
||||||
|
"lastseen": "12.07.2021",
|
||||||
|
"nextcontact": "15.07.2021",
|
||||||
|
"notes": "He is a nice guy.",
|
||||||
|
"createdAt": "23.07.2021"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
#### PUT by ID
|
||||||
|
`http://localhost:3002/api/person/60fabc01465fd12839091b25`
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"name": "Jimmy",
|
||||||
|
"metAt": "Taksim"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
#### DELETE by ID
|
||||||
|
`http://localhost:3002/api/person/60fabc01465fd12839091b25`
|
||||||
|
|
||||||
|
### Required Values
|
||||||
|
Required values are `name`, `metAt` and `createdAt`. For all rules checkout `./models/person-model.js`
|
||||||
|
|||||||
+10
-3
@@ -9,12 +9,17 @@ const personSchema = new mongoose.Schema({
|
|||||||
trim: true,
|
trim: true,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
place: {
|
metAt: {
|
||||||
type: String,
|
type: String,
|
||||||
minlength: 3,
|
minlength: 3,
|
||||||
maxlength: 50,
|
maxlength: 50,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
place: {
|
||||||
|
type: String,
|
||||||
|
minlength: 3,
|
||||||
|
maxlength: 50,
|
||||||
|
},
|
||||||
contact: {
|
contact: {
|
||||||
type: new mongoose.Schema({
|
type: new mongoose.Schema({
|
||||||
phone: {
|
phone: {
|
||||||
@@ -101,6 +106,7 @@ const personSchema = new mongoose.Schema({
|
|||||||
createdAt: {
|
createdAt: {
|
||||||
type: String,
|
type: String,
|
||||||
maxlength: 25,
|
maxlength: 25,
|
||||||
|
required: true,
|
||||||
},
|
},
|
||||||
editedAt: {
|
editedAt: {
|
||||||
type: Date,
|
type: Date,
|
||||||
@@ -114,7 +120,8 @@ const Person = mongoose.model("Person", personSchema);
|
|||||||
function validatePerson(value) {
|
function validatePerson(value) {
|
||||||
const schema = Joi.object({
|
const schema = Joi.object({
|
||||||
name: Joi.string().min(3).max(50).required(),
|
name: Joi.string().min(3).max(50).required(),
|
||||||
place: Joi.string().min(3).max(50).required(),
|
metAt: Joi.string().min(3).max(50).required(),
|
||||||
|
place: Joi.string().min(3).max(50),
|
||||||
contact: Joi.object({
|
contact: Joi.object({
|
||||||
phone: Joi.string().min(5).max(20),
|
phone: Joi.string().min(5).max(20),
|
||||||
email: Joi.string().email().min(5).max(255),
|
email: Joi.string().email().min(5).max(255),
|
||||||
@@ -134,7 +141,7 @@ function validatePerson(value) {
|
|||||||
nextcontact: Joi.string().min(3).max(50),
|
nextcontact: Joi.string().min(3).max(50),
|
||||||
notes: Joi.string().min(3).max(500),
|
notes: Joi.string().min(3).max(500),
|
||||||
tags: Joi.array().max(6),
|
tags: Joi.array().max(6),
|
||||||
createdAt: Joi.string().max(25),
|
createdAt: Joi.string().max(25).required(),
|
||||||
});
|
});
|
||||||
return schema.validate(value, { allowUnknown: true });
|
return schema.validate(value, { allowUnknown: true });
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -32,6 +32,7 @@ router.post("/", auth, async (req, res) => {
|
|||||||
|
|
||||||
const {
|
const {
|
||||||
name,
|
name,
|
||||||
|
metAt,
|
||||||
place,
|
place,
|
||||||
contact,
|
contact,
|
||||||
birth,
|
birth,
|
||||||
@@ -50,6 +51,7 @@ router.post("/", auth, async (req, res) => {
|
|||||||
const person = new Person({
|
const person = new Person({
|
||||||
name,
|
name,
|
||||||
place,
|
place,
|
||||||
|
metAt,
|
||||||
contact,
|
contact,
|
||||||
birth,
|
birth,
|
||||||
age,
|
age,
|
||||||
@@ -100,7 +102,6 @@ router.put("/:id", auth, validateObjectId, async (req, res) => {
|
|||||||
if (!req.body.notes) req.body.notes = notes;
|
if (!req.body.notes) req.body.notes = notes;
|
||||||
if (!req.body.tags) req.body.tags = tags;
|
if (!req.body.tags) req.body.tags = tags;
|
||||||
|
|
||||||
console.log(req.body);
|
|
||||||
const { error } = validate(req.body);
|
const { error } = validate(req.body);
|
||||||
if (error) return res.status(400).send(error.details[0].message);
|
if (error) return res.status(400).send(error.details[0].message);
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ describe("person route", () => {
|
|||||||
person = new Person({
|
person = new Person({
|
||||||
_id: personId,
|
_id: personId,
|
||||||
name: "Mike",
|
name: "Mike",
|
||||||
place: "Taksim",
|
metAt: "Taksim",
|
||||||
|
createdAt: "10.10.2000",
|
||||||
});
|
});
|
||||||
await person.save();
|
await person.save();
|
||||||
|
|
||||||
@@ -150,11 +151,12 @@ describe("person route", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe("POST /api/person", () => {
|
describe("POST /api/person", () => {
|
||||||
let person;
|
let person2;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
person = {
|
person2 = {
|
||||||
name: "Skips",
|
name: "Skips",
|
||||||
place: "Car Maintanance",
|
metAt: "Car Maintanance",
|
||||||
|
createdAt: "20.12.2020",
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -162,7 +164,7 @@ describe("person route", () => {
|
|||||||
return await request(server)
|
return await request(server)
|
||||||
.post(`/api/person/`)
|
.post(`/api/person/`)
|
||||||
.set({ "x-auth-token": token })
|
.set({ "x-auth-token": token })
|
||||||
.send(person);
|
.send(person2);
|
||||||
};
|
};
|
||||||
|
|
||||||
it("should return 401 if no token provided", async () => {
|
it("should return 401 if no token provided", async () => {
|
||||||
@@ -178,7 +180,7 @@ describe("person route", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("joi should return 400 if input is invalid", async () => {
|
it("joi should return 400 if input is invalid", async () => {
|
||||||
person.name = "";
|
person2.name = "";
|
||||||
const res = await exec();
|
const res = await exec();
|
||||||
expect(res.status).toBe(400);
|
expect(res.status).toBe(400);
|
||||||
});
|
});
|
||||||
@@ -196,7 +198,8 @@ describe("person route", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
person2 = {
|
person2 = {
|
||||||
name: "Jimmy",
|
name: "Jimmy",
|
||||||
place: "Texas",
|
metAt: "Texas",
|
||||||
|
createdAt: "11.11.2021",
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user