11import { UploadedFile , UploadMeta , UploadRepository } from '../types' ;
22
3+ export type MemoryRepositoryUploadIdentifier = number ;
4+
35export interface MemoryRepositoryRecord {
4- id : number ;
6+ id : MemoryRepositoryUploadIdentifier ;
57 file : UploadedFile ;
68 meta : UploadMeta ;
79}
810
9- type MemoryRepositoryUpload = MemoryRepositoryRecord | number ;
10-
11- export class MemoryRepository implements UploadRepository {
12- private database : Map < number , MemoryRepositoryRecord > = new Map ( ) ;
13- private counter : number = 0 ;
11+ export class MemoryRepository
12+ implements UploadRepository < MemoryRepositoryUploadIdentifier > {
13+ private database : Map <
14+ MemoryRepositoryUploadIdentifier ,
15+ MemoryRepositoryRecord
16+ > = new Map ( ) ;
17+ private counter : MemoryRepositoryUploadIdentifier = 0 ;
1418
1519 /**
1620 * Get the next available ID. Mimics auto-increment starting at 1.
1721 */
18- private getNextID ( ) : number {
22+ private getNextID ( ) : MemoryRepositoryUploadIdentifier {
1923 return ++ this . counter ;
2024 }
2125
@@ -27,21 +31,22 @@ export class MemoryRepository implements UploadRepository {
2731 public async create (
2832 file : UploadedFile ,
2933 meta ?: UploadMeta ,
30- ) : Promise < MemoryRepositoryRecord > {
34+ ) : Promise < MemoryRepositoryUploadIdentifier > {
3135 const id = this . getNextID ( ) ;
3236 const upload = { id, file, meta : meta || { } } ;
3337 this . database . set ( id , upload ) ;
34- return upload ;
38+ return upload . id ;
3539 }
3640
3741 /**
3842 * Resolve a record or ID to a fresh record straight from the database.
39- * @param upload
43+ * @param id
4044 */
41- private resolve ( upload : MemoryRepositoryUpload ) : MemoryRepositoryRecord {
42- const id = ( typeof upload === 'number' ? upload : upload . id ) || null ;
45+ private resolve (
46+ id : MemoryRepositoryUploadIdentifier ,
47+ ) : MemoryRepositoryRecord {
4348 if ( ! id ) {
44- throw new Error ( `Bad identifier or malformed record : ${ id } ` ) ;
49+ throw new Error ( `Bad identifier: ${ id } ` ) ;
4550 }
4651 const existingUpload = this . database . get ( id ) ;
4752 if ( ! existingUpload ) {
@@ -57,25 +62,27 @@ export class MemoryRepository implements UploadRepository {
5762 * @param meta
5863 */
5964 public async update (
60- upload : MemoryRepositoryUpload ,
65+ upload : MemoryRepositoryUploadIdentifier ,
6166 file : UploadedFile ,
6267 meta ?: UploadMeta ,
63- ) : Promise < MemoryRepositoryRecord > {
68+ ) : Promise < MemoryRepositoryUploadIdentifier > {
6469 const existingUpload = this . resolve ( upload ) ;
6570 const updatedUpload = {
6671 ...existingUpload ,
6772 file,
6873 meta : meta || existingUpload . meta || { } ,
6974 } ;
7075 this . database . set ( existingUpload . id , updatedUpload ) ;
71- return updatedUpload ;
76+ return updatedUpload . id ;
7277 }
7378
7479 /**
7580 * @inheritDoc
7681 * @param upload
7782 */
78- public async delete ( upload : MemoryRepositoryUpload ) : Promise < void > {
83+ public async delete (
84+ upload : MemoryRepositoryUploadIdentifier ,
85+ ) : Promise < void > {
7986 const { id } = this . resolve ( upload ) ;
8087 this . database . delete ( id ) ;
8188 }
@@ -85,7 +92,7 @@ export class MemoryRepository implements UploadRepository {
8592 * @param upload
8693 */
8794 public async getUploadedFileInfo (
88- upload : MemoryRepositoryUpload ,
95+ upload : MemoryRepositoryUploadIdentifier ,
8996 ) : Promise < UploadedFile > {
9097 const existingUpload = this . resolve ( upload ) ;
9198 return existingUpload . file ;
@@ -95,7 +102,9 @@ export class MemoryRepository implements UploadRepository {
95102 * @inheritDoc
96103 * @param upload
97104 */
98- public async getMeta ( upload : MemoryRepositoryUpload ) : Promise < UploadMeta > {
105+ public async getMeta (
106+ upload : MemoryRepositoryUploadIdentifier ,
107+ ) : Promise < UploadMeta > {
99108 const existingUpload = this . resolve ( upload ) ;
100109 return existingUpload . meta ;
101110 }
@@ -105,7 +114,7 @@ export class MemoryRepository implements UploadRepository {
105114 * @param upload
106115 */
107116 public async find (
108- upload : MemoryRepositoryUpload ,
117+ upload : MemoryRepositoryUploadIdentifier ,
109118 ) : Promise < MemoryRepositoryRecord > {
110119 return this . resolve ( upload ) ;
111120 }
@@ -115,13 +124,22 @@ export class MemoryRepository implements UploadRepository {
115124 *
116125 * @param id
117126 */
118- public log ( id ?: number ) : void {
119- const rawEntries : [ number , MemoryRepositoryRecord | undefined ] [ ] = id
120- ? [ [ id , this . database . get ( id ) ] ]
121- : [ ...this . database . entries ( ) ] ;
122- const entries : [ number , MemoryRepositoryRecord ] [ ] = rawEntries . filter (
123- ( entry : [ number , MemoryRepositoryRecord | undefined ] ) => ! ! entry [ 1 ] ,
124- ) as [ number , MemoryRepositoryRecord ] [ ] ;
127+ public log ( id ?: MemoryRepositoryUploadIdentifier ) : void {
128+ const rawEntries : [
129+ MemoryRepositoryUploadIdentifier ,
130+ MemoryRepositoryRecord | undefined
131+ ] [ ] = id ? [ [ id , this . database . get ( id ) ] ] : [ ...this . database . entries ( ) ] ;
132+ const entries : [
133+ MemoryRepositoryUploadIdentifier ,
134+ MemoryRepositoryRecord
135+ ] [ ] = rawEntries . filter (
136+ (
137+ entry : [
138+ MemoryRepositoryUploadIdentifier ,
139+ MemoryRepositoryRecord | undefined
140+ ] ,
141+ ) => ! ! entry [ 1 ] ,
142+ ) as [ MemoryRepositoryUploadIdentifier , MemoryRepositoryRecord ] [ ] ;
125143 console . table (
126144 entries . map ( ( [ id , record ] ) => {
127145 return { id, ...record . file , meta : record . meta } ;
0 commit comments