Feat(medusa-js, medusa-react): Upload endpoints in medusa js and react (#1716)
* export types from admin uploads * add delete and download to medusa-js * add upload endpoints to hooks * remove upload from js and react * pr feedback * Apply suggestions from code review Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com> * rename types for admin uploads Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>
This commit is contained in:
co-authored by
Oliver Windall Juhl
parent
bf47d1aecd
commit
9018d270be
@@ -37,7 +37,7 @@ export default async (req, res) => {
|
||||
}
|
||||
}
|
||||
|
||||
export class IAdminPostUploadsFile {
|
||||
export class IAdminPostUploadsFileReq {
|
||||
originalName: string
|
||||
path: string
|
||||
}
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
import { IsString } from "class-validator"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
|
||||
/**
|
||||
* [delete] /uploads
|
||||
* operationId: "AdminDeleteUpload"
|
||||
* operationId: "AdminDeleteUploads"
|
||||
* summary: "Removes an uploaded file"
|
||||
* description: "Removes an uploaded file using the installed fileservice"
|
||||
* x-authenticated: true
|
||||
@@ -14,9 +13,7 @@ import { validator } from "../../../../utils/validator"
|
||||
* description: OK
|
||||
*/
|
||||
export default async (req, res) => {
|
||||
const validated = await validator(AdminDeleteUploadReq, req.body, {
|
||||
forbidUnknownValues: false,
|
||||
})
|
||||
const validated = req.validatedBody as AdminDeleteUploadsReq
|
||||
|
||||
const fileService = req.scope.resolve("fileService")
|
||||
|
||||
@@ -27,7 +24,7 @@ export default async (req, res) => {
|
||||
.send({ id: validated.file_key, object: "file", deleted: true })
|
||||
}
|
||||
|
||||
class AdminDeleteUploadReq {
|
||||
export class AdminDeleteUploadsReq {
|
||||
@IsString()
|
||||
file_key: string
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
import { IsString } from "class-validator"
|
||||
import { AbstractFileService } from "../../../../interfaces"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
|
||||
/**
|
||||
* [get] /uploads
|
||||
* operationId: "GetUploadsFileDownloadUrl"
|
||||
* summary: "Gets a presigned download url for a file"
|
||||
* description: "Gets a presigned download url for a file"
|
||||
* [post] /uploads/download-url
|
||||
* operationId: "PostUploadsDownloadUrl"
|
||||
* summary: "Creates a presigned download url for a file"
|
||||
* description: "Creates a presigned download url for a file"
|
||||
* x-authenticated: true
|
||||
* requestBody:
|
||||
* content:
|
||||
@@ -26,18 +25,16 @@ import { validator } from "../../../../utils/validator"
|
||||
* description: OK
|
||||
*/
|
||||
export default async (req, res) => {
|
||||
const validated = await validator(AdminGetUploadsFileDownloadUrlReq, req.body)
|
||||
|
||||
const fileService: AbstractFileService<any> = req.scope.resolve("fileService")
|
||||
|
||||
const url = await fileService.getPresignedDownloadUrl({
|
||||
fileKey: validated.file_key,
|
||||
fileKey: (req.validatedBody as AdminPostUploadsDownloadUrlReq).file_key,
|
||||
})
|
||||
|
||||
res.status(200).send({ download_url: url })
|
||||
}
|
||||
|
||||
class AdminGetUploadsFileDownloadUrlReq {
|
||||
export class AdminPostUploadsDownloadUrlReq {
|
||||
@IsString()
|
||||
file_key: string
|
||||
}
|
||||
|
||||
@@ -2,7 +2,9 @@ import { Router } from "express"
|
||||
import multer from "multer"
|
||||
import { DeleteResponse } from "../../../../types/common"
|
||||
|
||||
import middlewares from "../../../middlewares"
|
||||
import middlewares, { transformBody } from "../../../middlewares"
|
||||
import { AdminDeleteUploadsReq } from "./delete-upload"
|
||||
import { AdminPostUploadsDownloadUrlReq } from "./get-download-url"
|
||||
|
||||
const route = Router()
|
||||
const upload = multer({ dest: "uploads/" })
|
||||
@@ -16,21 +18,30 @@ export default (app) => {
|
||||
middlewares.wrap(require("./create-upload").default)
|
||||
)
|
||||
|
||||
route.delete("/", middlewares.wrap(require("./delete-upload").default))
|
||||
route.delete(
|
||||
"/",
|
||||
transformBody(AdminDeleteUploadsReq),
|
||||
middlewares.wrap(require("./delete-upload").default)
|
||||
)
|
||||
|
||||
route.get(
|
||||
route.post(
|
||||
"/download-url",
|
||||
transformBody(AdminPostUploadsDownloadUrlReq),
|
||||
middlewares.wrap(require("./get-download-url").default)
|
||||
)
|
||||
|
||||
return app
|
||||
}
|
||||
|
||||
export type AdminUploadRes = {
|
||||
uploads: unknown[]
|
||||
export type AdminUploadsRes = {
|
||||
uploads: { url: string }[]
|
||||
}
|
||||
|
||||
export type AdminDeleteUploadRes = DeleteResponse
|
||||
export type AdminDeleteUploadsRes = DeleteResponse
|
||||
|
||||
export type AdminUploadsDownloadUrlRes = {
|
||||
download_url: string
|
||||
}
|
||||
|
||||
export * from "./create-upload"
|
||||
export * from "./delete-upload"
|
||||
|
||||
Reference in New Issue
Block a user