change(readme) update readme and some changes to database

This commit is contained in:
Yusuf İpek
2021-07-25 12:56:57 +03:00
parent 53694ac883
commit 408cec0c01
5 changed files with 97 additions and 14 deletions
+74 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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);
+10 -7
View File
@@ -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",
}; };
}); });
+1 -1
View File
@@ -4,7 +4,7 @@ module.exports.createToken = function () {
expiresIn: "30d", expiresIn: "30d",
}); });
if (!process.env.NODE_ENV === "test") { if (process.env.NODE_ENV !== "test") {
console.log(token); console.log(token);
} }