From a8392f632d40ce47a93a423f9b1317f702b9b170 Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Mon, 2 Aug 2021 21:02:36 +0300 Subject: [PATCH] account deletion backend logic --- src/app.ts | 3 +++ src/routes/users.ts | 15 ++++++++++++++ src/tests/integration/users.test.ts | 32 +++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/src/app.ts b/src/app.ts index 5bf91d5..0abb020 100644 --- a/src/app.ts +++ b/src/app.ts @@ -48,6 +48,9 @@ app.use(userRouter.routes()).use(userRouter.allowedMethods()); app.use(docsRouter.routes()).use(docsRouter.allowedMethods()); app.on("error", (err, ctx) => { + if (ctx.response.status == "500") { + console.error(err); + } ctx.body = { error: err.message, data: false, diff --git a/src/routes/users.ts b/src/routes/users.ts index d31725b..467c32d 100644 --- a/src/routes/users.ts +++ b/src/routes/users.ts @@ -1,4 +1,5 @@ import * as Router from "koa-router"; +import { Document } from "~entity/Document"; import { IUserJWT, User } from "~entity/User"; export const userRouter = new Router(); @@ -15,6 +16,20 @@ userRouter.get("/users/user", async (ctx) => { ctx.body = { error: false, data: user.toAuthJSON() }; }); +userRouter.delete("/users/user", async (ctx) => { + if (!ctx.state.user) { + ctx.throw(401); + } + + const jwt = ctx.state.user as IUserJWT; + + const user = await User.findOne(jwt.id); + await Document.remove(await Document.find({ user })); + await user.remove(); + + ctx.body = { error: false }; +}); + userRouter.post("/users/login", async (ctx) => { const request = ctx.request as any; diff --git a/src/tests/integration/users.test.ts b/src/tests/integration/users.test.ts index 45a0914..d168315 100644 --- a/src/tests/integration/users.test.ts +++ b/src/tests/integration/users.test.ts @@ -4,6 +4,7 @@ import * as request from "supertest"; import { getConnection } from "typeorm"; import { app } from "~app"; import { IUserAuthJSON, User } from "~entity/User"; +import { Document } from "~entity/Document"; import { ISeed, seedDB } from "./util"; @@ -41,6 +42,37 @@ describe("users", function () { expect(user).to.deep.equal(seed.user1.toJSON()); }); + it("should delete user", async function () { + const response = await request(callback) + .delete("/users/user") + .set({ + Authorization: `Bearer ${seed.user1.toJWT()}`, + "Content-Type": "application/json", + }) + .expect("Content-Type", /json/) + .expect(200); + + expect(response.body.error).to.be.false; + expect(await User.findOne(seed.user1.id)).to.be.undefined; + expect(await Document.findOne(seed.doc1.id)).to.be.undefined; + }); + + it("should not delete user with wrong jwt", async function () { + const response = await request(callback) + .delete("/users/user") + .set({ + Authorization: `Bearer ${seed.user2.toJWT()}`, + "Content-Type": "application/json", + }) + .expect("Content-Type", /json/) + .expect(200); + + expect(response.body.error).to.be.false; + expect(await User.findOne(seed.user2.id)).to.be.undefined; + expect(await User.findOne(seed.user1.id)).to.not.be.undefined; + expect(await Document.findOne(seed.doc1.id)).to.not.be.undefined; + }); + it("should login user", async function () { const response = await request(callback) .post("/users/login")