From cd80c9f12c82a1ba931f92e7b2d46de3358136b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yusuf=20=C4=B0pek?= Date: Sun, 5 Sep 2021 17:26:37 +0300 Subject: [PATCH] changed some lines to be compaitable with rememberme-cli --- README.md | 2 +- models/person-model.js | 104 +++++++++++++------------------ package.json | 2 + routes/person.js | 17 ++++- tests/integration/person.test.js | 12 ++++ 5 files changed, 73 insertions(+), 64 deletions(-) diff --git a/README.md b/README.md index 389d7b9..a7a1cd1 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ Here are the example requests you can make. { "name": "Mike", "metAt": "Wall Maria Cafe", - "place": "Üsküdar" + "place": "Üsküdar", "contact": { "phone": "12345", "email": "123456@gmail.com", diff --git a/models/person-model.js b/models/person-model.js index 3e19411..a6670ba 100644 --- a/models/person-model.js +++ b/models/person-model.js @@ -4,68 +4,55 @@ const Joi = require("joi"); const personSchema = new mongoose.Schema({ name: { type: String, - minlength: 3, maxlength: 50, trim: true, required: true, }, metAt: { type: String, - minlength: 3, maxlength: 50, required: true, }, place: { type: String, - minlength: 3, maxlength: 50, }, contact: { - type: new mongoose.Schema({ - phone: { + phone: { + type: String, + maxlength: 20, + }, + email: { + type: String, + maxlength: 255, + }, + socialmedia: { + instagram: { type: String, - minlength: 5, - maxlength: 20, + maxlength: 15, + unqiue: true, }, - email: { + youtube: { type: String, - minlength: 5, - maxlength: 255, + maxlength: 15, }, - socialmedia: { - type: new mongoose.Schema({ - instagram: { - type: String, - minlength: 3, - maxlength: 15, - unqiue: true, - }, - youtube: { - type: String, - minlength: 3, - maxlength: 15, - }, - twitter: { - type: String, - minlength: 3, - maxlength: 15, - }, - }), - }, - website: { + twitter: { type: String, - minlength: 5, - maxlength: 25, + maxlength: 15, }, - }), + }, + website: { + type: String, + maxlength: 25, + }, }, birth: { type: String, maxlength: 25, }, age: { - type: Number, - maxlength: 100, + type: String, + maxlength: 2, }, likes: { type: [String], @@ -75,22 +62,18 @@ const personSchema = new mongoose.Schema({ }, occupation: { type: String, - minlength: 3, maxlength: 50, }, lastseen: { type: String, - minlength: 3, maxlength: 50, }, nextcontact: { type: String, - minlength: 3, maxlength: 50, }, notes: { type: String, - minlength: 3, maxlength: 500, }, tags: { @@ -105,8 +88,7 @@ const personSchema = new mongoose.Schema({ }, createdAt: { type: String, - maxlength: 25, - required: true, + maxlength: 30, }, editedAt: { type: Date, @@ -119,29 +101,29 @@ const Person = mongoose.model("Person", personSchema); function validatePerson(value) { const schema = Joi.object({ - name: Joi.string().min(3).max(50).required(), - metAt: Joi.string().min(3).max(50).required(), - place: Joi.string().min(3).max(50), + name: Joi.string().max(50).required(), + metAt: Joi.string().max(50).required(), + place: Joi.string().allow("").max(50), contact: Joi.object({ - phone: Joi.string().min(5).max(20), - email: Joi.string().email().min(5).max(255), + phone: Joi.string().allow("").max(20), + email: Joi.string().allow("").email().max(255), socialmedia: Joi.object({ - instagram: Joi.string().min(3).max(15), - youtube: Joi.string().min(3).max(15), - twitter: Joi.string().min(3).max(15), + instagram: Joi.string().allow("").max(15), + youtube: Joi.string().allow("").max(15), + twitter: Joi.string().allow("").max(15), }), - website: Joi.string().min(5).max(25), + website: Joi.string().allow("").max(25), }), - birth: Joi.string().max(25), - age: Joi.number().max(100), - likes: Joi.array(), - dislikes: Joi.array(), - occupation: Joi.string().min(3).max(50), - lastseen: Joi.string().min(3).max(50), - nextcontact: Joi.string().min(3).max(50), - notes: Joi.string().min(3).max(500), - tags: Joi.array().max(6), - createdAt: Joi.string().max(25).required(), + birth: Joi.string().allow("").max(25), + age: Joi.string().allow("").max(100), + likes: Joi.array().allow(""), + dislikes: Joi.array().allow(""), + occupation: Joi.string().allow("").max(50), + lastseen: Joi.string().allow("").max(50), + nextcontact: Joi.string().allow("").max(50), + notes: Joi.string().allow("").max(500), + tags: Joi.array().allow("").max(6), + createdAt: Joi.string().allow("").max(30), }); return schema.validate(value, { allowUnknown: true }); } diff --git a/package.json b/package.json index f26daf4..5bd6cef 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,8 @@ "supertest": "^6.1.4" }, "scripts": { + "start": "node index.js", + "devStart": "nodemon index.js", "test": "jest --watchAll --verbose --runInBand --coverage" } } diff --git a/routes/person.js b/routes/person.js index 9615c32..839bd67 100644 --- a/routes/person.js +++ b/routes/person.js @@ -5,7 +5,7 @@ const express = require("express"); const router = express.Router(); router.get("/", auth, async (req, res) => { - const people = await Person.find(); + const people = await Person.find().sort("field name"); res.send(people); }); @@ -77,6 +77,7 @@ router.put("/:id", auth, validateObjectId, async (req, res) => { const { name, place, + metAt, contact, birth, age, @@ -87,11 +88,22 @@ router.put("/:id", auth, validateObjectId, async (req, res) => { nextcontact, notes, tags, + createdAt, } = person; if (!req.body.name) req.body.name = name; + if (!req.body.metAt) req.body.metAt = metAt; if (!req.body.place) req.body.place = place; - if (!req.body.contact) req.body.contact = contact; + + if (!req.body.contact.socialmedia.instagram) + req.body.contact.socialmedia.instagram = contact.socialmedia.instagram; + if (!req.body.contact.socialmedia.youtube) + req.body.contact.socialmedia.youtube = contact.socialmedia.youtube; + if (!req.body.contact.socialmedia.twitter) + req.body.contact.socialmedia.twitter = contact.socialmedia.twitter; + if (!req.body.contact.phone) req.body.contact.phone = contact.phone; + if (!req.body.contact.email) req.body.contact.email = contact.email; + if (!req.body.birth) req.body.birth = birth; if (!req.body.age) req.body.age = age; if (!req.body.likes) req.body.likes = likes; @@ -101,6 +113,7 @@ router.put("/:id", auth, validateObjectId, async (req, res) => { if (!req.body.nextcontact) req.body.nextcontact = nextcontact; if (!req.body.notes) req.body.notes = notes; if (!req.body.tags) req.body.tags = tags; + if (!req.body.createdAt) req.body.createdAt = createdAt; const { error } = validate(req.body); if (error) return res.status(400).send(error.details[0].message); diff --git a/tests/integration/person.test.js b/tests/integration/person.test.js index cc6c8aa..55ee246 100644 --- a/tests/integration/person.test.js +++ b/tests/integration/person.test.js @@ -199,6 +199,18 @@ describe("person route", () => { person2 = { name: "Jimmy", metAt: "Texas", + + // created contact empty because I want tests to work with rememberme-cli + contact: { + socialmedia: { + instagram: "", + youtube: "", + twitter: "", + }, + phone: "", + email: "", + }, + createdAt: "11.11.2021", }; });