chore: separate drawer controller
This commit is contained in:
parent
afcc512095
commit
a34eab7da5
2 changed files with 102 additions and 104 deletions
|
|
@ -1,23 +1,10 @@
|
|||
import {
|
||||
Body,
|
||||
Controller,
|
||||
Delete,
|
||||
Get,
|
||||
Path,
|
||||
Post,
|
||||
Put,
|
||||
Route,
|
||||
Security,
|
||||
SuccessResponse,
|
||||
Tags,
|
||||
} from "tsoa";
|
||||
import { Body, Controller, Delete, Get, Path, Post, Put, Route, SuccessResponse, Tags } from "tsoa";
|
||||
import * as Minio from "minio";
|
||||
import minioClient from "../storage";
|
||||
|
||||
import { EhrFolder } from "../interfaces/ehr-fs";
|
||||
import HttpStatusCode from "../interfaces/http-status";
|
||||
import HttpError from "../interfaces/http-error";
|
||||
import { listFolder, pathExist } from "../utils/minio";
|
||||
import { listFolder } from "../utils/minio";
|
||||
|
||||
@Route("cabinet")
|
||||
export class CabinetController extends Controller {
|
||||
|
|
@ -30,7 +17,6 @@ export class CabinetController extends Controller {
|
|||
|
||||
@Post("/")
|
||||
@Tags("Cabinet")
|
||||
@Security("bearerAuth")
|
||||
@SuccessResponse(HttpStatusCode.CREATED)
|
||||
public async createCabinet(@Body() body: { name: string }) {
|
||||
const uploaded = await minioClient
|
||||
|
|
@ -95,94 +81,7 @@ export class CabinetController extends Controller {
|
|||
stream.on("close", () => minioClient.removeObjects("ehr", objects));
|
||||
stream.on("error", () => reject(new Error("Object storage error occured.")));
|
||||
|
||||
resolve(true);
|
||||
});
|
||||
}
|
||||
|
||||
@Get("/{cabinetName}/drawer")
|
||||
@Tags("Drawer")
|
||||
@SuccessResponse(HttpStatusCode.OK)
|
||||
public listDrawer(@Path() cabinetName: string) {
|
||||
return listFolder(`${cabinetName}/`);
|
||||
}
|
||||
|
||||
@Post("/{cabinetName}/drawer")
|
||||
@Tags("Drawer")
|
||||
@SuccessResponse(HttpStatusCode.NO_CONTENT)
|
||||
public async createDrawer(@Path() cabinetName: string, @Body() body: { name: string }) {
|
||||
if (!(await pathExist(`${cabinetName}/`))) {
|
||||
throw new HttpError(HttpStatusCode.PRECONDITION_FAILED, "Cabinet cannot be found.");
|
||||
}
|
||||
|
||||
const uploaded = await minioClient
|
||||
.putObject("ehr", `${cabinetName}/${body.name}/.keep`, "", 0, {
|
||||
createdAt: new Date().toISOString(),
|
||||
createdBy: "SomeUser",
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
|
||||
if (!uploaded) {
|
||||
throw new Error("Object storage error occured.");
|
||||
}
|
||||
|
||||
this.setStatus(HttpStatusCode.CREATED);
|
||||
return;
|
||||
}
|
||||
|
||||
@Put("/{cabinetName}/drawer/{drawerName}")
|
||||
@Tags("Drawer")
|
||||
@SuccessResponse(HttpStatusCode.NO_CONTENT, "Success")
|
||||
public async editDrawer(
|
||||
@Path() cabinetName: string,
|
||||
@Path() drawerName: string,
|
||||
@Body() body: { name: string },
|
||||
): Promise<void> {
|
||||
const fullpath = `${cabinetName}/${drawerName}/`;
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const stream = minioClient.listObjectsV2("ehr", fullpath, true);
|
||||
|
||||
stream.on("data", (v) => {
|
||||
if (!(v && v.name)) return;
|
||||
|
||||
const destination = `${cabinetName}/${body.name}/${v.name.slice(fullpath.length)}`;
|
||||
const source = `/ehr/${v.name}`;
|
||||
const cond = new Minio.CopyConditions();
|
||||
|
||||
minioClient.copyObject("ehr", destination, source, cond, (e) => {
|
||||
if (e) {
|
||||
return reject(new Error("Failed to move."));
|
||||
}
|
||||
return minioClient.removeObject("ehr", v.name);
|
||||
});
|
||||
});
|
||||
|
||||
stream.on("end", () => {
|
||||
this.setStatus(HttpStatusCode.NO_CONTENT);
|
||||
resolve();
|
||||
});
|
||||
stream.on("error", () => reject(new Error("Object storage error occured.")));
|
||||
});
|
||||
}
|
||||
|
||||
@Delete("/{cabinetName}/drawer/{drawerName}")
|
||||
@Tags("Drawer")
|
||||
@SuccessResponse(HttpStatusCode.OK)
|
||||
public async deleteDrawer(@Path() cabinetName: string, @Path() drawerName: string) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const objects: string[] = [];
|
||||
const stream = minioClient.listObjectsV2("ehr", `${cabinetName}/${drawerName}/`, true);
|
||||
|
||||
stream.on("data", (v) => {
|
||||
if (!(v && v.name)) return;
|
||||
|
||||
objects.push(v.name);
|
||||
});
|
||||
|
||||
stream.on("close", () => minioClient.removeObjects("ehr", objects));
|
||||
stream.on("error", () => reject(new Error("Object storage error occured.")));
|
||||
|
||||
resolve(true);
|
||||
resolve(this.setStatus(HttpStatusCode.NO_CONTENT));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
99
Prototype/server/src/controllers/drawerController.ts
Normal file
99
Prototype/server/src/controllers/drawerController.ts
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
import { Body, Controller, Delete, Get, Path, Post, Put, Route, SuccessResponse, Tags } from "tsoa";
|
||||
import * as Minio from "minio";
|
||||
import minioClient from "../storage";
|
||||
|
||||
import HttpStatusCode from "../interfaces/http-status";
|
||||
import HttpError from "../interfaces/http-error";
|
||||
import { listFolder, pathExist } from "../utils/minio";
|
||||
|
||||
@Route("/cabinet")
|
||||
export class DrawerController extends Controller {
|
||||
@Get("/{cabinetName}/drawer")
|
||||
@Tags("Drawer")
|
||||
@SuccessResponse(HttpStatusCode.OK)
|
||||
public listDrawer(@Path() cabinetName: string) {
|
||||
return listFolder(`${cabinetName}/`);
|
||||
}
|
||||
|
||||
@Post("/{cabinetName}/drawer")
|
||||
@Tags("Drawer")
|
||||
@SuccessResponse(HttpStatusCode.CREATED)
|
||||
public async createDrawer(@Path() cabinetName: string, @Body() body: { name: string }) {
|
||||
if (!(await pathExist(`${cabinetName}/`))) {
|
||||
throw new HttpError(HttpStatusCode.PRECONDITION_FAILED, "Cabinet cannot be found.");
|
||||
}
|
||||
|
||||
const uploaded = await minioClient
|
||||
.putObject("ehr", `${cabinetName}/${body.name}/.keep`, "", 0, {
|
||||
createdAt: new Date().toISOString(),
|
||||
createdBy: "SomeUser",
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
|
||||
if (!uploaded) {
|
||||
throw new Error("Object storage error occured.");
|
||||
}
|
||||
|
||||
return this.setStatus(HttpStatusCode.CREATED);
|
||||
}
|
||||
|
||||
@Put("/{cabinetName}/drawer/{drawerName}")
|
||||
@Tags("Drawer")
|
||||
@SuccessResponse(HttpStatusCode.NO_CONTENT)
|
||||
public async editDrawer(
|
||||
@Path() cabinetName: string,
|
||||
@Path() drawerName: string,
|
||||
@Body() body: { name: string },
|
||||
): Promise<void> {
|
||||
const fullpath = `${cabinetName}/${drawerName}/`;
|
||||
|
||||
if (!(await pathExist(fullpath))) {
|
||||
throw new HttpError(HttpStatusCode.NOT_FOUND, "Resource cannot be found.");
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const stream = minioClient.listObjectsV2("ehr", fullpath, true);
|
||||
|
||||
stream.on("data", (v) => {
|
||||
if (!(v && v.name)) return;
|
||||
|
||||
const destination = `${cabinetName}/${body.name}/${v.name.slice(fullpath.length)}`;
|
||||
const source = `/ehr/${v.name}`;
|
||||
const cond = new Minio.CopyConditions();
|
||||
|
||||
minioClient.copyObject("ehr", destination, source, cond, (e) => {
|
||||
if (e) {
|
||||
return reject(new Error("Failed to move."));
|
||||
}
|
||||
return minioClient.removeObject("ehr", v.name);
|
||||
});
|
||||
});
|
||||
|
||||
stream.on("end", () => {
|
||||
resolve(this.setStatus(HttpStatusCode.NO_CONTENT));
|
||||
});
|
||||
stream.on("error", () => reject(new Error("Object storage error occured.")));
|
||||
});
|
||||
}
|
||||
|
||||
@Delete("/{cabinetName}/drawer/{drawerName}")
|
||||
@Tags("Drawer")
|
||||
@SuccessResponse(HttpStatusCode.NO_CONTENT)
|
||||
public async deleteDrawer(@Path() cabinetName: string, @Path() drawerName: string) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const objects: string[] = [];
|
||||
const stream = minioClient.listObjectsV2("ehr", `${cabinetName}/${drawerName}/`, true);
|
||||
|
||||
stream.on("data", (v) => {
|
||||
if (!(v && v.name)) return;
|
||||
|
||||
objects.push(v.name);
|
||||
});
|
||||
|
||||
stream.on("close", () => minioClient.removeObjects("ehr", objects));
|
||||
stream.on("error", () => reject(new Error("Object storage error occured.")));
|
||||
|
||||
resolve(true);
|
||||
});
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue