From 604753b3ff38d3292b06bd37b6d1f2b37c9470cf Mon Sep 17 00:00:00 2001 From: garrettmills Date: Tue, 13 Oct 2020 09:24:28 -0500 Subject: [PATCH] Include code snippets in full-text search (#6) --- app/IonicUnit.js | 4 +++- app/controllers/api/v1/FormCode.controller.js | 2 +- app/controllers/api/v1/Misc.controller.js | 22 +++++++++++++++++++ app/models/api/Codium.model.js | 6 ++++- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/app/IonicUnit.js b/app/IonicUnit.js index 7f1c3fe..4def528 100644 --- a/app/IonicUnit.js +++ b/app/IonicUnit.js @@ -43,8 +43,10 @@ class IonicUnit extends Unit { const databases = this.scaffold.collection('api_db_Database') await databases.createIndex({ Name: 'text' }) - } + const codiums = this.scaffold.collection('api_Codium') + await codiums.createIndex({ code: 'text' }) + } } module.exports = exports = IonicUnit diff --git a/app/controllers/api/v1/FormCode.controller.js b/app/controllers/api/v1/FormCode.controller.js index e3363ac..630b242 100644 --- a/app/controllers/api/v1/FormCode.controller.js +++ b/app/controllers/api/v1/FormCode.controller.js @@ -66,7 +66,7 @@ class FormCode extends Controller { if ( !code ) return res.status(404).message('Unable to find code with that ID.').api({}) code.code = req.body.code - code.language = req.body.language + code.Language = req.body.Language code.NodeId = node.UUID code.PageId = page.UUID await code.save() diff --git a/app/controllers/api/v1/Misc.controller.js b/app/controllers/api/v1/Misc.controller.js index 4b61039..504e7a6 100644 --- a/app/controllers/api/v1/Misc.controller.js +++ b/app/controllers/api/v1/Misc.controller.js @@ -32,6 +32,7 @@ class Misc extends Controller { const Page = this.models.get('api:Page') const Node = this.models.get('api:Node') + const Codium = this.models.get('api:Codium') const all_user_page_ids = (await req.user.get_accessible_pages()).map(x => x.UUID) const results = [] @@ -73,6 +74,27 @@ class Misc extends Controller { }) } + const matching_codiums = await Codium.find({ + PageId: { $in: all_user_page_ids }, + $text: { $search: query }, + }); + + for ( const codium of matching_codiums ) { + const page = await codium.page + results.push({ + title: codium.code, + short_title: `${codium.code.slice(0, snip_length)}${codium.code.length > snip_length ? '...' : ''}`, + type: 'code', + id: codium.NodeId, + associated: { + title: page.Name, + short_title: `${page.Name.slice(0, snip_length)}${page.Name.length > snip_length ? '...' : ''}`, + type: 'page', + id: page.UUID, + } + }) + } + return res.api({results}) } } diff --git a/app/models/api/Codium.model.js b/app/models/api/Codium.model.js index bbf5bcf..d8c72b4 100644 --- a/app/models/api/Codium.model.js +++ b/app/models/api/Codium.model.js @@ -10,7 +10,7 @@ class Codium extends Model { static get schema() { // Return a flitter-orm schema here. return { - language: {type: String, default: 'javascript'}, + Language: {type: String, default: 'javascript'}, NodeId: String, PageId: String, code: String, @@ -19,6 +19,10 @@ class Codium extends Model { } // Static and instance methods can go here + get page() { + const Page = require('./Page.model') + return this.belongs_to_one(Page, 'PageId', 'UUID') + } } module.exports = exports = Codium