First workable server.
This commit is contained in:
1 parent
0d627c9051
commit
789fb49e8b
27 files changed
+1355
-68
No files matched your search
+19
-13
@@ -1,10 +1,7 @@
|
||||
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 { readerFromStreamReader, readableStreamFromReader, TextLineStream } from "https://deno.land/std@0.191.0/streams/mod.ts";
|
||||
import { asyncIterableToArray } from "./utils.ts";
|
||||
import { StringReader } from "https://deno.land/std@0.178.0/io/string_reader.ts";
|
||||
import { isReader } from "https://deno.land/x/oak@v12.5.0/util.ts";
|
||||
import { createMockNext } from "https://deno.land/x/oak@v12.1.0/testing.ts";
|
||||
|
||||
|
||||
type Handler = (ctx: Context) => void;
|
||||
@@ -17,7 +14,6 @@ function listFileHandlerFactory(fileService: FileService): Handler {
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
function createFileHandlerFactory(fileService: FileService): Handler {
|
||||
return async (ctx: Context) => {
|
||||
const untypedCtx: any = ctx;
|
||||
@@ -26,33 +22,43 @@ function createFileHandlerFactory(fileService: FileService): Handler {
|
||||
|
||||
const reqBody = await ctx.request.body({ type: "stream" }).value;
|
||||
const reader = readerFromStreamReader(reqBody.getReader())
|
||||
fileService.createFromReader(path, reader);
|
||||
await fileService.createFromReader(path, reader);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
function getFileHandlerFactory(fileService: FileService): Handler {
|
||||
return async (ctx: Context) => {
|
||||
const untypedCtx: any = ctx;
|
||||
const fileId = untypedCtx.params.file_id;
|
||||
const fileId = untypedCtx.params.path;
|
||||
const reader = await fileService.getBodyAsReader(fileId);
|
||||
if(reader == null){
|
||||
ctx.response.status = 404;
|
||||
return;
|
||||
}
|
||||
ctx.response.status = 200;
|
||||
ctx.response.body = reader;
|
||||
ctx.response.type = "text/plain";
|
||||
// ctx.send(reader)
|
||||
ctx.response.body = reader;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
function deleteFileHandlerFactory(fileService: FileService): Handler {
|
||||
return async (ctx: Context) => {
|
||||
const untypedCtx: any = ctx;
|
||||
const path = untypedCtx.params.path;
|
||||
const isDeleted = await fileService.deleteByPath(path);
|
||||
if(!isDeleted){
|
||||
ctx.response.status = 404;
|
||||
return;
|
||||
}
|
||||
ctx.response.status = 200;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
export function buildAPI(router: Router, fileService: FileService): Router {
|
||||
|
||||
router.get('/files', listFileHandlerFactory(fileService));
|
||||
router.get('/files/:file_id', getFileHandlerFactory(fileService));
|
||||
router.get('/files/:path', getFileHandlerFactory(fileService));
|
||||
router.delete('/file/:path', deleteFileHandlerFactory(fileService));
|
||||
router.post('/files', createFileHandlerFactory(fileService));
|
||||
|
||||
return router;
|
||||
|
||||
Reference in new issue
Block a user