From d5ea2c6aa6563e5670a70fd30938379b45caab42 Mon Sep 17 00:00:00 2001 From: droplet92 Date: Sun, 21 Mar 2021 18:22:13 +0900 Subject: [PATCH 1/6] =?UTF-8?q?-=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95=20-=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20DELETE=20met?= =?UTF-8?q?hod=20=EC=82=AD=EC=A0=9C=20-=20request=20=EB=B0=8F=20response?= =?UTF-8?q?=20=ED=98=95=EC=8B=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/comment.ts | 200 +++++++++++++++----------------- src/controllers/document.ts | 220 +++++++++++++++++------------------- 2 files changed, 196 insertions(+), 224 deletions(-) diff --git a/src/controllers/comment.ts b/src/controllers/comment.ts index 74ee9a3..6892db9 100644 --- a/src/controllers/comment.ts +++ b/src/controllers/comment.ts @@ -6,48 +6,55 @@ import User from "../entities/user" /* 해당 댓글 GET */ export const GetOne = async (ctx, next) => { const conn: Connection = getConnection() + const { commentId } = ctx.params - try{ + try { const comment: Comment = await conn - .getRepository(Comment) - .findOne(ctx.params.id, { - relations: [ - "author", - "author.profileImage", - "rootDocument", - "likedUsers", - "comments", - "rootComment", - ]}) + .getRepository(Comment) + .findOne(commentId, { + relations: [ + "author", + "author.profileImage", + "rootDocument", + "likedUsers", + "comments", + "rootComment", + ] + }) + /* GET 성공 응답 */ + ctx.response.status = 200 ctx.body = comment } - catch (e){ + catch (e) { ctx.throw(400, e) } - - /* GET 성공 응답 */ - ctx.response.status = 200 } /* 댓글 POST */ export const Post = async (ctx, next) => { const conn: Connection = getConnection() const comment: Comment = new Comment() - const data = ctx.request.body.data + const { data } = ctx.request.body let documentId: number = null + const tokenUser = ctx.state.token.user - try{ - /* 세션의 유저와 relation 설정 */ - comment.author = ctx.state.token.user + try { + /* 유저 불러오기 */ + const user: User = await conn + .getRepository(User) + .findOne(tokenUser.id) + + /* 유저와 relation 설정 */ + comment.author = user /* commentId를 인자로 전달하면 대댓글 relation 설정 */ if (typeof(data.commentId) === "number") { const parent: Comment = await conn - .getRepository(Comment) - .findOne(data.commentId, { - relations: ["rootDocument"], - }) + .getRepository(Comment) + .findOne(data.commentId, { + relations: ["rootDocument"], + }) comment.rootComment = parent documentId = parent.rootDocument.id @@ -55,9 +62,8 @@ export const Post = async (ctx, next) => { /* 게시글과 relation 설정 */ const document: Document = await conn - .getRepository(Document) - .findOneOrFail(documentId - ? documentId : Number(data.documentId)) + .getRepository(Document) + .findOneOrFail(documentId || Number(data.documentId)) comment.rootDocument = document @@ -65,113 +71,83 @@ export const Post = async (ctx, next) => { comment.id = data.id comment.createdAt = data.created_at comment.content = data.text + comment.likedUsers = [] /* 댓글 작성자의 댓글 수 1 증가 */ ++(comment.author.commentsCount) - comment.likedUsers = [] - await conn.manager.save(comment.author) await conn.manager.save(comment) - } - catch (e){ - if (e.message === - "Cannot read property 'user' of undefined"){ - ctx.throw(401, e) - } - ctx.throw(400, e) - } - - /* POST 성공 응답 */ - ctx.body = comment - ctx.response.status = 200 -} - -/* 해당 댓글 DELETE */ -export const DeleteOne = async (ctx, next) => { - const conn: Connection = getConnection() - const leaver: User = await conn.getRepository(User).findOne(0) - - try { - /* DB에서 댓글 불러오기 */ - const comment: Comment = await conn - .getRepository(Comment) - .findOne(ctx.params.id, { - relations: [ - "author", - "likedUsers", - ]}) - - /* 댓글 작성자의 댓글 수 1 감소 */ - --(comment.author.commentsCount) - await conn.manager.save(comment.author) - /* 탈퇴한 유저 relation */ - comment.author = leaver - await conn.manager.save(comment) + /* POST 성공 응답 */ + ctx.response.status = 200 + ctx.body = comment } catch (e) { ctx.throw(400, e) } - - /* DELETE 성공 응답 */ - ctx.response.status = 204 } /* 해당 댓글 좋아요 GET */ export const GetLikes = async (ctx, next) => { const conn: Connection = getConnection() + const { commentId } = ctx.params try{ const comment: Comment = await conn - .getRepository(Comment) - .findOne(ctx.params.id, { - relations: [ - "likedUsers", - "likedUsers.profileImage", - ]}) - - ctx.body = comment.likedUsers + .getRepository(Comment) + .findOne(commentId, { + relations: [ + "likedUsers", + "likedUsers.profileImage", + ] + }) + + /* GET 성공 응답 */ + ctx.response.status = 200 + ctx.body = { likedUsers: comment.likedUsers } } - catch (e){ + catch (e) { ctx.throw(400, e) } - - /* GET 성공 응답 */ - ctx.response.status = 200 } /* 해당 댓글 좋아요 POST */ export const PostLikes = async (ctx, next) => { const conn: Connection = getConnection() + const { commentId } = ctx.params + const tokenUser = ctx.state.token.user try { /* DB에서 댓글 불러오기 */ const comment: Comment = await conn - .getRepository(Comment) - .findOne(ctx.params.id, { - relations: ["likedUsers"], - }) + .getRepository(Comment) + .findOne(commentId, { + relations: ["likedUsers"], + }) - /* 세션 유저 불러오기 */ - const user: User = ctx.state.token.user + /* 유저 불러오기 */ + const user: User = await conn + .getRepository(User) + .findOne(tokenUser.id, { + relations: ["profileImage"], + }) - /* 세션의 유저와 좋아요 relation 설정 */ - comment.likedUsers.push(user) + /* 유저와 좋아요 relation 설정 */ ++(user.likedCommentsCount) + comment.likedUsers.push(user) await conn.manager.save(comment) await conn.manager.save(user) /* POST 성공 응답 */ - ctx.body = comment.likedUsers ctx.response.status = 200 + ctx.body = { + likedUsers: comment.likedUsers, + user, + } } catch (e) { - if (e.message === - "Cannot read property 'user' of undefined"){ - ctx.throw(401, e) - } ctx.throw(400, e) } } @@ -179,35 +155,43 @@ export const PostLikes = async (ctx, next) => { /* 해당 댓글 좋아요 DELETE */ export const CalcelLikes = async (ctx, next) => { const conn: Connection = getConnection() + const { commentId } = ctx.params + const tokenUser = ctx.state.token.user try { /* DB에서 댓글 불러오기 */ const comment: Comment = await conn - .getRepository(Comment) - .findOne(ctx.params.id) + .getRepository(Comment) + .findOne(commentId, { + relations: ["likedUsers"], + }) - /* 세션 유저 불러오기 */ - const user: User = ctx.state.token.user + /* 유저 불러오기 */ + const user: User = await conn + .getRepository(User) + .findOne(tokenUser.id, { + relations: ["profileImage"], + }) - /* 세션의 유저와 좋아요 relation 해제 */ + /* 유저와 좋아요 relation 해제 */ await conn - .createQueryBuilder() - .relation(Comment, "likedUsers") - .of(comment) - .remove(user) + .createQueryBuilder() + .relation(Comment, "likedUsers") + .of(comment) + .remove(user) - /* 세션 유저의 댓글 좋아요 수 1 감소 */ + /* 유저의 댓글 좋아요 수 1 감소 */ --(user.likedCommentsCount) await conn.manager.save(user) + + /* DELETE 성공 응답 */ + ctx.response.status = 200 + ctx.body = { + likedUsers: comment.likedUsers.filter(x => x.id != user.id), + user, + } } catch (e) { - if (e.message === - "Cannot read property 'user' of undefined"){ - ctx.throw(401, e) - } ctx.throw(400, e) } - - /* DELETE 성공 응답 */ - ctx.response.status = 204 } diff --git a/src/controllers/document.ts b/src/controllers/document.ts index 493d128..0667524 100644 --- a/src/controllers/document.ts +++ b/src/controllers/document.ts @@ -5,44 +5,45 @@ import User from "../entities/user" /* 해당 게시글 GET */ export const GetOne = async (ctx, next) => { const conn: Connection = getConnection() + const { documentId } = ctx.params - try{ + try { const document: Document = await conn - .getRepository(Document) - .findOne(ctx.params.id, { - relations: [ - "author", - "author.profileImage", - "comment", - "comment.author", - "comment.author.profileImage", - "comment.comments", - "comment.likedUsers", - "likedUsers", - ]}) - - ctx.body = document + .getRepository(Document) + .findOne(documentId, { + relations: [ + "author", + "author.profileImage", + "comment", + "comment.author", + "comment.author.profileImage", + "comment.comments", + "comment.likedUsers", + "likedUsers", + ] + }) + + /* GET 완료 응답 */ + ctx.response.status = 200 + ctx.body = { document } } catch (e) { ctx.throw(400, e) } - - /* GET 완료 응답 */ - ctx.response.status = 200 } /* 게시글 POST */ export const Post = async (ctx, next) => { const conn: Connection = getConnection() const document: Document = new Document() + const tokenUser = ctx.state.token.user try { - // ctx.state.token.user 바로 저장이 안됨 document.author = await conn - .getRepository(User) - .findOne(ctx.state.token.user.id, { - relations: ['profileImage'] - }) + .getRepository(User) + .findOne(tokenUser.id, { + relations: ['profileImage'] + }) document.content = ctx.request.body.data /* 게시글 작성자의 게시글 수 1 증가 */ @@ -50,76 +51,47 @@ export const Post = async (ctx, next) => { await conn.manager.save(document.author) await conn.manager.save(document) - } - catch (e) { - if (e.message === - "Cannot read property 'user' of undefined"){ - ctx.throw(401, e) - } - ctx.throw(400, e) - } - - /* POST 완료 응답 */ - ctx.body = document - ctx.response.status = 200 -} - -/* 해당 게시글 DELETE */ -export const DeleteOne = async (ctx, next) => { - const conn: Connection = getConnection() - const leaver: User = await conn.getRepository(User).findOne(0) - try { - /* DB에서 게시글 불러오기 */ - const document: Document = await conn - .getRepository(Document) - .findOne(ctx.params.id, { - relations: ["author"], - }) - - /* 게시글 작성자의 게시글 수 1 감소 */ - --(document.author.documentsCount) - - /* 탈퇴한 유저 relation */ - document.author = leaver - await conn.manager.save(document) + /* POST 완료 응답 */ + ctx.response.status = 200 + ctx.body = document } catch (e) { ctx.throw(400, e) } - - /* DELETE 완료 응답 */ - ctx.response.status = 204 } /* 해당 게시글 PATCH */ export const PatchOne = async (ctx, next) => { const conn: Connection = getConnection() + const { documentId } = ctx.params + const { appendedContent } = ctx.request.body.data - try{ + try { const document: Document = await conn - .getRepository(Document) - .findOne(ctx.params.id, { - relations: [ - "author", - "author.profileImage", - "comment", - "comment.author", - "comment.author.profileImage", - "comment.comments", - "comment.likedUsers", - "likedUsers", - ]}) - - document.content += "\n\n" + ctx.request.body.data + .getRepository(Document) + .findOne(documentId, { + relations: [ + "author", + "author.profileImage", + "comment", + "comment.author", + "comment.author.profileImage", + "comment.comments", + "comment.likedUsers", + "likedUsers", + ] + }) + + document.content += "\n\n" + appendedContent await conn.manager.save(document) /* PATCH 완료 응답 */ - ctx.body = document ctx.response.status = 200 + ctx.body = { document } } - catch (e){ + catch (e) { ctx.throw(400, e) } } @@ -127,57 +99,64 @@ export const PatchOne = async (ctx, next) => { /* 해당 게시글 좋아요 GET */ export const GetLikes = async (ctx, next) => { const conn: Connection = getConnection() + const { documentId } = ctx.params - try{ + try { const document: Document = await conn - .getRepository(Document) - .findOne(ctx.params.id, { - relations: [ - "likedUsers", - "likedUsers.profileImage", - ]}) - - ctx.body = document.likedUsers + .getRepository(Document) + .findOne(documentId, { + relations: [ + "likedUsers", + "likedUsers.profileImage", + ] + }) + + /* GET 완료 응답 */ + ctx.response.status = 200 + ctx.body = { likedUsers: document.likedUsers } } - catch (e){ + catch (e) { ctx.throw(400, e) } - /* GET 완료 응답 */ - ctx.response.status = 200 } /* 해당 게시글 좋아요 POST */ export const PostLikes = async (ctx, next) => { const conn: Connection = getConnection() + const { documentId } = ctx.params + const tokenUser = ctx.state.token.user try { /* DB에서 게시글 불러오기 */ const document: Document = await conn - .getRepository(Document) - .findOne(ctx.params.id, { - relations: ["likedUsers"], - }) - - /* 세션 유저 불러오기 */ - const user: User = ctx.state.token.user + .getRepository(Document) + .findOne(documentId, { + relations: ["likedUsers"], + }) + + /* 유저 불러오기 */ + const user: User = await conn + .getRepository(User) + .findOne(tokenUser.id, { + relations: ["profileImage"], + }) /* 게시글과 유저의 좋아요 relation 설정 */ - document.likedUsers.push(user) ++(user.likedDocumentsCount) + document.likedUsers.push(user) await conn.manager.save(user) await conn.manager.save(document) - /* POST 완료 응답 */ - ctx.body = document.likedUsers + /* POST 완료 응답 */ ctx.response.status = 200 + ctx.body = { + likedUsers: document.likedUsers, + user, + } } catch (e) { - if (e.message === - "Cannot read property 'user' of undefined"){ - ctx.throw(401, e) - } ctx.throw(400, e) } } @@ -185,35 +164,44 @@ export const PostLikes = async (ctx, next) => { /* 해당 게시글 좋아요 DELETE */ export const CancelLikes = async (ctx, next) => { const conn: Connection = getConnection() + const { documentId } = ctx.params + const tokenUser = ctx.state.token.user try { /* DB에서 게시글 불러오기 */ const document: Document = await conn - .getRepository(Document) - .findOne(ctx.params.id) - - /* 세션 유저 불러오기 */ - const user: User = ctx.state.token.user + .getRepository(Document) + .findOne(documentId, { + relations: ["likedUsers"], + }) + + /* 유저 불러오기 */ + const user: User = await conn + .getRepository(User) + .findOne(tokenUser.id, { + relations: ["profileImage"], + }) /* 게시글과 유저의 좋아요 relation 해제 */ await conn - .createQueryBuilder() - .relation(Document, "likedUsers") - .of(document) - .remove(user) + .createQueryBuilder() + .relation(Document, "likedUsers") + .of(document) + .remove(user) /* 게시글에 좋아요한 수 1 감소 */ --(user.likedDocumentsCount) await conn.manager.save(user) + + /* DELETE 완료 응답 */ + ctx.response.status = 200 + ctx.body = { + likedUsers: document.likedUsers.filter(x => x.id != user.id), + user, + } } catch (e) { - if (e.message === - "Cannot read property 'user' of undefined"){ - ctx.throw(401, e) - } ctx.throw(400, e) } - /* DELETE 완료 응답 */ - ctx.response.status = 204 } From a3642f536e2aaab074d1a51290e49139b1eed1e5 Mon Sep 17 00:00:00 2001 From: droplet92 Date: Sun, 21 Mar 2021 18:22:48 +0900 Subject: [PATCH 2/6] =?UTF-8?q?=EC=9E=98=EB=AA=BB=EB=90=9C=20=EC=A3=BC?= =?UTF-8?q?=EC=84=9D=20=EB=82=B4=EC=9A=A9=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/user.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/user.ts b/src/controllers/user.ts index 7a705cd..98680f5 100644 --- a/src/controllers/user.ts +++ b/src/controllers/user.ts @@ -7,7 +7,7 @@ import AuthenticationToken from "../entities/authenticationToken" import User from "../entities/user" import { Authenticate } from "../auth" -/* 세션 유저 GET */ +/* 인증된 유저 GET */ export const GetAuthenticated = async (ctx, next) => { const conn: Connection = getConnection() From 67fb35de0ad5973e58f9c8ec903fd7c30100f5b9 Mon Sep 17 00:00:00 2001 From: droplet92 Date: Sun, 21 Mar 2021 21:15:09 +0900 Subject: [PATCH 3/6] =?UTF-8?q?=EA=B8=80,=20=EB=8C=93=EA=B8=80,=20?= =?UTF-8?q?=EB=8C=80=EB=8C=93=EA=B8=80=EC=9D=B4=20=EC=A0=95=EC=83=81?= =?UTF-8?q?=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EC=9E=91=EC=84=B1=EB=90=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/comment.ts | 62 +++++++++++++++++-------------------- src/controllers/document.ts | 41 ++++++++++++------------ 2 files changed, 50 insertions(+), 53 deletions(-) diff --git a/src/controllers/comment.ts b/src/controllers/comment.ts index 6892db9..9a23bc8 100644 --- a/src/controllers/comment.ts +++ b/src/controllers/comment.ts @@ -6,12 +6,12 @@ import User from "../entities/user" /* 해당 댓글 GET */ export const GetOne = async (ctx, next) => { const conn: Connection = getConnection() - const { commentId } = ctx.params + const { id } = ctx.params try { const comment: Comment = await conn .getRepository(Comment) - .findOne(commentId, { + .findOne(id, { relations: [ "author", "author.profileImage", @@ -24,7 +24,7 @@ export const GetOne = async (ctx, next) => { /* GET 성공 응답 */ ctx.response.status = 200 - ctx.body = comment + ctx.body = { comment } } catch (e) { ctx.throw(400, e) @@ -35,43 +35,37 @@ export const GetOne = async (ctx, next) => { export const Post = async (ctx, next) => { const conn: Connection = getConnection() const comment: Comment = new Comment() - const { data } = ctx.request.body - let documentId: number = null const tokenUser = ctx.state.token.user + const { documentId, commentId, content } = ctx.request.body try { - /* 유저 불러오기 */ + /* 유저와 relation 설정 */ const user: User = await conn .getRepository(User) - .findOne(tokenUser.id) - - /* 유저와 relation 설정 */ + .findOne(tokenUser.id, { + relations: ["profileImage"], + }) comment.author = user - /* commentId를 인자로 전달하면 대댓글 relation 설정 */ - if (typeof(data.commentId) === "number") { + /* 나머지 required 정보 입력 */ + comment.content = content + comment.likedUsers = [] + + if (commentId) { // 대댓글인 경우 const parent: Comment = await conn .getRepository(Comment) - .findOne(data.commentId, { + .findOne(commentId, { relations: ["rootDocument"], }) - + comment.rootDocument = parent.rootDocument comment.rootComment = parent - documentId = parent.rootDocument.id } - - /* 게시글과 relation 설정 */ - const document: Document = await conn - .getRepository(Document) - .findOneOrFail(documentId || Number(data.documentId)) - - comment.rootDocument = document - - /* 나머지 required 정보 입력 */ - comment.id = data.id - comment.createdAt = data.created_at - comment.content = data.text - comment.likedUsers = [] + else if (documentId) { + const parent: Document = await conn + .getRepository(Document) + .findOne(documentId) + comment.rootDocument = parent + } /* 댓글 작성자의 댓글 수 1 증가 */ ++(comment.author.commentsCount) @@ -81,7 +75,7 @@ export const Post = async (ctx, next) => { /* POST 성공 응답 */ ctx.response.status = 200 - ctx.body = comment + ctx.body = { comment } } catch (e) { ctx.throw(400, e) @@ -91,12 +85,12 @@ export const Post = async (ctx, next) => { /* 해당 댓글 좋아요 GET */ export const GetLikes = async (ctx, next) => { const conn: Connection = getConnection() - const { commentId } = ctx.params + const { id } = ctx.params try{ const comment: Comment = await conn .getRepository(Comment) - .findOne(commentId, { + .findOne(id, { relations: [ "likedUsers", "likedUsers.profileImage", @@ -115,14 +109,14 @@ export const GetLikes = async (ctx, next) => { /* 해당 댓글 좋아요 POST */ export const PostLikes = async (ctx, next) => { const conn: Connection = getConnection() - const { commentId } = ctx.params + const { id } = ctx.params const tokenUser = ctx.state.token.user try { /* DB에서 댓글 불러오기 */ const comment: Comment = await conn .getRepository(Comment) - .findOne(commentId, { + .findOne(id, { relations: ["likedUsers"], }) @@ -155,14 +149,14 @@ export const PostLikes = async (ctx, next) => { /* 해당 댓글 좋아요 DELETE */ export const CalcelLikes = async (ctx, next) => { const conn: Connection = getConnection() - const { commentId } = ctx.params + const { id } = ctx.params const tokenUser = ctx.state.token.user try { /* DB에서 댓글 불러오기 */ const comment: Comment = await conn .getRepository(Comment) - .findOne(commentId, { + .findOne(id, { relations: ["likedUsers"], }) diff --git a/src/controllers/document.ts b/src/controllers/document.ts index 0667524..866b622 100644 --- a/src/controllers/document.ts +++ b/src/controllers/document.ts @@ -5,12 +5,12 @@ import User from "../entities/user" /* 해당 게시글 GET */ export const GetOne = async (ctx, next) => { const conn: Connection = getConnection() - const { documentId } = ctx.params + const { id } = ctx.params try { const document: Document = await conn .getRepository(Document) - .findOne(documentId, { + .findOne(id, { relations: [ "author", "author.profileImage", @@ -37,6 +37,7 @@ export const Post = async (ctx, next) => { const conn: Connection = getConnection() const document: Document = new Document() const tokenUser = ctx.state.token.user + const { content } = ctx.request.body try { document.author = await conn @@ -44,7 +45,9 @@ export const Post = async (ctx, next) => { .findOne(tokenUser.id, { relations: ['profileImage'] }) - document.content = ctx.request.body.data + document.content = content + document.comments = [] + document.likedUsers = [] /* 게시글 작성자의 게시글 수 1 증가 */ ++(document.author.documentsCount) @@ -54,7 +57,7 @@ export const Post = async (ctx, next) => { /* POST 완료 응답 */ ctx.response.status = 200 - ctx.body = document + ctx.body = { document } } catch (e) { ctx.throw(400, e) @@ -64,26 +67,26 @@ export const Post = async (ctx, next) => { /* 해당 게시글 PATCH */ export const PatchOne = async (ctx, next) => { const conn: Connection = getConnection() - const { documentId } = ctx.params - const { appendedContent } = ctx.request.body.data + const { id, content } = ctx.request.body try { const document: Document = await conn .getRepository(Document) - .findOne(documentId, { + .findOne(id, { relations: [ "author", "author.profileImage", - "comment", - "comment.author", - "comment.author.profileImage", - "comment.comments", - "comment.likedUsers", + "comments", + "comments.author", + "comments.author.profileImage", + "comments.comments", + "comments.likedUsers", "likedUsers", ] }) + console.log(id, content, document.content) - document.content += "\n\n" + appendedContent + document.content += "\n\n" + content await conn.manager.save(document) @@ -99,12 +102,12 @@ export const PatchOne = async (ctx, next) => { /* 해당 게시글 좋아요 GET */ export const GetLikes = async (ctx, next) => { const conn: Connection = getConnection() - const { documentId } = ctx.params + const { id } = ctx.params try { const document: Document = await conn .getRepository(Document) - .findOne(documentId, { + .findOne(id, { relations: [ "likedUsers", "likedUsers.profileImage", @@ -124,14 +127,14 @@ export const GetLikes = async (ctx, next) => { /* 해당 게시글 좋아요 POST */ export const PostLikes = async (ctx, next) => { const conn: Connection = getConnection() - const { documentId } = ctx.params + const { id } = ctx.params const tokenUser = ctx.state.token.user try { /* DB에서 게시글 불러오기 */ const document: Document = await conn .getRepository(Document) - .findOne(documentId, { + .findOne(id, { relations: ["likedUsers"], }) @@ -164,14 +167,14 @@ export const PostLikes = async (ctx, next) => { /* 해당 게시글 좋아요 DELETE */ export const CancelLikes = async (ctx, next) => { const conn: Connection = getConnection() - const { documentId } = ctx.params + const { id } = ctx.params const tokenUser = ctx.state.token.user try { /* DB에서 게시글 불러오기 */ const document: Document = await conn .getRepository(Document) - .findOne(documentId, { + .findOne(id, { relations: ["likedUsers"], }) From 9c9b1d5defd7d40b805742800b49d4ebb3b63707 Mon Sep 17 00:00:00 2001 From: droplet92 Date: Sun, 21 Mar 2021 21:16:59 +0900 Subject: [PATCH 4/6] =?UTF-8?q?=EB=A7=88=EC=9D=B4=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=ED=83=80=EC=9E=84=EB=9D=BC=EC=9D=B8=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=EC=9D=84=20=EC=9C=84=ED=95=9C=20API=20=EC=A3=BC?= =?UTF-8?q?=EC=86=8C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/middleware/route.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/middleware/route.ts b/src/middleware/route.ts index 4c68e0b..44ed4ed 100644 --- a/src/middleware/route.ts +++ b/src/middleware/route.ts @@ -55,19 +55,20 @@ router.patch("/user", User.PatchAll) router.get("/user/:id/document", User.GetDocuments) router.get("/user/:id/comment", User.GetComment) -router.get("/timeline/:page", Timeline.GetTimeline) +router.get("/timeline", Timeline.GetTimeline) +router.get("/timeline/:username", Timeline.GetUserTimeline) +router.get("/timeline/:username/likes", Timeline.GetLikedTimeline) +router.get("/timeline/:username/commented", Timeline.GetCommentedTimeline) router.get("/document/:id", Document.GetOne) router.post("/document", Document.Post) -router.delete("/document/:id", Document.DeleteOne) -router.patch("/document/:id", Document.PatchOne) +router.patch("/document", Document.PatchOne) router.get("/document/:id/likeIt", Document.GetLikes) router.post("/document/:id/likeIt", Document.PostLikes) router.delete("/document/:id/likeIt", Document.CancelLikes) router.get("/comment/:id", Comment.GetOne) router.post("/comment", Comment.Post) -router.delete("/comment/:id", Comment.DeleteOne) router.get("/comment/:id/likeIt", Comment.GetLikes) router.post("/comment/:id/likeIt", Comment.PostLikes) router.delete("/comment/:id/likeIt", Comment.CalcelLikes) From 8cbfcffa3675fce6ee964c7c3d8b521b8b5308fa Mon Sep 17 00:00:00 2001 From: droplet92 Date: Sun, 21 Mar 2021 21:31:21 +0900 Subject: [PATCH 5/6] =?UTF-8?q?=ED=83=80=EC=9E=84=EB=9D=BC=EC=9D=B8=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20=EB=B0=8F=20=EB=A7=88=EC=9D=B4=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=ED=83=80=EC=9E=84=EB=9D=BC=EC=9D=B8=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20-=20=ED=9A=8C=EC=9B=90=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84/=EC=95=84=EC=9D=B4=EB=94=94/=EA=B8=80/=EB=8C=93?= =?UTF-8?q?=EA=B8=80=EB=A1=9C=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20-=20=EC=9E=91=EC=84=B1=ED=95=9C=20=EA=B8=80,=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=ED=95=9C=20=EA=B8=80,=20=EB=8C=93?= =?UTF-8?q?=EA=B8=80=EB=8B=A8=20=EA=B8=80=20=ED=83=80=EC=9E=84=EB=9D=BC?= =?UTF-8?q?=EC=9D=B8=20=EA=B0=80=EC=A0=B8=EC=98=A4=EA=B8=B0=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/controllers/timeline.ts | 189 +++++++++++++++++++--- yarn.lock | 303 +++++++++++++++++++----------------- 3 files changed, 333 insertions(+), 161 deletions(-) diff --git a/package.json b/package.json index 710098d..142919e 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "koa-router": "^7.2.1", "koa-views": "^7.0.0", "sqlite3": "^5.0.2", - "typeorm": "next", + "typeorm": "0.2.3", "typescript": "^4.2.3" }, "devDependencies": { diff --git a/src/controllers/timeline.ts b/src/controllers/timeline.ts index 03db73b..d8d0700 100644 --- a/src/controllers/timeline.ts +++ b/src/controllers/timeline.ts @@ -1,31 +1,41 @@ -import { Connection, getConnection } from "typeorm" +import { Connection, getConnection, Like, SelectQueryBuilder, Brackets } from "typeorm" import Document from "../entities/document" /* 타임라인 GET */ export const GetTimeline = async (ctx, next) => { const conn: Connection = getConnection() + const { page, keyword } = ctx.query + const query = Like(`%${keyword}%`) - try{ - const timeline: Document[] = await conn - .getRepository(Document) - .find({ - order: { - id: -1, - }, - relations: [ - "author", - "author.profileImage", - "comments", - "comments.author", - "comments.author.profileImage", - "comments.comments", - "comments.likedUsers", - "likedUsers", - ], - skip: (ctx.params.page - 1) * 5, - take: 5, - }) + try { + let queryBuilder: SelectQueryBuilder = conn + .getRepository(Document) + .createQueryBuilder('document') + .leftJoinAndSelect('document.author', 'author') + .leftJoinAndSelect('author.profileImage', 'profileImage') + .leftJoinAndSelect('document.comments', 'comments') + .leftJoinAndSelect('comments.author', 'commentAuthor') + .leftJoinAndSelect('commentAuthor.profileImage', 'commentAuthorProfileImage') + .leftJoinAndSelect('comments.comments', 'replies') + .leftJoinAndSelect('replies.author', 'repliyAuthor') + .leftJoinAndSelect('document.likedUsers', 'likedUsers') + .leftJoinAndSelect('comments.likedUsers', 'commentsLikedUsers') + .orderBy('document.id', 'DESC') + .skip((page - 1) * 5) + .take(5) + + if (keyword) { + queryBuilder = queryBuilder + .where(new Brackets(qb => { + qb.where('author.username = :query', { query }) + qb.orWhere('commentAuthor.username = :query', { query }) + qb.orWhere('repliyAuthor.username = :query', { query }) + qb.orWhere('content = :query', { query }) + qb.orWhere('comments.content = :query', { query }) + })) + } + const timeline: Document[] = await queryBuilder.getMany() ctx.body = timeline } catch (e){ @@ -35,3 +45,140 @@ export const GetTimeline = async (ctx, next) => { /* GET 완료 응답 */ ctx.response.status = 200 } + +export const GetUserTimeline = async (ctx, next) => { + const conn: Connection = getConnection() + const { username } = ctx.params + const { page, keyword } = ctx.query + const query = Like(`%${keyword}%`) + + try { + let queryBuilder: SelectQueryBuilder = conn + .getRepository(Document) + .createQueryBuilder('document') + .leftJoinAndSelect('document.author', 'author') + .leftJoinAndSelect('author.profileImage', 'profileImage') + .leftJoinAndSelect('document.comments', 'comments') + .leftJoinAndSelect('comments.author', 'commentAuthor') + .leftJoinAndSelect('commentAuthor.profileImage', 'commentAuthorProfileImage') + .leftJoinAndSelect('comments.comments', 'replies') + .leftJoinAndSelect('replies.author', 'repliyAuthor') + .leftJoinAndSelect('document.likedUsers', 'likedUsers') + .leftJoinAndSelect('comments.likedUsers', 'commentsLikedUsers') + .orderBy('document.id', 'DESC') + .skip((page - 1) * 5) + .take(5) + .where('author.username = :username', { username }) + + if (keyword) { + queryBuilder = queryBuilder + .andWhere(new Brackets(qb => { + qb.where('commentAuthor.username = :query', { query }) + qb.orWhere('repliyAuthor.username = :query', { query }) + qb.orWhere('content = :query', { query }) + qb.orWhere('comments.content = :query', { query }) + })) + } + + const timeline: Document[] = await queryBuilder.getMany() + ctx.body = timeline + } + catch (e){ + ctx.throw(400, e) + } + + /* GET 완료 응답 */ + ctx.response.status = 200 +} + +export const GetLikedTimeline = async (ctx, next) => { + const conn: Connection = getConnection() + const { username } = ctx.params + const { page, keyword } = ctx.query + const query = Like(`%${keyword}%`) + + try { + let queryBuilder: SelectQueryBuilder = conn + .getRepository(Document) + .createQueryBuilder('document') + .leftJoinAndSelect('document.author', 'author') + .leftJoinAndSelect('author.profileImage', 'profileImage') + .leftJoinAndSelect('document.comments', 'comments') + .leftJoinAndSelect('comments.author', 'commentAuthor') + .leftJoinAndSelect('commentAuthor.profileImage', 'commentAuthorProfileImage') + .leftJoinAndSelect('comments.comments', 'replies') + .leftJoinAndSelect('replies.author', 'repliyAuthor') + .leftJoinAndSelect('document.likedUsers', 'likedUsers') + .leftJoinAndSelect('comments.likedUsers', 'commentsLikedUsers') + .orderBy('document.id', 'DESC') + .skip((page - 1) * 5) + .take(5) + .where('likedUsers.username = :username', { username }) + + if (keyword) { + queryBuilder = queryBuilder + .andWhere(new Brackets(qb => { + qb.where('author.username = :query', { query }) + qb.orWhere('repliyAuthor.username = :query', { query }) + qb.orWhere('content = :query', { query }) + qb.orWhere('comments.content = :query', { query }) + })) + } + + const timeline: Document[] = await queryBuilder.getMany() + ctx.body = timeline + } + catch (e){ + ctx.throw(400, e) + } + + /* GET 완료 응답 */ + ctx.response.status = 200 +} + +export const GetCommentedTimeline = async (ctx, next) => { + const conn: Connection = getConnection() + const { username } = ctx.params + const { page, keyword } = ctx.query + const query = Like(`%${keyword}%`) + + try { + let queryBuilder: SelectQueryBuilder = conn + .getRepository(Document) + .createQueryBuilder('document') + .leftJoinAndSelect('document.author', 'author') + .leftJoinAndSelect('author.profileImage', 'profileImage') + .leftJoinAndSelect('document.comments', 'comments') + .leftJoinAndSelect('comments.author', 'commentAuthor') + .leftJoinAndSelect('commentAuthor.profileImage', 'commentAuthorProfileImage') + .leftJoinAndSelect('comments.comments', 'replies') + .leftJoinAndSelect('replies.author', 'repliyAuthor') + .leftJoinAndSelect('document.likedUsers', 'likedUsers') + .leftJoinAndSelect('comments.likedUsers', 'commentsLikedUsers') + .orderBy('document.id', 'DESC') + .skip((page - 1) * 5) + .take(5) + .where(new Brackets(qb => { + qb.where('commentAuthor.username = :username', { username }) + qb.orWhere('repliyAuthor.username = :username', { username }) + })) + + if (keyword) { + queryBuilder = queryBuilder + .andWhere(new Brackets(qb => { + qb.where('author.username = :query', { query }) + qb.orWhere('content = :query', { query }) + qb.orWhere('comments.content = :query', { query }) + })) + } + + const timeline: Document[] = await queryBuilder.getMany() + ctx.body = timeline + } + catch (e){ + ctx.throw(400, e) + } + + /* GET 완료 응답 */ + ctx.response.status = 200 +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 1817ff8..d5e326a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -161,6 +161,11 @@ balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -199,7 +204,15 @@ buffer-equal-constant-time@1.0.1: resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= -builtin-modules@^1.0.0, builtin-modules@^1.1.1: +buffer@^5.1.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -248,7 +261,7 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.1, chalk@^2.3.0: +chalk@^2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" dependencies: @@ -256,6 +269,15 @@ chalk@^2.0.1, chalk@^2.3.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^2.3.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + check-error@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" @@ -285,14 +307,6 @@ cli-highlight@^1.2.3: parse5 "^3.0.3" yargs "^10.0.3" -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - cliui@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" @@ -409,6 +423,17 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -501,9 +526,10 @@ doctrine@0.7.2: esutils "^1.1.6" isarray "0.0.1" -dotenv@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" +dotenv@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== ecc-jsbn@~0.1.1: version "0.1.2" @@ -539,11 +565,12 @@ encodeurl@^1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: - is-arrayish "^0.2.1" + once "^1.4.0" escape-html@^1.0.3: version "1.0.3" @@ -579,6 +606,19 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -612,7 +652,7 @@ figlet@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.2.0.tgz#6c46537378fab649146b5a6143dda019b430b410" -find-up@^2.0.0, find-up@^2.1.0: +find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" dependencies: @@ -705,6 +745,13 @@ get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -783,10 +830,6 @@ highlight.js@^9.6.0: resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.5.tgz#d18a359867f378c138d6819edfc2a8acd5f29825" integrity sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA== -hosted-git-info@^2.1.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" - http-assert@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.4.1.tgz#c5f725d677aa7e873ef736199b89686cceb37878" @@ -859,6 +902,11 @@ iconv-lite@^0.4.4: dependencies: safer-buffer ">= 2.1.2 < 3" +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore-walk@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" @@ -900,20 +948,15 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - is-extendable@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -974,7 +1017,7 @@ js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.7.0, js-yaml@^3.8.4: +js-yaml@^3.11.0, js-yaml@^3.7.0: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -1179,14 +1222,12 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -load-json-file@^2.0.0: +lcid@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" + invert-kv "^2.0.0" locate-path@^2.0.0: version "2.0.0" @@ -1261,6 +1302,13 @@ make-error@^1.1.1: version "1.3.4" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.4.tgz#19978ed575f9e9545d2ff8c13e33b5d18a67d535" +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -1271,6 +1319,15 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + methods@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -1313,6 +1370,11 @@ mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -1431,6 +1493,11 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + node-addon-api@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.1.0.tgz#98b21931557466c6729e51cb77cd39c965f42239" @@ -1495,15 +1562,6 @@ nopt@^5.0.0: dependencies: abbrev "1" -normalize-package-data@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - npm-bundled@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" @@ -1560,7 +1618,7 @@ on-finished@^2.3.0: dependencies: ee-first "1.1.1" -once@^1.3.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -1583,6 +1641,15 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + os-tmpdir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -1608,10 +1675,20 @@ p-cancelable@^2.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.0.0.tgz#4a3740f5bdaf5ed5d7c3e34882c6fb5d6b266a6e" integrity sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg== +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + p-limit@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" @@ -1640,12 +1717,6 @@ parent-require@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parent-require/-/parent-require-1.0.0.tgz#746a167638083a860b0eef6732cb27ed46c32977" -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - parse5@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" @@ -1669,7 +1740,7 @@ path-is-absolute@1.0.1, path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -1683,12 +1754,6 @@ path-to-regexp@^1.1.1: dependencies: isarray "0.0.1" -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - pathval@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" @@ -1698,10 +1763,6 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -1732,6 +1793,14 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -1765,21 +1834,6 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - readable-stream@^2.0.6: version "2.3.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" @@ -1792,9 +1846,10 @@ readable-stream@^2.0.6: string_decoder "~1.0.3" util-deprecate "~1.0.1" -reflect-metadata@^0.1.10: - version "0.1.12" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.12.tgz#311bf0c6b63cd782f228a81abe146a2bfa9c56f2" +reflect-metadata@^0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== request@^2.87.0: version "2.88.2" @@ -1880,7 +1935,7 @@ sax@>=0.6.0, sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@^5.6.0: +semver@^5.1.0, semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -1948,28 +2003,6 @@ source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" -spdx-correct@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -2042,10 +2075,6 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -2223,22 +2252,24 @@ type-is@^1.6.16: media-typer "0.3.0" mime-types "~2.1.24" -typeorm@next: - version "0.2.0-alpha.27" - resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.0-alpha.27.tgz#a8bfe9041380de1dcb276d8e2d9f768443387d6f" +typeorm@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.3.tgz#55ef91dfc71c41b590a53b80c17c56742b9deb9d" + integrity sha512-H4WE50H609Ufsm6H8Zz1UqN8ThqNa0es/FM+YLTNCsfMn9VQ4F6eoNa3KUCo0TcAWSC9stannfpZxZW2sHvZmg== dependencies: app-root-path "^2.0.1" - chalk "^2.0.1" + buffer "^5.1.0" + chalk "^2.3.2" cli-highlight "^1.2.3" debug "^3.1.0" - dotenv "^4.0.0" + dotenv "^5.0.1" glob "^7.1.2" - js-yaml "^3.8.4" + js-yaml "^3.11.0" mkdirp "^0.5.1" - reflect-metadata "^0.1.10" + reflect-metadata "^0.1.12" xml2js "^0.4.17" yargonaut "^1.1.2" - yargs "^9.0.1" + yargs "^11.1.0" typescript@^4.2.3: version "4.2.3" @@ -2270,13 +2301,6 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -validate-npm-package-license@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - vary@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -2361,18 +2385,19 @@ yargonaut@^1.1.2: figlet "^1.1.1" parent-require "^1.0.0" -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - dependencies: - camelcase "^4.1.0" - yargs-parser@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" dependencies: camelcase "^4.1.0" +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= + dependencies: + camelcase "^4.1.0" + yargs@^10.0.3: version "10.1.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" @@ -2390,23 +2415,23 @@ yargs@^10.0.3: y18n "^3.2.1" yargs-parser "^8.1.0" -yargs@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" +yargs@^11.1.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" + integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" + cliui "^4.0.0" decamelize "^1.1.1" + find-up "^2.1.0" get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" + os-locale "^3.1.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" string-width "^2.0.0" which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^7.0.0" + yargs-parser "^9.0.2" ylru@^1.2.0: version "1.2.1" From 3c26906a07284c6e4afd4ff2016d20591e960f21 Mon Sep 17 00:00:00 2001 From: sGOM Date: Mon, 22 Mar 2021 01:09:03 +0900 Subject: [PATCH 6/6] Update document.ts --- src/controllers/document.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/controllers/document.ts b/src/controllers/document.ts index 866b622..33114e6 100644 --- a/src/controllers/document.ts +++ b/src/controllers/document.ts @@ -84,7 +84,6 @@ export const PatchOne = async (ctx, next) => { "likedUsers", ] }) - console.log(id, content, document.content) document.content += "\n\n" + content