remodel to be independant of database
This commit is contained in:
		@@ -1,28 +1,24 @@
 | 
				
			|||||||
import { Request, Response, Router } from 'express';
 | 
					import { Request, Response, Router } from 'express';
 | 
				
			||||||
import { http } from '@scode/consts';
 | 
					import { http } from '@scode/consts';
 | 
				
			||||||
import Knex from 'knex';
 | 
					import { DatabaseCrudOptions } from './DatabaseCrudOptions';
 | 
				
			||||||
import { KnexCrudOptions } from './KnexCrudOptions';
 | 
					 | 
				
			||||||
import { CrudHandler } from './CrudHandler';
 | 
					import { CrudHandler } from './CrudHandler';
 | 
				
			||||||
import { HttpHandler } from './HttpHandler';
 | 
					import { HttpHandler } from './HttpHandler';
 | 
				
			||||||
import { KnexCrudOptionsReader } from './KnexCrudOptionsReader';
 | 
					import { DatabaseCrudOptionsReader } from './DatabaseCrudOptionsReader';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class KnexCrudHandler extends HttpHandler implements CrudHandler {
 | 
					export class DatabaseCrudHandler extends HttpHandler implements CrudHandler {
 | 
				
			||||||
  protected table: string;
 | 
					  protected table: string;
 | 
				
			||||||
  protected columns: Array<string>;
 | 
					  protected columns: Array<string>;
 | 
				
			||||||
  protected options: KnexCrudOptionsReader;
 | 
					  protected options: DatabaseCrudOptionsReader;
 | 
				
			||||||
  protected knex: Knex;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public constructor (
 | 
					  public constructor (
 | 
				
			||||||
    knex: Knex,
 | 
					 | 
				
			||||||
    table: string,
 | 
					    table: string,
 | 
				
			||||||
    columns: Array<string>,
 | 
					    columns: Array<string>,
 | 
				
			||||||
    options: KnexCrudOptions = {}
 | 
					    options: DatabaseCrudOptions = {}
 | 
				
			||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
    super ();
 | 
					    super ();
 | 
				
			||||||
    this.knex = knex;
 | 
					 | 
				
			||||||
    this.table = table;
 | 
					    this.table = table;
 | 
				
			||||||
    this.columns = columns;
 | 
					    this.columns = columns;
 | 
				
			||||||
    this.options = new KnexCrudOptionsReader (options);
 | 
					    this.options = new DatabaseCrudOptionsReader (options);
 | 
				
			||||||
    if (this.columns.filter ((val) => val.toLowerCase () === 'id').length > 0) {
 | 
					    if (this.columns.filter ((val) => val.toLowerCase () === 'id').length > 0) {
 | 
				
			||||||
      throw new Error (
 | 
					      throw new Error (
 | 
				
			||||||
        'the column id cannot be made available to modification'
 | 
					        'the column id cannot be made available to modification'
 | 
				
			||||||
@@ -1,17 +1,19 @@
 | 
				
			|||||||
import { Request, Response } from 'express';
 | 
					import { Request, Response } from 'express';
 | 
				
			||||||
 | 
					import ControlModel from '@scode/modelling';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Authorization = {
 | 
					type Authorization = {
 | 
				
			||||||
  (req: Request, res: Response): Promise<boolean>;
 | 
					  (req: Request, res: Response): Promise<boolean>;
 | 
				
			||||||
  (req: Request, res: Response, next: Function): unknown;
 | 
					  (req: Request, res: Response, next: Function): unknown;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface KnexCrudOptions {
 | 
					interface DatabaseCrudOptions {
 | 
				
			||||||
  general_authorization?: Authorization;
 | 
					  general_authorization?: Authorization;
 | 
				
			||||||
  create_authorization?: Authorization;
 | 
					  create_authorization?: Authorization;
 | 
				
			||||||
  read_authorization?: Authorization;
 | 
					  read_authorization?: Authorization;
 | 
				
			||||||
  update_authorization?: Authorization;
 | 
					  update_authorization?: Authorization;
 | 
				
			||||||
  delete_authorization?: Authorization;
 | 
					  delete_authorization?: Authorization;
 | 
				
			||||||
  optional_columns?: Array<string>;
 | 
					  optional_columns?: Array<string>;
 | 
				
			||||||
 | 
					  control_model?: Type<ControlModel>;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export { Authorization, KnexCrudOptions };
 | 
					export { Authorization, DatabaseCrudOptions };
 | 
				
			||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
import { Request, Response } from 'express';
 | 
					import { Request, Response } from 'express';
 | 
				
			||||||
import { KnexCrudOptions, Authorization } from './KnexCrudOptions';
 | 
					import { KnexCrudOptions, Authorization } from './DatabaseCrudOptions';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type AuthRunner = {
 | 
					type AuthRunner = {
 | 
				
			||||||
  (req: Request, res: Response): Promise<boolean>;
 | 
					  (req: Request, res: Response): Promise<boolean>;
 | 
				
			||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
export { HttpHandler } from './HttpHandler';
 | 
					export { HttpHandler } from './HttpHandler';
 | 
				
			||||||
export { CrudHandler } from './CrudHandler';
 | 
					export { CrudHandler } from './CrudHandler';
 | 
				
			||||||
export { KnexCrudHandler } from './KnexCrudHandler';
 | 
					export { DatabaseCrudHandler } from './DatabaseCrudHandler';
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,13 +29,12 @@
 | 
				
			|||||||
    "ava": "^3.7.1",
 | 
					    "ava": "^3.7.1",
 | 
				
			||||||
    "eslint": "^6.8.0",
 | 
					    "eslint": "^6.8.0",
 | 
				
			||||||
    "nyc": "^15.0.1",
 | 
					    "nyc": "^15.0.1",
 | 
				
			||||||
    "sqlite3": "^4.1.1",
 | 
					 | 
				
			||||||
    "typescript": "^3.8.3"
 | 
					    "typescript": "^3.8.3"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@scode/consts": "^1.1.5",
 | 
					    "@scode/consts": "^1.1.5",
 | 
				
			||||||
 | 
					    "@scode/modelling": "^1.0.3",
 | 
				
			||||||
    "@types/express": "^4.17.6",
 | 
					    "@types/express": "^4.17.6",
 | 
				
			||||||
    "express": "^4.17.1",
 | 
					    "express": "^4.17.1"
 | 
				
			||||||
    "knex": "^0.21.0"
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@ import knex from 'knex';
 | 
				
			|||||||
import test from 'ava';
 | 
					import test from 'ava';
 | 
				
			||||||
import express, { Request, Response } from 'express';
 | 
					import express, { Request, Response } from 'express';
 | 
				
			||||||
import { http } from '@scode/consts';
 | 
					import { http } from '@scode/consts';
 | 
				
			||||||
import { KnexCrudHandler } from '../lib/KnexCrudHandler';
 | 
					import { KnexCrudHandler } from '../lib/DatabaseCrudHandler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const db = knex ({
 | 
					const db = knex ({
 | 
				
			||||||
  client:     'sqlite',
 | 
					  client:     'sqlite',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@
 | 
				
			|||||||
    // "allowJs": true,                       /* Allow javascript files to be compiled. */
 | 
					    // "allowJs": true,                       /* Allow javascript files to be compiled. */
 | 
				
			||||||
    // "checkJs": true,                       /* Report errors in .js files. */
 | 
					    // "checkJs": true,                       /* Report errors in .js files. */
 | 
				
			||||||
    // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
 | 
					    // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
 | 
				
			||||||
    // "declaration": true,                   /* Generates corresponding '.d.ts' file. */
 | 
					    "declaration": true,                   /* Generates corresponding '.d.ts' file. */
 | 
				
			||||||
    // "declarationMap": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */
 | 
					    // "declarationMap": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */
 | 
				
			||||||
    // "sourceMap": true,                     /* Generates corresponding '.map' file. */
 | 
					    // "sourceMap": true,                     /* Generates corresponding '.map' file. */
 | 
				
			||||||
    // "outFile": "./",                       /* Concatenate and emit output to single file. */
 | 
					    // "outFile": "./",                       /* Concatenate and emit output to single file. */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user