diff --git a/.gitignore b/.gitignore index 876cd97..a0809f9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.env # Logs logs *.log diff --git a/app/app.ts b/app/app.ts index 7276878..13e750b 100644 --- a/app/app.ts +++ b/app/app.ts @@ -9,9 +9,7 @@ import expressFormidable from 'express-formidable'; // import adminBroMongoose from 'admin-bro-mongoose'; import { checkAuth } from './utils/auth'; -import visitRouter from './resources/visit/visit.router'; import roadmapRouter from './resources/roadmap/roadmap.router'; -import subjectRouter from './resources/subject/subject.router'; import linkRouter from './resources/link/link.router'; export const app = express(); @@ -29,9 +27,7 @@ app.use( app.use(expressFormidable()); // needed for adminbro // public routes -app.use('/visits', visitRouter); app.use('/roadmaps', roadmapRouter); -app.use('/subjects', subjectRouter); // protected routes app.use('/', checkAuth); diff --git a/app/resources/link/link.model.ts b/app/resources/link/link.model.ts index 598b5c6..4264c76 100644 --- a/app/resources/link/link.model.ts +++ b/app/resources/link/link.model.ts @@ -16,11 +16,6 @@ const linkSchema = new mongoose.Schema( required: true, default: 0, }, - topic: { - type: mongoose.SchemaTypes.ObjectId, - ref: 'topic', - required: true, - }, createdBy: { type: mongoose.SchemaTypes.ObjectId, ref: 'user', @@ -37,10 +32,10 @@ const linkSchema = new mongoose.Schema( } ); -linkSchema.path('url').validate((val: string) => { +/*linkSchema.path('url').validate((val: string) => { const urlRegex = /(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/; return urlRegex.test(val); -}, 'Invalid URL.'); +}, 'Invalid URL.');*/ linkSchema.index({ topic: 1, url: 1 }, { unique: true }); diff --git a/app/resources/topic/topic.controllers.ts b/app/resources/post/post.controllers.ts similarity index 100% rename from app/resources/topic/topic.controllers.ts rename to app/resources/post/post.controllers.ts diff --git a/app/resources/post/post.model.ts b/app/resources/post/post.model.ts new file mode 100644 index 0000000..d82971c --- /dev/null +++ b/app/resources/post/post.model.ts @@ -0,0 +1,42 @@ +import mongoose from 'mongoose'; + +const postSchema = new mongoose.Schema( + { + title: { + type: String, + required: true, + }, + image: { + type: String, + required: true, + }, + content: { + type: String, + required: true, + }, + author: { + type: mongoose.SchemaTypes.ObjectId, + ref: 'user', + }, + dateCreated: { + type: Date, + default: Date.now, + }, + tags: [ + { + type: mongoose.SchemaTypes.ObjectId, + ref: 'tag', + }, + ], + }, + { + writeConcern: { + w: 'majority', + j: true, + wtimeout: 1000, + }, + timestamps: true, + } +); + +export default mongoose.model('post', postSchema); diff --git a/app/resources/post/post.router.ts b/app/resources/post/post.router.ts new file mode 100644 index 0000000..e69de29 diff --git a/app/resources/roadmap/roadmap.controllers.ts b/app/resources/roadmap/roadmap.controllers.ts index ddf2ec2..1cd47a8 100644 --- a/app/resources/roadmap/roadmap.controllers.ts +++ b/app/resources/roadmap/roadmap.controllers.ts @@ -1,6 +1,6 @@ import { crudControllers } from '../../utils/crud'; import roadmapModel from './roadmap.model'; -import subjectModel from '../subject/subject.model'; +import topicModel from '../topic/topic.model'; export const getRoadmap = async (req: any, res: any) => { try { @@ -13,16 +13,13 @@ export const getRoadmap = async (req: any, res: any) => { return res.status(400).end(); } - const subjects = await subjectModel - .find({ roadmap: roadmap._id }) - .lean() - .exec(); + const topic = await topicModel.find({ roadmap: roadmap._id }).lean().exec(); - if (!subjects) { + if (!topic) { return res.status(400).end(); } - res.status(200).json({ ...roadmap, subjects }); + res.status(200).json({ ...roadmap, topic }); } catch (e) { console.error(e); res.status(400).end(); diff --git a/app/resources/roadmap/roadmap.model.ts b/app/resources/roadmap/roadmap.model.ts index c0f93c2..7f57e97 100644 --- a/app/resources/roadmap/roadmap.model.ts +++ b/app/resources/roadmap/roadmap.model.ts @@ -2,20 +2,26 @@ import mongoose from 'mongoose'; const roadmapSchema = new mongoose.Schema( { - name: { + title: { type: String, unique: true, required: true, }, - title: { + description: { type: String, - unique: true, required: true, }, - description: { + image: { type: String, required: true, }, + tech: [ + { + type: mongoose.SchemaTypes.ObjectId, + ref: 'tech', + order: Number, + }, + ], }, { writeConcern: { diff --git a/app/resources/subject/subject.model.ts b/app/resources/subject/subject.model.ts deleted file mode 100644 index 26e7459..0000000 --- a/app/resources/subject/subject.model.ts +++ /dev/null @@ -1,41 +0,0 @@ -import mongoose from 'mongoose'; - -const subjectSchema = new mongoose.Schema( - { - name: { - type: String, - unique: true, - required: true, - }, - title: { - type: String, - unique: true, - required: true, - }, - description: { - type: String, - required: true, - }, - image_url: String, - roadmap: { - type: mongoose.SchemaTypes.ObjectId, - ref: 'roadmap', - required: true, - }, - }, - { - writeConcern: { - w: 'majority', - j: true, - wtimeout: 1000, - }, - timestamps: true, - } -); - -subjectSchema.path('image_url').validate((val: string) => { - const urlRegex = /(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/; - return urlRegex.test(val); -}, 'Invalid URL'); - -export default mongoose.model('subject', subjectSchema); diff --git a/app/resources/subject/subject.router.ts b/app/resources/subject/subject.router.ts deleted file mode 100644 index f50ac89..0000000 --- a/app/resources/subject/subject.router.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Router } from 'express'; -import subjectController from './subject.controller'; - -const router = Router(); - -router - .route('/') - .get(subjectController.getMany) - .post(subjectController.createOne); - -export default router; diff --git a/app/resources/tag/tag.controllers.ts b/app/resources/tag/tag.controllers.ts new file mode 100644 index 0000000..e69de29 diff --git a/app/resources/visit/visit.model.ts b/app/resources/tag/tag.model.ts similarity index 52% rename from app/resources/visit/visit.model.ts rename to app/resources/tag/tag.model.ts index d6b00d9..bd7c5aa 100644 --- a/app/resources/visit/visit.model.ts +++ b/app/resources/tag/tag.model.ts @@ -1,8 +1,11 @@ import mongoose from 'mongoose'; -const visitSchema = new mongoose.Schema( +const tagSchema = new mongoose.Schema( { - created_at: { type: Date, default: Date.now }, + name: { + type: String, + unique: true, + }, }, { writeConcern: { @@ -14,4 +17,4 @@ const visitSchema = new mongoose.Schema( } ); -export default mongoose.model('visit', visitSchema); +export default mongoose.model('tag', tagSchema); diff --git a/app/resources/tag/tag.router.ts b/app/resources/tag/tag.router.ts new file mode 100644 index 0000000..e69de29 diff --git a/app/resources/tech/tech.controllers.ts b/app/resources/tech/tech.controllers.ts new file mode 100644 index 0000000..e69de29 diff --git a/app/resources/tech/tech.model.ts b/app/resources/tech/tech.model.ts new file mode 100644 index 0000000..d32cee5 --- /dev/null +++ b/app/resources/tech/tech.model.ts @@ -0,0 +1,42 @@ +import mongoose from 'mongoose'; + +const techSchema = new mongoose.Schema( + { + name: { + type: String, + unique: true, + }, + description: { + type: String, + required: true, + }, + image: { + type: String, + required: true, + }, + topics: [ + { + type: mongoose.SchemaTypes.ObjectId, + ref: 'topic', + order: Number, + }, + ], + links: [ + { + type: mongoose.SchemaTypes.ObjectId, + ref: 'link', + order: Number, + }, + ], + }, + { + writeConcern: { + w: 'majority', + j: true, + wtimeout: 1000, + }, + timestamps: true, + } +); + +export default mongoose.model('tech', techSchema); diff --git a/app/resources/tech/tech.router.ts b/app/resources/tech/tech.router.ts new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/app/resources/tech/tech.router.ts @@ -0,0 +1 @@ + diff --git a/app/resources/subject/subject.controller.ts b/app/resources/topic/topic.controller.ts similarity index 70% rename from app/resources/subject/subject.controller.ts rename to app/resources/topic/topic.controller.ts index d3b5827..c8598dd 100644 --- a/app/resources/subject/subject.controller.ts +++ b/app/resources/topic/topic.controller.ts @@ -1,8 +1,8 @@ -import subjectModel from './subject.model'; +import topicModel from './topic.model'; export const createOne = async (req: any, res: any) => { try { - const doc = await subjectModel.create(req.body); + const doc = await topicModel.create(req.body); res.status(201).json(doc); } catch (e) { console.error(e); @@ -12,7 +12,7 @@ export const createOne = async (req: any, res: any) => { export const getMany = async (_: any, res: any) => { try { - const docs = await subjectModel.find({}).lean().exec(); + const docs = await topicModel.find({}).lean().exec(); res.status(200).json(docs); } catch (e) { diff --git a/app/resources/topic/topic.model.ts b/app/resources/topic/topic.model.ts index 0244094..73638c8 100644 --- a/app/resources/topic/topic.model.ts +++ b/app/resources/topic/topic.model.ts @@ -2,7 +2,7 @@ import mongoose from 'mongoose'; const topicSchema = new mongoose.Schema( { - name: { + title: { type: String, unique: true, required: true, @@ -11,6 +11,18 @@ const topicSchema = new mongoose.Schema( type: String, required: true, }, + links: [ + { + type: mongoose.SchemaTypes.ObjectId, + ref: 'link', + }, + ], + posts: [ + { + type: mongoose.SchemaTypes.ObjectId, + ref: 'post', + }, + ], }, { writeConcern: { @@ -22,4 +34,9 @@ const topicSchema = new mongoose.Schema( } ); -export default mongoose.model('subject', topicSchema); +/*subjectSchema.path('image_url').validate((val: string) => { + const urlRegex = /(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/; + return urlRegex.test(val); +}, 'Invalid URL');*/ + +export default mongoose.model('topic', topicSchema); diff --git a/app/resources/topic/topic.router.ts b/app/resources/topic/topic.router.ts index 133d601..e69de29 100644 --- a/app/resources/topic/topic.router.ts +++ b/app/resources/topic/topic.router.ts @@ -1,10 +0,0 @@ -// Javascript -// Definicion de javascript - -// Variables - -// link1 (10) -// link2 (8) -// link3 (5) - -// FP diff --git a/app/resources/user/user.controllers.ts b/app/resources/user/user.controllers.ts new file mode 100644 index 0000000..e69de29 diff --git a/app/resources/user/user.model.ts b/app/resources/user/user.model.ts new file mode 100644 index 0000000..5ef67fe --- /dev/null +++ b/app/resources/user/user.model.ts @@ -0,0 +1,38 @@ +import mongoose from 'mongoose'; + +const userSchema = new mongoose.Schema( + { + auth_id: { + type: String, + unique: true, + }, + role: { + type: String, + }, + first_name: { + type: String, + }, + last_name: { + type: String, + }, + email: { + type: String, + }, + topics: [ + { + type: mongoose.SchemaTypes.ObjectId, + ref: 'topic', + }, + ], + }, + { + writeConcern: { + w: 'majority', + j: true, + wtimeout: 1000, + }, + timestamps: true, + } +); + +export default mongoose.model('user', userSchema); diff --git a/app/resources/user/user.router.ts b/app/resources/user/user.router.ts new file mode 100644 index 0000000..e69de29 diff --git a/app/resources/visit/visit.controllers.ts b/app/resources/visit/visit.controllers.ts deleted file mode 100644 index d5298f5..0000000 --- a/app/resources/visit/visit.controllers.ts +++ /dev/null @@ -1,29 +0,0 @@ -import visitModel from './visit.model'; - -export const getCount = async (_: any, res: any) => { - const countVisits = () => { - return new Promise((resolve, reject) => { - visitModel.countDocuments({}, (e, count) => { - if (e) { - reject(e); - } else { - resolve(count); - } - }); - }); - }; - - try { - await visitModel.create({}); - const count = await countVisits(); - - res.status(200).send({ visits: count }); - } catch (e) { - console.error(e); - res.status(400).send({ message: e }); - } -}; - -export default { - getCount, -}; diff --git a/app/resources/visit/visit.router.ts b/app/resources/visit/visit.router.ts deleted file mode 100644 index 78b60b3..0000000 --- a/app/resources/visit/visit.router.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Router } from 'express'; -import { getCount } from './visit.controllers'; - -const router = Router(); - -router.get('/', getCount); - -export default router;