feat: upload file
This commit is contained in:
parent
704814c05a
commit
df6179efa8
1 changed files with 103 additions and 3 deletions
|
|
@ -1,10 +1,31 @@
|
||||||
import { Prisma, RequestDataStatus, RequestWorkStatus } from "@prisma/client";
|
import { Prisma, RequestDataStatus, RequestWorkStatus } from "@prisma/client";
|
||||||
import { Body, Controller, Get, Path, Put, Query, Request, Route, Security, Tags } from "tsoa";
|
import {
|
||||||
|
Body,
|
||||||
|
Controller,
|
||||||
|
Delete,
|
||||||
|
Get,
|
||||||
|
Head,
|
||||||
|
Path,
|
||||||
|
Put,
|
||||||
|
Query,
|
||||||
|
Request,
|
||||||
|
Route,
|
||||||
|
Security,
|
||||||
|
Tags,
|
||||||
|
} from "tsoa";
|
||||||
import { RequestWithUser } from "../interfaces/user";
|
import { RequestWithUser } from "../interfaces/user";
|
||||||
import prisma from "../db";
|
import prisma from "../db";
|
||||||
import { createPermCondition } from "../services/permission";
|
import {
|
||||||
|
branchRelationPermInclude,
|
||||||
|
createPermCheck,
|
||||||
|
createPermCondition,
|
||||||
|
} from "../services/permission";
|
||||||
import { queryOrNot } from "../utils/relation";
|
import { queryOrNot } from "../utils/relation";
|
||||||
import { notFoundError } from "../utils/error";
|
import { notFoundError } from "../utils/error";
|
||||||
|
import { deleteFile, fileLocation, getFile, getPresigned, listFile, setFile } from "../utils/minio";
|
||||||
|
|
||||||
|
// User in company can edit.
|
||||||
|
const permissionCheck = createPermCheck((_) => true);
|
||||||
|
|
||||||
// User in company can see.
|
// User in company can see.
|
||||||
const permissionCond = createPermCondition((_) => true);
|
const permissionCond = createPermCondition((_) => true);
|
||||||
|
|
@ -221,6 +242,7 @@ export class RequestListController extends Controller {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get("{requestWorkId}")
|
@Get("{requestWorkId}")
|
||||||
|
@Security("keycloak")
|
||||||
async getRequestWorkById(@Path() requestWorkId: string) {
|
async getRequestWorkById(@Path() requestWorkId: string) {
|
||||||
const record = await prisma.requestWork.findFirst({
|
const record = await prisma.requestWork.findFirst({
|
||||||
include: {
|
include: {
|
||||||
|
|
@ -362,4 +384,82 @@ export class RequestListController extends Controller {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class RequestListAttachmentController extends Controller {}
|
@Route("api/v1/request-work/{requestId}/step-status/{step}")
|
||||||
|
@Tags("Request List")
|
||||||
|
export class RequestListFileController extends Controller {
|
||||||
|
private async checkPermission(user: RequestWithUser["user"], id: string) {
|
||||||
|
const data = await prisma.requestWork.findUnique({
|
||||||
|
where: { id },
|
||||||
|
include: {
|
||||||
|
request: {
|
||||||
|
include: {
|
||||||
|
quotation: {
|
||||||
|
include: { registeredBranch: { include: branchRelationPermInclude(user) } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
if (!data) throw notFoundError("Request Work");
|
||||||
|
await permissionCheck(user, data.request.quotation.registeredBranch);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get("attachment")
|
||||||
|
@Security("keycloak")
|
||||||
|
async listAttachment(
|
||||||
|
@Request() req: RequestWithUser,
|
||||||
|
@Path() requestId: string,
|
||||||
|
@Path() step: number,
|
||||||
|
) {
|
||||||
|
await this.checkPermission(req.user, requestId);
|
||||||
|
return await listFile(fileLocation.request.attachment(requestId, step));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get("attachment/{name}")
|
||||||
|
@Security("keycloak")
|
||||||
|
async getAttachment(
|
||||||
|
@Request() req: RequestWithUser,
|
||||||
|
@Path() requestId: string,
|
||||||
|
@Path() step: number,
|
||||||
|
@Path() name: string,
|
||||||
|
) {
|
||||||
|
await this.checkPermission(req.user, requestId);
|
||||||
|
return await getFile(fileLocation.request.attachment(requestId, step, name));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Head("attachment/{name}")
|
||||||
|
@Security("keycloak")
|
||||||
|
async headAttachment(
|
||||||
|
@Request() req: RequestWithUser,
|
||||||
|
@Path() requestId: string,
|
||||||
|
@Path() step: number,
|
||||||
|
@Path() name: string,
|
||||||
|
) {
|
||||||
|
await this.checkPermission(req.user, requestId);
|
||||||
|
return await getPresigned("head", fileLocation.request.attachment(requestId, step, name));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Put("attachment/{name}")
|
||||||
|
@Security("keycloak")
|
||||||
|
async putAttachment(
|
||||||
|
@Request() req: RequestWithUser,
|
||||||
|
@Path() requestId: string,
|
||||||
|
@Path() step: number,
|
||||||
|
@Path() name: string,
|
||||||
|
) {
|
||||||
|
await this.checkPermission(req.user, requestId);
|
||||||
|
return await setFile(fileLocation.request.attachment(requestId, step, name));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Delete("attachment/{name}")
|
||||||
|
@Security("keycloak")
|
||||||
|
async delAttachment(
|
||||||
|
@Request() req: RequestWithUser,
|
||||||
|
@Path() requestId: string,
|
||||||
|
@Path() step: number,
|
||||||
|
@Path() name: string,
|
||||||
|
) {
|
||||||
|
await this.checkPermission(req.user, requestId);
|
||||||
|
return await deleteFile(fileLocation.request.attachment(requestId, step, name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue