fix
This commit is contained in:
		| @@ -9,4 +9,5 @@ import { Database } from './Database'; | ||||
|  | ||||
| export interface PatchAction { | ||||
|   apply(db: Database): void; | ||||
|   assign_object(obj: Record<string, unknown>):void; | ||||
| } | ||||
|   | ||||
| @@ -7,6 +7,7 @@ | ||||
|  | ||||
| import { Snippet } from '../../Snippet'; | ||||
| import { MainMenu } from './menu/MainMenu'; | ||||
| import { Database as DatabaseClass } from './classes/Database'; | ||||
|  | ||||
| export default class Database implements Snippet { | ||||
|   public is_active (): boolean { | ||||
| @@ -14,7 +15,7 @@ export default class Database implements Snippet { | ||||
|   } | ||||
|  | ||||
|   public async start (): Promise<void> { | ||||
|     await (new MainMenu) | ||||
|     await (new MainMenu (new DatabaseClass)) | ||||
|       .run (); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -11,7 +11,9 @@ import { Menu } from './Menu'; | ||||
| export class MainMenu extends Menu { | ||||
|   public constructor (db: Database) { | ||||
|     super ('Snippeteer Database'); | ||||
|     this.register_option ('quit', () => { /* noop */ }); | ||||
|     this.register_option ('quit', () => { | ||||
|       // noop | ||||
|     }); | ||||
|     this.register_option ('create table', () => { | ||||
|       console.log ('table'); | ||||
|     }); | ||||
|   | ||||
							
								
								
									
										16
									
								
								lib/snippets/database/patch_actions/ActionFactory.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								lib/snippets/database/patch_actions/ActionFactory.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| import { PatchAction } from '../classes/PatchAction'; | ||||
|  | ||||
| export class ActionFactory { | ||||
|   private static _actions: Record<string, (json:string)=>PatchAction> = {}; | ||||
|  | ||||
|   public static get (name:string, json:string): PatchAction { | ||||
|     return this._actions[name] (json); | ||||
|   } | ||||
|  | ||||
|   public static register ( | ||||
|     name:string, | ||||
|     constr: (json:string)=>PatchAction | ||||
|   ):void { | ||||
|     this._actions[name] = constr; | ||||
|   } | ||||
| } | ||||
							
								
								
									
										29
									
								
								lib/snippets/database/patch_actions/AddTable.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								lib/snippets/database/patch_actions/AddTable.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| import { Persistent } from '@sapphirecode/modelling'; | ||||
| import { PatchAction } from '../classes/PatchAction'; | ||||
| import { Database } from '../classes/Database'; | ||||
| import { Table } from '../classes/Table'; | ||||
| import { Column } from '../classes/Column'; | ||||
| import { ColumnType } from '../classes/ColumnType'; | ||||
|  | ||||
| export class AddTable extends Persistent implements PatchAction { | ||||
|   public get name ():string { | ||||
|     return this.get ('name') as string; | ||||
|   } | ||||
|  | ||||
|   public constructor (name:string) { | ||||
|     super (); | ||||
|     this.properties.name = 'string'; | ||||
|  | ||||
|     this.set ('name', name); | ||||
|   } | ||||
|  | ||||
|   public apply (db: Database):void { | ||||
|     if (typeof db.get_table (this.name) !== 'undefined') | ||||
|       throw new Error ('table already exists'); | ||||
|  | ||||
|     const table = new Table (this.name); | ||||
|     table.columns.push (new Column ('id', ColumnType.increments)); | ||||
|  | ||||
|     db.tables.push (table); | ||||
|   } | ||||
| } | ||||
| @@ -5,16 +5,46 @@ | ||||
|  * Created by Timo Hocker <timo@scode.ovh>, June 2020 | ||||
|  */ | ||||
|  | ||||
| export { RenameColumn } from './RenameColumn'; | ||||
| export { AddColumn } from './AddColumn'; | ||||
| export { DropColumn } from './DropColumn'; | ||||
| export { AddRelation } from './AddRelation'; | ||||
| export { DropRelation } from './DropRelation'; | ||||
| export { SetColumnType } from './SetColumnType'; | ||||
| export { AddTable } from './AddTable'; | ||||
| export { DropTable } from './DropTable'; | ||||
| export { RenameTable } from './RenameTable'; | ||||
| export { InsertData } from './InsertData'; | ||||
| export { UpdateData } from './UpdateData'; | ||||
| export { MutateDate } from './MutateDate'; | ||||
| export { DeleteData } from './DeleteData'; | ||||
| import { PatchAction } from '../classes/PatchAction'; | ||||
| import { ActionFactory } from './ActionFactory'; | ||||
| import { RenameColumn } from './RenameColumn'; | ||||
| import { AddTable } from './AddTable'; | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * export { AddColumn } from './AddColumn'; | ||||
|  * export { DropColumn } from './DropColumn'; | ||||
|  * export { AddRelation } from './AddRelation'; | ||||
|  * export { DropRelation } from './DropRelation'; | ||||
|  * export { SetColumnType } from './SetColumnType'; | ||||
|  * export { DropTable } from './DropTable'; | ||||
|  * export { RenameTable } from './RenameTable'; | ||||
|  * export { InsertData } from './InsertData'; | ||||
|  * export { UpdateData } from './UpdateData'; | ||||
|  * export { MutateDate } from './MutateDate'; | ||||
|  * export { DeleteData } from './DeleteData'; | ||||
|  */ | ||||
|  | ||||
| function assign_json (patch:PatchAction, json:string):PatchAction { | ||||
|   const obj = JSON.parse (json); | ||||
|   patch.assign_object (obj); | ||||
|   return patch; | ||||
| } | ||||
|  | ||||
| function init ():void { | ||||
|   ActionFactory.register ( | ||||
|     'rename_column', | ||||
|     (json:string) => assign_json (new RenameColumn ('', '', ''), json) | ||||
|   ); | ||||
|  | ||||
|   ActionFactory.register ( | ||||
|     'add_table', | ||||
|     (json:string) => assign_json (new AddTable (''), json) | ||||
|   ); | ||||
| } | ||||
|  | ||||
| export { | ||||
|   init, | ||||
|   RenameColumn, | ||||
|   AddTable | ||||
| }; | ||||
|   | ||||
| @@ -11,29 +11,26 @@ import { Database } from '../classes/Database'; | ||||
|  | ||||
| export class RenameColumn extends Persistent implements PatchAction { | ||||
|   public get table (): string { | ||||
|     return this.get ('table'); | ||||
|     return this.get ('table') as string; | ||||
|   } | ||||
|  | ||||
|   public get column (): string { | ||||
|     return this.get ('column'); | ||||
|     return this.get ('column') as string; | ||||
|   } | ||||
|  | ||||
|   public get new_name (): string { | ||||
|     return this.get ('new_name'); | ||||
|     return this.get ('new_name') as string; | ||||
|   } | ||||
|  | ||||
|   public constructor ( | ||||
|     column: string, | ||||
|     new_name: string|null = null, | ||||
|     table: string|null = null | ||||
|     new_name: string, | ||||
|     table: string | ||||
|   ) { | ||||
|     this.properties = { column: 'string', table: 'string', new_name: 'string' }; | ||||
|  | ||||
|     if (new_name === null || table === null) { | ||||
|       const parsed = JSON.parse (column); | ||||
|       this.assign_object (parsed); | ||||
|       return; | ||||
|     } | ||||
|     super (); | ||||
|     this.properties.column = 'string'; | ||||
|     this.properties.table = 'string'; | ||||
|     this.properties.new_name = 'string'; | ||||
|  | ||||
|     this.set ('column', column); | ||||
|     this.set ('new_name', new_name); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user