| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  | import { ApiRequestInstance } from "~/types/api"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-02 22:15:11 -08:00
										 |  |  | export interface CrudAPIInterface { | 
					
						
							|  |  |  |   requests: ApiRequestInstance; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Route Properties / Methods
 | 
					
						
							|  |  |  |   baseRoute: string; | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |   itemRoute(itemId: string | number): string; | 
					
						
							| 
									
										
										
										
											2021-08-02 22:15:11 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // Methods
 | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-22 15:23:45 -08:00
										 |  |  | export interface CrudAPIMethodsInterface { | 
					
						
							|  |  |  |   // CRUD Methods
 | 
					
						
							| 
									
										
										
										
											2021-09-12 11:05:09 -08:00
										 |  |  |   getAll(): any; | 
					
						
							|  |  |  |   createOne(): any; | 
					
						
							|  |  |  |   getOne(): any; | 
					
						
							|  |  |  |   updateOne(): any; | 
					
						
							|  |  |  |   patchOne(): any; | 
					
						
							|  |  |  |   deleteOne(): any; | 
					
						
							| 
									
										
										
										
											2021-08-22 15:23:45 -08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2021-08-03 21:38:45 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-07 15:12:25 -08:00
										 |  |  | export abstract class BaseAPI { | 
					
						
							| 
									
										
										
										
											2021-08-02 22:15:11 -08:00
										 |  |  |   requests: ApiRequestInstance; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   constructor(requests: ApiRequestInstance) { | 
					
						
							|  |  |  |     this.requests = requests; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2021-08-07 15:12:25 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export abstract class BaseCRUDAPI<T, U> extends BaseAPI implements CrudAPIInterface { | 
					
						
							|  |  |  |   abstract baseRoute: string; | 
					
						
							|  |  |  |   abstract itemRoute(itemId: string | number): string; | 
					
						
							| 
									
										
										
										
											2021-08-02 22:15:11 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-12 11:05:09 -08:00
										 |  |  |   async getAll(start = 0, limit = 9999, params = {}) { | 
					
						
							| 
									
										
										
										
											2021-08-02 22:15:11 -08:00
										 |  |  |     return await this.requests.get<T[]>(this.baseRoute, { | 
					
						
							| 
									
										
										
										
											2021-09-12 11:05:09 -08:00
										 |  |  |       params: { start, limit, ...params }, | 
					
						
							| 
									
										
										
										
											2021-08-02 22:15:11 -08:00
										 |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |   async createOne(payload: U) { | 
					
						
							|  |  |  |     return await this.requests.post<T>(this.baseRoute, payload); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-22 15:23:45 -08:00
										 |  |  |   async getOne(itemId: string | number) { | 
					
						
							| 
									
										
										
										
											2021-08-02 22:15:11 -08:00
										 |  |  |     return await this.requests.get<T>(this.itemRoute(itemId)); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-22 15:23:45 -08:00
										 |  |  |   async updateOne(itemId: string | number, payload: T) { | 
					
						
							| 
									
										
										
										
											2021-08-02 22:15:11 -08:00
										 |  |  |     return await this.requests.put<T>(this.itemRoute(itemId), payload); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   async patchOne(itemId: string, payload: T) { | 
					
						
							|  |  |  |     return await this.requests.patch(this.itemRoute(itemId), payload); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |   async deleteOne(itemId: string | number) { | 
					
						
							| 
									
										
										
										
											2021-08-02 22:15:11 -08:00
										 |  |  |     return await this.requests.delete<T>(this.itemRoute(itemId)); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |