@@ -3,12 +3,25 @@ import type { Context } from 'koa';
3
3
import { serializePost } from 'database/models/Post' ;
4
4
import db from 'database/db' ;
5
5
import Joi from 'joi' ;
6
- import { validateSchema , generateSlugId , escapeForUrl , extractKeys } from 'lib/common' ;
6
+ import {
7
+ validateSchema ,
8
+ generateSlugId ,
9
+ escapeForUrl ,
10
+ extractKeys ,
11
+ } from 'lib/common' ;
7
12
import { diff } from 'json-diff' ;
8
- import { Post , PostLike , PostsTags , PostsCategories , Category } from 'database/models' ;
9
-
10
-
11
- export const checkPostExistancy = async ( ctx : Context , next : ( ) = > Promise < * > ) : Promise < * > => {
13
+ import {
14
+ Post ,
15
+ PostLike ,
16
+ PostsTags ,
17
+ PostsCategories ,
18
+ Category ,
19
+ } from 'database/models' ;
20
+
21
+ export const checkPostExistancy = async (
22
+ ctx : Context ,
23
+ next : ( ) = > Promise < * > ,
24
+ ) : Promise < * > => {
12
25
const { id } = ctx . params ;
13
26
try {
14
27
const post = await Post . findById ( id ) ;
@@ -54,16 +67,22 @@ export const updatePost = async (ctx: Context): Promise<*> => {
54
67
url_slug : string ,
55
68
thumbnail : string ,
56
69
is_temp : boolean ,
57
- }
70
+ meta : any ,
71
+ } ;
58
72
59
73
const schema = Joi . object ( ) . keys ( {
60
- title : Joi . string ( ) . min ( 1 ) . max ( 120 ) ,
74
+ title : Joi . string ( )
75
+ . min ( 1 )
76
+ . max ( 120 ) ,
61
77
body : Joi . string ( ) . min ( 1 ) ,
62
- thumbnail : Joi . string ( ) . uri ( ) . allow ( null ) ,
78
+ thumbnail : Joi . string ( )
79
+ . uri ( )
80
+ . allow ( null ) ,
63
81
is_temp : Joi . boolean ( ) ,
64
82
categories : Joi . array ( ) . items ( Joi . string ( ) ) ,
65
83
tags : Joi . array ( ) . items ( Joi . string ( ) ) ,
66
84
url_slug : Joi . string ( ) . max ( 130 ) ,
85
+ meta : Joi . object ( ) ,
67
86
} ) ;
68
87
69
88
if ( ! validateSchema ( ctx , schema ) ) {
@@ -78,16 +97,16 @@ export const updatePost = async (ctx: Context): Promise<*> => {
78
97
url_slug : urlSlug ,
79
98
thumbnail,
80
99
is_temp : isTemp ,
100
+ meta,
81
101
} : BodySchema = ( ctx . request . body : any ) ;
82
102
83
103
const generatedUrlSlug = `${title } ${generateSlugId ( ) } `;
84
104
const escapedUrlSlug = escapeForUrl ( urlSlug || generatedUrlSlug ) ;
85
105
86
-
87
106
const { id } = ctx . params ;
88
107
89
- const urlSlugShouldChange = urlSlug !== ctx . post . url_slug
90
- || ( title && ( ctx . post . title !== title ) ) ;
108
+ const urlSlugShouldChange =
109
+ urlSlug !== ctx . post . url_slug || ( title && ctx . post . title !== title ) ;
91
110
92
111
// current !== received -> check urlSlugExistancy
93
112
if ( urlSlugShouldChange ) {
@@ -110,6 +129,7 @@ export const updatePost = async (ctx: Context): Promise<*> => {
110
129
url_slug : urlSlugShouldChange && escapedUrlSlug ,
111
130
thumbnail ,
112
131
is_temp : isTemp ,
132
+ meta ,
113
133
} ;
114
134
115
135
Object . keys ( updateQuery ) . forEach ( ( key ) => {
@@ -125,8 +145,12 @@ export const updatePost = async (ctx: Context): Promise<*> => {
125
145
const tagNames = currentTags . tags . map ( tag => tag . name ) ;
126
146
const tagDiff = diff ( tagNames . sort ( ) , tags . sort ( ) ) || [ ] ;
127
147
128
- const tagsToRemove = tagDiff . filter ( info => info [ 0 ] === '-' ) . map ( info => info [ 1 ] ) ;
129
- const tagsToAdd = tagDiff . filter ( info => info [ 0 ] === '+' ) . map ( info => info [ 1 ] ) ;
148
+ const tagsToRemove = tagDiff
149
+ . filter ( info => info [ 0 ] === '-' )
150
+ . map ( info => info [ 1 ] ) ;
151
+ const tagsToAdd = tagDiff
152
+ . filter ( info => info [ 0 ] === '+' )
153
+ . map ( info => info [ 1 ] ) ;
130
154
131
155
try {
132
156
await PostsTags . removeTagsFromPost ( id , tagsToRemove ) ;
@@ -158,9 +182,14 @@ export const updatePost = async (ctx: Context): Promise<*> => {
158
182
159
183
// check which categories to remove or add
160
184
const currentCategories = await ctx . post . getCategoryIds ( ) ;
161
- const categoryDiff = diff ( currentCategories . sort ( ) , categories . sort ( ) ) || [ ] ;
162
- const categoriesToRemove = categoryDiff . filter ( info => info [ 0 ] === '-' ) . map ( info => info [ 1 ] ) ;
163
- const categoriesToAdd = categoryDiff . filter ( info => info [ 0 ] === '+' ) . map ( info => info [ 1 ] ) ;
185
+ const categoryDiff =
186
+ diff ( currentCategories . sort ( ) , categories . sort ( ) ) || [ ] ;
187
+ const categoriesToRemove = categoryDiff
188
+ . filter ( info => info [ 0 ] === '-' )
189
+ . map ( info => info [ 1 ] ) ;
190
+ const categoriesToAdd = categoryDiff
191
+ . filter ( info => info [ 0 ] === '+' )
192
+ . map ( info => info [ 1 ] ) ;
164
193
165
194
await PostsCategories . removeCategoriesFromPost ( id , categoriesToRemove ) ;
166
195
await PostsCategories . addCategoriesToPost ( id , categoriesToAdd ) ;
@@ -195,7 +224,9 @@ export const deletePost = async (ctx: Context): Promise<*> => {
195
224
try {
196
225
// LATER ON: REMOVE COMMENTS
197
226
await Promise . all ( [
198
- db . getQueryInterface ( ) . bulkDelete ( 'posts_categories' , { fk_post_id : post . id } ) ,
227
+ db
228
+ . getQueryInterface ( )
229
+ . bulkDelete ( 'posts_categories' , { fk_post_id : post . id } ) ,
199
230
db . getQueryInterface ( ) . bulkDelete ( 'posts_tags' , { fk_post_id : post . id } ) ,
200
231
db . getQueryInterface ( ) . bulkDelete ( 'post_likes' , { fk_post_id : post . id } ) ,
201
232
] ) ;
0 commit comments