feat: tags on page fetch + pageLinks table schema
This commit is contained in:
		| @@ -77,11 +77,11 @@ | ||||
|                   label | ||||
|                   color='teal lighten-5' | ||||
|                   v-for='(tag, idx) in tags' | ||||
|                   :href='`/t/` + tag.slug' | ||||
|                   :key='tag.slug' | ||||
|                   :href='`/t/` + tag.tag' | ||||
|                   :key='tag.tag' | ||||
|                   ) | ||||
|                   v-icon(color='teal', left, small) mdi-label | ||||
|                   span.teal--text.text--darken-2 {{tag.text}} | ||||
|                   span.teal--text.text--darken-2 {{tag.title}} | ||||
|  | ||||
|             v-card.mb-5 | ||||
|               .pa-5 | ||||
|   | ||||
							
								
								
									
										13
									
								
								server/db/migrations-sqlite/2.0.0-beta.293.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								server/db/migrations-sqlite/2.0.0-beta.293.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| exports.up = knex => { | ||||
|   return knex.schema | ||||
|     .createTable('pageLinks', table => { | ||||
|       table.increments('id').primary() | ||||
|       table.integer('sourcePageId').unsigned().references('id').inTable('pages').onDelete('CASCADE') | ||||
|       table.integer('targetPageId').unsigned().references('id').inTable('pages').onDelete('CASCADE') | ||||
|     }) | ||||
| } | ||||
|  | ||||
| exports.down = knex => { | ||||
|   return knex.schema | ||||
|     .dropTableIfExists('pageLinks') | ||||
| } | ||||
							
								
								
									
										19
									
								
								server/db/migrations/2.0.0-beta.293.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								server/db/migrations/2.0.0-beta.293.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| /* global WIKI */ | ||||
|  | ||||
| exports.up = knex => { | ||||
|   const dbCompat = { | ||||
|     charset: (WIKI.config.db.type === `mysql` || WIKI.config.db.type === `mariadb`) | ||||
|   } | ||||
|   return knex.schema | ||||
|     .createTable('pageLinks', table => { | ||||
|       if (dbCompat.charset) { table.charset('utf8mb4') } | ||||
|       table.increments('id').primary() | ||||
|       table.integer('sourcePageId').unsigned().references('id').inTable('pages').onDelete('CASCADE') | ||||
|       table.integer('targetPageId').unsigned().references('id').inTable('pages').onDelete('CASCADE') | ||||
|     }) | ||||
| } | ||||
|  | ||||
| exports.down = knex => { | ||||
|   return knex.schema | ||||
|     .dropTableIfExists('pageLinks') | ||||
| } | ||||
| @@ -63,6 +63,18 @@ module.exports = class Page extends Model { | ||||
|           to: 'tags.id' | ||||
|         } | ||||
|       }, | ||||
|       links: { | ||||
|         relation: Model.ManyToManyRelation, | ||||
|         modelClass: Page, | ||||
|         join: { | ||||
|           from: 'pages.id', | ||||
|           through: { | ||||
|             from: 'pageLinks.sourcePageId', | ||||
|             to: 'pageLinks.targetPageId' | ||||
|           }, | ||||
|           to: 'pages.id' | ||||
|         } | ||||
|       }, | ||||
|       author: { | ||||
|         relation: Model.BelongsToOneRelation, | ||||
|         modelClass: require('./users'), | ||||
| @@ -120,6 +132,12 @@ module.exports = class Page extends Model { | ||||
|       publishEndDate: 'string', | ||||
|       publishStartDate: 'string', | ||||
|       render: 'string', | ||||
|       tags: [ | ||||
|         { | ||||
|           tag: 'string', | ||||
|           title: 'string' | ||||
|         } | ||||
|       ], | ||||
|       title: 'string', | ||||
|       toc: 'string', | ||||
|       updatedAt: 'string' | ||||
| @@ -349,6 +367,7 @@ module.exports = class Page extends Model { | ||||
|  | ||||
|   static async getPageFromDb(opts) { | ||||
|     const queryModeID = _.isNumber(opts) | ||||
|     try { | ||||
|       return WIKI.models.pages.query() | ||||
|         .column([ | ||||
|           'pages.*', | ||||
| @@ -361,6 +380,12 @@ module.exports = class Page extends Model { | ||||
|         ]) | ||||
|         .joinRelation('author') | ||||
|         .joinRelation('creator') | ||||
|         .eagerAlgorithm(Model.JoinEagerAlgorithm) | ||||
|         .eager('tags(selectTags)', { | ||||
|           selectTags: builder => { | ||||
|             builder.select('tag', 'title') | ||||
|           } | ||||
|         }) | ||||
|         .where(queryModeID ? { | ||||
|           'pages.id': opts | ||||
|         } : { | ||||
| @@ -385,6 +410,10 @@ module.exports = class Page extends Model { | ||||
|         //   } | ||||
|         // }) | ||||
|         .first() | ||||
|     } catch (err) { | ||||
|       WIKI.logger.warn(err) | ||||
|       throw err | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   static async savePageToCache(page) { | ||||
| @@ -402,6 +431,7 @@ module.exports = class Page extends Model { | ||||
|       publishEndDate: page.publishEndDate, | ||||
|       publishStartDate: page.publishStartDate, | ||||
|       render: page.render, | ||||
|       tags: page.tags.map(t => _.pick(t, ['tag', 'title'])), | ||||
|       title: page.title, | ||||
|       toc: _.isString(page.toc) ? page.toc : JSON.stringify(page.toc), | ||||
|       updatedAt: page.updatedAt | ||||
|   | ||||
| @@ -13,7 +13,7 @@ block body | ||||
|       path=page.path | ||||
|       title=page.title | ||||
|       description=page.description | ||||
|       tags=page.tags | ||||
|       :tags=page.tags | ||||
|       created-at=page.createdAt | ||||
|       updated-at=page.updatedAt | ||||
|       author-name=page.authorName | ||||
|   | ||||
		Reference in New Issue
	
	Block a user