48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
import { Context, Router } from "https://deno.land/x/oak/mod.ts";
|
|
import { FileService } from "./fileservice.ts";
|
|
import { readerFromStreamReader } from "https://deno.land/std@0.189.0/streams/mod.ts";
|
|
import { asyncIterableToArray } from "./utils.ts";
|
|
|
|
|
|
|
|
type Handler = (ctx: Context) => void;
|
|
|
|
|
|
function listFileHandlerFactory(fileService: FileService): Handler {
|
|
return async (ctx: Context) => {
|
|
ctx.response.type = "application/json";
|
|
ctx.response.body = await asyncIterableToArray(fileService.list());
|
|
};
|
|
}
|
|
|
|
|
|
function createFileHandlerFactory(fileService: FileService): Handler {
|
|
return async (ctx: Context) => {
|
|
const untypedCtx: any = ctx;
|
|
ctx.response.body = 'This is a post';
|
|
const path = untypedCtx.request.url.searchParams.get('path');
|
|
|
|
const reqBody = await ctx.request.body({ type: "stream" }).value;
|
|
const reader = readerFromStreamReader(reqBody.getReader())
|
|
fileService.createFromReader(path, reader);
|
|
};
|
|
}
|
|
|
|
|
|
function getFileHandlerFactory(fileService: FileService): Handler {
|
|
return (ctx: Context) => {
|
|
const untypedCtx: any = ctx;
|
|
const fileId = untypedCtx.params.file_id;
|
|
// ctx.response.body = await fileService.getRawBodyByPath()
|
|
};
|
|
}
|
|
|
|
|
|
export function buildAPI(router: Router, fileService: FileService): Router {
|
|
|
|
router.get('/files', listFileHandlerFactory(fileService));
|
|
router.get('/files/:file_id', getFileHandlerFactory(fileService));
|
|
router.post('/files', createFileHandlerFactory(fileService));
|
|
|
|
return router;
|
|
} |