@foal/core
Advanced tools
Comparing version 0.6.0-alpha.4 to 0.6.0-beta.0
@@ -1,18 +0,18 @@ | ||
import { Class, Context, HttpResponseCreated, HttpResponseMethodNotAllowed, HttpResponseNotFound, HttpResponseNotImplemented, HttpResponseOK, ServiceManager } from '../../core'; | ||
import { ISerializer } from '../services'; | ||
import { Class, Context, HttpResponseBadRequest, HttpResponseCreated, HttpResponseForbidden, HttpResponseMethodNotAllowed, HttpResponseNotFound, HttpResponseNotImplemented, HttpResponseOK, ServiceManager } from '../../core'; | ||
import { CollectionParams, IResourceCollection } from '../services'; | ||
export declare abstract class RestController { | ||
private services; | ||
abstract serializerClass: Class<Partial<ISerializer>>; | ||
abstract collectionClass: Class<Partial<IResourceCollection>>; | ||
constructor(services: ServiceManager); | ||
getQuery(ctx: Context): object; | ||
extendParams(ctx: Context, params: CollectionParams): CollectionParams; | ||
delete(): HttpResponseMethodNotAllowed; | ||
deleteById(ctx: Context): Promise<HttpResponseOK | HttpResponseNotFound | HttpResponseNotImplemented>; | ||
get(ctx: Context): Promise<HttpResponseOK | HttpResponseNotImplemented>; | ||
getById(ctx: Context): Promise<HttpResponseOK | HttpResponseNotFound | HttpResponseNotImplemented>; | ||
deleteById(ctx: Context): Promise<HttpResponseOK | HttpResponseBadRequest | HttpResponseForbidden | HttpResponseNotFound | HttpResponseNotImplemented>; | ||
get(ctx: Context): Promise<HttpResponseOK | HttpResponseBadRequest | HttpResponseForbidden | HttpResponseNotImplemented>; | ||
getById(ctx: Context): Promise<HttpResponseOK | HttpResponseBadRequest | HttpResponseForbidden | HttpResponseNotFound | HttpResponseNotImplemented>; | ||
patch(): HttpResponseMethodNotAllowed; | ||
patchById(ctx: Context): Promise<HttpResponseOK | HttpResponseNotFound | HttpResponseNotImplemented>; | ||
post(ctx: Context): Promise<HttpResponseCreated | HttpResponseNotImplemented>; | ||
patchById(ctx: Context): Promise<HttpResponseOK | HttpResponseBadRequest | HttpResponseForbidden | HttpResponseNotFound | HttpResponseNotImplemented>; | ||
post(ctx: Context): Promise<HttpResponseCreated | HttpResponseBadRequest | HttpResponseForbidden | HttpResponseNotImplemented>; | ||
postById(): HttpResponseMethodNotAllowed; | ||
put(): HttpResponseMethodNotAllowed; | ||
putById(ctx: Context): Promise<HttpResponseOK | HttpResponseNotFound | HttpResponseNotImplemented>; | ||
putById(ctx: Context): Promise<HttpResponseOK | HttpResponseBadRequest | HttpResponseForbidden | HttpResponseNotFound | HttpResponseNotImplemented>; | ||
} |
@@ -18,14 +18,4 @@ "use strict"; | ||
} | ||
// schema = { | ||
// id: { type: 'number' } | ||
// }; | ||
// requiredFields = { | ||
// post: [], // do not include the id in post. | ||
// put: [ 'id' ] | ||
// }; | ||
// hooks = { | ||
// post: [ LoginRequired(), /*AssignUserId()*/ ] | ||
// }; | ||
getQuery(ctx) { | ||
return {}; | ||
extendParams(ctx, params) { | ||
return params; | ||
} | ||
@@ -36,14 +26,19 @@ delete() { | ||
async deleteById(ctx) { | ||
const serializer = this.services.get(this.serializerClass); | ||
if (!serializer.removeOne) { | ||
const collection = this.services.get(this.collectionClass); | ||
if (!collection.deleteById) { | ||
return new core_1.HttpResponseNotImplemented(); | ||
} | ||
const query = Object.assign({}, this.getQuery(ctx), { id: ctx.request.params.id }); | ||
try { | ||
return new core_1.HttpResponseOK(await serializer.removeOne(query)); | ||
return new core_1.HttpResponseOK(await collection.deleteById(ctx.user, ctx.request.params.id, {})); | ||
} | ||
catch (error) { | ||
if (errors_1.isObjectDoesNotExist(error)) { | ||
return new core_1.HttpResponseNotFound(); | ||
return new core_1.HttpResponseNotFound(error.content); | ||
} | ||
else if (errors_1.isValidationError(error)) { | ||
return new core_1.HttpResponseBadRequest(error.content); | ||
} | ||
else if (errors_1.isPermissionDenied(error)) { | ||
return new core_1.HttpResponseForbidden(error.content); | ||
} | ||
throw error; | ||
@@ -55,22 +50,38 @@ } | ||
// hooks | ||
const serializer = this.services.get(this.serializerClass); | ||
if (!serializer.findMany) { | ||
const collection = this.services.get(this.collectionClass); | ||
if (!collection.find) { | ||
return new core_1.HttpResponseNotImplemented(); | ||
} | ||
const query = this.getQuery(ctx); | ||
return new core_1.HttpResponseOK(await serializer.findMany(query)); | ||
const params = this.extendParams(ctx, {}); | ||
try { | ||
return new core_1.HttpResponseOK(await collection.find(ctx.user, params)); | ||
} | ||
catch (error) { | ||
if (errors_1.isValidationError(error)) { | ||
return new core_1.HttpResponseBadRequest(error.content); | ||
} | ||
else if (errors_1.isPermissionDenied(error)) { | ||
return new core_1.HttpResponseForbidden(error.content); | ||
} | ||
throw error; | ||
} | ||
} | ||
async getById(ctx) { | ||
const serializer = this.services.get(this.serializerClass); | ||
if (!serializer.findOne) { | ||
const collection = this.services.get(this.collectionClass); | ||
if (!collection.findById) { | ||
return new core_1.HttpResponseNotImplemented(); | ||
} | ||
const query = Object.assign({}, this.getQuery(ctx), { id: ctx.request.params.id }); | ||
try { | ||
return new core_1.HttpResponseOK(await serializer.findOne(query)); | ||
return new core_1.HttpResponseOK(await collection.findById(ctx.user, ctx.request.params.id, {})); | ||
} | ||
catch (error) { | ||
if (errors_1.isObjectDoesNotExist(error)) { | ||
return new core_1.HttpResponseNotFound(); | ||
return new core_1.HttpResponseNotFound(error.content); | ||
} | ||
else if (errors_1.isValidationError(error)) { | ||
return new core_1.HttpResponseBadRequest(error.content); | ||
} | ||
else if (errors_1.isPermissionDenied(error)) { | ||
return new core_1.HttpResponseForbidden(error.content); | ||
} | ||
throw error; | ||
@@ -83,14 +94,19 @@ } | ||
async patchById(ctx) { | ||
const serializer = this.services.get(this.serializerClass); | ||
if (!serializer.updateOne) { | ||
const collection = this.services.get(this.collectionClass); | ||
if (!collection.modifyById) { | ||
return new core_1.HttpResponseNotImplemented(); | ||
} | ||
const query = Object.assign({}, this.getQuery(ctx), { id: ctx.request.params.id }); | ||
try { | ||
return new core_1.HttpResponseOK(await serializer.updateOne(query, ctx.request.body)); | ||
return new core_1.HttpResponseOK(await collection.modifyById(ctx.user, ctx.request.params.id, ctx.request.body, {})); | ||
} | ||
catch (error) { | ||
if (errors_1.isObjectDoesNotExist(error)) { | ||
return new core_1.HttpResponseNotFound(); | ||
return new core_1.HttpResponseNotFound(error.content); | ||
} | ||
else if (errors_1.isValidationError(error)) { | ||
return new core_1.HttpResponseBadRequest(error.content); | ||
} | ||
else if (errors_1.isPermissionDenied(error)) { | ||
return new core_1.HttpResponseForbidden(error.content); | ||
} | ||
throw error; | ||
@@ -100,7 +116,18 @@ } | ||
async post(ctx) { | ||
const serializer = this.services.get(this.serializerClass); | ||
if (!serializer.createOne) { | ||
const collection = this.services.get(this.collectionClass); | ||
if (!collection.create) { | ||
return new core_1.HttpResponseNotImplemented(); | ||
} | ||
return new core_1.HttpResponseCreated(await serializer.createOne(ctx.request.body)); | ||
try { | ||
return new core_1.HttpResponseCreated(await collection.create(ctx.user, ctx.request.body, {})); | ||
} | ||
catch (error) { | ||
if (errors_1.isValidationError(error)) { | ||
return new core_1.HttpResponseBadRequest(error.content); | ||
} | ||
else if (errors_1.isPermissionDenied(error)) { | ||
return new core_1.HttpResponseForbidden(error.content); | ||
} | ||
throw error; | ||
} | ||
} | ||
@@ -114,14 +141,19 @@ postById() { | ||
async putById(ctx) { | ||
const serializer = this.services.get(this.serializerClass); | ||
if (!serializer.updateOne) { | ||
const collection = this.services.get(this.collectionClass); | ||
if (!collection.updateById) { | ||
return new core_1.HttpResponseNotImplemented(); | ||
} | ||
const query = Object.assign({}, this.getQuery(ctx), { id: ctx.request.params.id }); | ||
try { | ||
return new core_1.HttpResponseOK(await serializer.updateOne(query, ctx.request.body)); | ||
return new core_1.HttpResponseOK(await collection.updateById(ctx.user, ctx.request.params.id, ctx.request.body, {})); | ||
} | ||
catch (error) { | ||
if (errors_1.isObjectDoesNotExist(error)) { | ||
return new core_1.HttpResponseNotFound(); | ||
return new core_1.HttpResponseNotFound(error.content); | ||
} | ||
else if (errors_1.isValidationError(error)) { | ||
return new core_1.HttpResponseBadRequest(error.content); | ||
} | ||
else if (errors_1.isPermissionDenied(error)) { | ||
return new core_1.HttpResponseForbidden(error.content); | ||
} | ||
throw error; | ||
@@ -128,0 +160,0 @@ } |
export { ObjectDoesNotExist, isObjectDoesNotExist } from './object-does-not-exist'; | ||
export { PermissionDenied, isPermissionDenied } from './permission-denied'; | ||
export { ValidationError, isValidationError } from './validation-error'; |
@@ -6,2 +6,5 @@ "use strict"; | ||
exports.isObjectDoesNotExist = object_does_not_exist_1.isObjectDoesNotExist; | ||
var permission_denied_1 = require("./permission-denied"); | ||
exports.PermissionDenied = permission_denied_1.PermissionDenied; | ||
exports.isPermissionDenied = permission_denied_1.isPermissionDenied; | ||
var validation_error_1 = require("./validation-error"); | ||
@@ -8,0 +11,0 @@ exports.ValidationError = validation_error_1.ValidationError; |
export declare class ObjectDoesNotExist extends Error { | ||
content?: any; | ||
readonly isObjectDoesNotExist: boolean; | ||
constructor(); | ||
constructor(content?: any); | ||
} | ||
export declare function isObjectDoesNotExist(err: object): boolean; | ||
export declare function isObjectDoesNotExist(err: object): err is ObjectDoesNotExist; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
class ObjectDoesNotExist extends Error { | ||
constructor() { | ||
constructor(content) { | ||
super(); | ||
this.content = content; | ||
this.isObjectDoesNotExist = true; | ||
@@ -7,0 +8,0 @@ Object.setPrototypeOf(this, ObjectDoesNotExist.prototype); |
@@ -6,2 +6,2 @@ export declare class ValidationError extends Error { | ||
} | ||
export declare function isValidationError(err: object): boolean; | ||
export declare function isValidationError(err: object): err is ValidationError; |
@@ -1,2 +0,2 @@ | ||
export { ISerializer } from './serializer.interface'; | ||
export { EntitySerializer } from './entity-serializer.service'; | ||
export { IResourceCollection, CollectionParams } from './resource-collection.interface'; | ||
export { EntityResourceCollection, middleware, Middleware } from './entity-resource-collection.service'; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var entity_serializer_service_1 = require("./entity-serializer.service"); | ||
exports.EntitySerializer = entity_serializer_service_1.EntitySerializer; | ||
var entity_resource_collection_service_1 = require("./entity-resource-collection.service"); | ||
exports.EntityResourceCollection = entity_resource_collection_service_1.EntityResourceCollection; | ||
exports.middleware = entity_resource_collection_service_1.middleware; | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "@foal/core", | ||
"version": "0.6.0-alpha.4", | ||
"version": "0.6.0-beta.0", | ||
"description": "A high-level Node.JS framework to quickly build web apps in TypeScript.", | ||
@@ -5,0 +5,0 @@ "main": "./lib/index.js", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
144921
183
2218