diff --git a/src/deps.ts b/src/deps.ts new file mode 100644 index 0000000..891f7b6 --- /dev/null +++ b/src/deps.ts @@ -0,0 +1,5 @@ +export { Buffer, StringReader } from "https://deno.land/std@0.191.0/io/mod.ts"; +export { readAll, readerFromIterable, readableStreamFromReader, readerFromStreamReader, iterateReader, TextLineStream } from "https://deno.land/std@0.191.0/streams/mod.ts"; +export { Application, Context, Router } from 'https://deno.land/x/oak/mod.ts'; + + diff --git a/src/restapi.ts b/src/restapi.ts index 820af11..131ffe2 100644 --- a/src/restapi.ts +++ b/src/restapi.ts @@ -1,6 +1,6 @@ -import { Context, Router } from "https://deno.land/x/oak/mod.ts"; -import { FileService } from "./fileservice.ts"; -import { readerFromStreamReader, readableStreamFromReader, TextLineStream } from "https://deno.land/std@0.191.0/streams/mod.ts"; +import { Context, Router } from "./deps.ts"; +import { FileService } from "./services/mod.ts"; +import { readerFromStreamReader } from "./deps.ts"; import { asyncIterableToArray } from "./utils.ts"; diff --git a/src/server.ts b/src/server.ts index c87112b..975409f 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,6 +1,6 @@ -import { Application, Router } from 'https://deno.land/x/oak/mod.ts'; +import { Application, Router } from './deps.ts'; import { buildAPI } from './restapi.ts'; -import { DenoKVFileService } from "./fileservice.ts"; +import { DenoKVFileService } from "./services/mod.ts"; async function main(){ const app = new Application(); diff --git a/src/fileservice.ts b/src/services/denokv.ts similarity index 88% rename from src/fileservice.ts rename to src/services/denokv.ts index 2f6dff6..c7282c2 100644 --- a/src/fileservice.ts +++ b/src/services/denokv.ts @@ -1,42 +1,10 @@ -import { readAll } from "https://deno.land/std@0.191.0/streams/read_all.ts"; -import { readerFromIterable, iterateReader } from "https://deno.land/std@0.191.0/streams/mod.ts"; -import { Buffer } from "https://deno.land/std@0.191.0/io/buffer.ts"; - -import { StringReader } from "https://deno.land/std@0.191.0/io/string_reader.ts"; - +import { readAll, readerFromIterable, iterateReader } from "../deps.ts"; +import { Buffer, StringReader } from "../deps.ts"; +import {FileService, FileMetaData, BlobService} from './interfaces.ts'; import { readerFromStreamReader, readableStreamFromReader } from "https://deno.land/std@0.191.0/streams/mod.ts"; - - -export interface FileService { - - list(): AsyncIterable; - - createFromFullContent( - path: string, - content: string | Uint8Array, - ): Promise; - - createFromReader(path: string, content: Deno.Reader): Promise; - - getRawContentByPath(path: string): Promise; - - getContentAsReader(path: string): Promise; - - getMetaDataByID(id: string): Promise; - - renameById(id: string, newPath: string): Promise; - - renameByPath( - originalPath: string, - newPath: string, - ): Promise; - - deleteByPath(path: string): Promise; -} - interface SerializedFile { id: string; path: string; @@ -44,17 +12,12 @@ interface SerializedFile { compression: string; } -export interface FileMetaData { - path: string; - id: string; - contentSize: number; -} interface SerializedFilePathIndex { fileId: string; } -export class DenoKVBlobService { +export class DenoKVBlobService implements BlobService { private readonly kv: Deno.Kv; private readonly blobSize: number; @@ -172,7 +135,7 @@ export class DenoKVBlobService { export class DenoKVFileService implements FileService { private readonly kv: Deno.Kv; - private readonly blobService: DenoKVBlobService; + private readonly blobService: BlobService; constructor(kv: Deno.Kv) { this.kv = kv; diff --git a/src/services/interfaces.ts b/src/services/interfaces.ts new file mode 100644 index 0000000..d0b0b4a --- /dev/null +++ b/src/services/interfaces.ts @@ -0,0 +1,43 @@ +export interface FileMetaData { + path: string; + id: string; + contentSize: number; +} + + +export interface FileService { + + list(): AsyncIterable; + + createFromFullContent( + path: string, + content: string | Uint8Array, + ): Promise; + + createFromReader(path: string, content: Deno.Reader): Promise; + + getRawContentByPath(path: string): Promise; + + getContentAsReader(path: string): Promise; + + getMetaDataByID(id: string): Promise; + + renameById(id: string, newPath: string): Promise; + + renameByPath( + originalPath: string, + newPath: string, + ): Promise; + + deleteByPath(path: string): Promise; +} + + +export interface BlobService { + persistBlob(index: string, content: Uint8Array): Promise; + persistReader(index: string, content: Deno.Reader): Promise; + readAllBlob(index: string): Promise; + getBlob(index: string): Deno.Reader; + getNumberOfBlobs(index: string): Promise; + streamBlob(index: string): Deno.Reader; +} \ No newline at end of file diff --git a/src/services/mod.ts b/src/services/mod.ts new file mode 100644 index 0000000..f7ea77c --- /dev/null +++ b/src/services/mod.ts @@ -0,0 +1,2 @@ +export * from './interfaces.ts'; +export {DenoKVBlobService, DenoKVFileService} from './denokv.ts'; \ No newline at end of file diff --git a/tests/fileservice_test.ts b/tests/fileservice_test.ts index 0ac03f7..18c670e 100644 --- a/tests/fileservice_test.ts +++ b/tests/fileservice_test.ts @@ -5,7 +5,7 @@ import { DenoKVFileService, FileMetaData, FileService, -} from "../src/fileservice.ts"; +} from "../src/services/mod.ts"; import { asyncIterableToArray } from "../src/utils.ts"; import { generateLargeText } from "./utils.ts"; import { StringReader } from "https://deno.land/std@0.191.0/io/mod.ts";