Skip to content
This repository has been archived by the owner on May 8, 2020. It is now read-only.

Commit

Permalink
refactor(controller):Removed required dependency Server from abstract…
Browse files Browse the repository at this point in the history
… controller

BREAKING CHANGE:

The `Server` injected dependency is no longer required for all controllers as it is now passed into the `registerRoutes(server: Server)` method on bootstrap.
All controllers should remove the server variable passed to super:

 Before:
 ```typescript
 class ExampleController extends AbstractController {
   constructor(server: Server, logger: Logger){
     super(server, logger);
   }
 }
 ```
 After:
 ```typescript
 class ExampleController extends AbstractController {
   constructor(logger: Logger){
     super(logger);
   }
 }
 ```
  • Loading branch information
zakhenry committed Jul 6, 2016
1 parent c205ade commit f35e00c
Show file tree
Hide file tree
Showing 9 changed files with 36 additions and 40 deletions.
4 changes: 2 additions & 2 deletions src/server/bootstrap/controllers.bootstrapper.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ const providers: any[] = [
@Injectable()
class TestController extends AbstractController {

constructor(server: Server, logger: Logger) {
super(server, logger);
constructor(logger: Logger) {
super(logger);
}

@Route('GET', '/test')
Expand Down
4 changes: 3 additions & 1 deletion src/server/bootstrap/controllers.bootstrapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { EntityBootstrapper } from './entity.bootstrapper';
import { AbstractController } from '../controllers/abstract.controller';
import { RegistryEntityStatic } from '../../common/registry/entityRegistry';
import { ControllerMetadata } from '../../common/metadata/metadata';
import { Server } from '../servers/abstract.server';

/**
* Provides bootstrapping of the @[[Controller]] entities
Expand All @@ -20,12 +21,13 @@ export class ControllerBootstrapper extends EntityBootstrapper {
}

public bootstrap(): void {
const server = this.injector.get(Server);
this.entities.forEach((resolvedController: RegistryEntityStatic<ControllerMetadata>) => {

let controller = this.getInstance<AbstractController>(resolvedController);

controller.registerInjector(this.injector)
.registerRoutes();
.registerRoutes(server);

});
}
Expand Down
10 changes: 5 additions & 5 deletions src/server/controllers/abstract.controller.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import { UnavailableForLegalReasonsException } from '../exeptions/exceptions';
@Injectable()
class TestController extends AbstractController {

constructor(server: Server, logger: Logger) {
super(server, logger);
constructor(logger: Logger) {
super(logger);
}

@Route('GET', '/test')
Expand Down Expand Up @@ -52,7 +52,7 @@ describe('Controller', () => {
it('Registers a route that returns a response', async(inject([TestController, Server],
(c: TestController, s: Server) => {

c.registerRoutes();
c.registerRoutes(s);

const callStackHandler = s.configuredRoutes.find((r: RouteConfig) => r.methodName == 'test').callStackHandler;

Expand All @@ -72,7 +72,7 @@ describe('Controller', () => {
it('Registers a route that returns an http error response', async(inject([TestController, Server],
(c: TestController, s: Server) => {

c.registerRoutes();
c.registerRoutes(s);

const callStackHandler = s.configuredRoutes.find((r: RouteConfig) => r.methodName == 'httpError').callStackHandler;

Expand All @@ -95,7 +95,7 @@ describe('Controller', () => {
it('Registers a route that falls back to an http error respnse', async(inject([TestController, Server],
(c: TestController, s: Server) => {

c.registerRoutes();
c.registerRoutes(s);

const callStackHandler = s.configuredRoutes.find((r: RouteConfig) => r.methodName == 'unknownError').callStackHandler;

Expand Down
18 changes: 6 additions & 12 deletions src/server/controllers/abstract.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,8 @@ import { Response } from './response';
import { Request } from './request';
import { initializeMiddlewareRegister } from '../middleware/middleware.decorator';
import { HttpException, InternalServerErrorException } from '../exeptions/exceptions';
import {
RegistryEntityStatic,
RegistryEntityConstructor, RegistryEntity
} from '../../common/registry/entityRegistry';
import {
ModelMetadata, ControllerMetadata,
initializeMetadata
} from '../../common/metadata/metadata';
import { RegistryEntityStatic, RegistryEntity } from '../../common/registry/entityRegistry';
import { ControllerMetadata } from '../../common/metadata/metadata';

export interface MethodDefinition {
method: HttpMethod;
Expand Down Expand Up @@ -64,7 +58,7 @@ export abstract class AbstractController extends RegistryEntity<ControllerMetada
/** Instance of injector used for the registration of @Injectable middleware */
private injector: Injector;

constructor(protected server: Server, logger: Logger) {
constructor(logger: Logger) {
super();
this.logger = logger.source(this.constructor.name);
}
Expand Down Expand Up @@ -134,10 +128,10 @@ export abstract class AbstractController extends RegistryEntity<ControllerMetada
}

/**
* Register all routes defined in this controller (or any extending instances)
* Register all routes defined in this controller (or any extending instances) with the server
* @returns {AbstractController}
*/
public registerRoutes(): this {
public registerRoutes(server: Server): this {

this.actionMethods.forEach((methodDefinition: MethodDefinition, methodSignature: string) => {

Expand Down Expand Up @@ -166,7 +160,7 @@ export abstract class AbstractController extends RegistryEntity<ControllerMetada
}
}

this.server.register({
server.register({
methodName: methodSignature,
method: methodDefinition.method,
path: `${process.env.API_BASE}/${this.getMetadata().routeBase}${methodDefinition.route}`,
Expand Down
10 changes: 5 additions & 5 deletions src/server/controllers/resource.controller.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ class FruitMockStore extends MockStore<Fruit> {
@Injectable()
class TestController extends ResourceController<Fruit> {

constructor(server: Server, logger: Logger, fruitStore: FruitStore) {
super(server, logger, fruitStore);
constructor(logger: Logger, fruitStore: FruitStore) {
super(logger, fruitStore);
}

}
Expand All @@ -71,7 +71,7 @@ describe('Resource Controller', () => {
it('Registers a route to retrieve an entity', async(inject([TestController, Server],
(c: TestController, s: Server) => {

c.registerRoutes();
c.registerRoutes(s);

const callStackHandler = s.configuredRoutes.find((r: RouteConfig) => r.methodName == 'getOne').callStackHandler;

Expand All @@ -96,7 +96,7 @@ describe('Resource Controller', () => {
it('Registers a route to retrieve many entities', async(inject([TestController, Server],
(c: TestController, s: Server) => {

c.registerRoutes();
c.registerRoutes(s);

const callStackHandler = s.configuredRoutes.find((r: RouteConfig) => r.methodName == 'getMany').callStackHandler;

Expand All @@ -120,7 +120,7 @@ describe('Resource Controller', () => {
it('Registers a route put one entity', async(inject([TestController, Server],
(c: TestController, s: Server) => {

c.registerRoutes();
c.registerRoutes(s);

const callStackHandler = s.configuredRoutes.find((r: RouteConfig) => r.methodName == 'putOne').callStackHandler;

Expand Down
4 changes: 2 additions & 2 deletions src/server/controllers/resource.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ import { Collection } from '../../common/models/collection';
@Injectable()
export abstract class ResourceController<M extends AbstractModel> extends AbstractController {

constructor(server: Server, logger: Logger, protected modelStore:AbstractStore<M>) {
super(server, logger);
constructor(logger: Logger, protected modelStore:AbstractStore<M>) {
super(logger);
}

/**
Expand Down
6 changes: 3 additions & 3 deletions src/server/controllers/route.decorator.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ import { Controller } from '../../common/registry/decorators';
})
class TestController extends AbstractController {

constructor(server: Server, logger: Logger) {
super(server, logger);
constructor(logger: Logger) {
super(logger);
}

@Route('PUT', '/test/:id')
Expand All @@ -46,7 +46,7 @@ describe('@Route decorator', () => {
(c: TestController, i: Injector, s: Server) => {

let controller = c.registerInjector(i)
.registerRoutes();
.registerRoutes(s);

const routeConfig: RouteConfig = s.getRoutes()
.find((route: RouteConfig) => route.methodName == 'testMethod');
Expand Down
6 changes: 3 additions & 3 deletions src/server/middleware/debugLog.middleware.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import { debugLog, DebugLogMiddleware } from './debugLog.middleware';
@Injectable()
class MiddlewareController extends AbstractController {

constructor(server: Server, logger: Logger) {
super(server, logger);
constructor(logger: Logger) {
super(logger);
}

@Route('GET', '/test')
Expand Down Expand Up @@ -68,7 +68,7 @@ describe('debugLog middleware', () => {
(c: MiddlewareController, i: Injector, s: Server) => {

controller = c.registerInjector(i)
.registerRoutes();
.registerRoutes(s);

const callStackHandler: any = s.getRoutes()
.find((route: RouteConfig) => route.methodName == 'testMethod').callStackHandler;
Expand Down
14 changes: 7 additions & 7 deletions src/server/middleware/middleware.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ function middlewareFixture(input: string): IsolatedMiddlewareFactory {
@Injectable()
class MiddlewareController extends AbstractController {

constructor(server: Server, logger: Logger) {
super(server, logger);
constructor(logger: Logger) {
super(logger);
}

@Route('GET', '/test')
Expand Down Expand Up @@ -58,10 +58,10 @@ describe('Middleware Decorators', () => {
});

it('defines registeredMiddleware on the controller',
inject([MiddlewareController, ReflectiveInjector],
(c: MiddlewareController, i: ReflectiveInjector) => {
inject([MiddlewareController, ReflectiveInjector, Server],
(c: MiddlewareController, i: ReflectiveInjector, s: Server) => {

controller = c.registerRoutes()
controller = c.registerRoutes(s)
.registerInjector(i);

expect(controller.getMetadata().middleware)
Expand All @@ -77,7 +77,7 @@ describe('Middleware Decorators', () => {
inject([MiddlewareController, ReflectiveInjector, Server],
(c: MiddlewareController, i: ReflectiveInjector, s: Server) => {

controller = c.registerRoutes()
controller = c.registerRoutes(s)
.registerInjector(i);

const callStack: any = s.getRoutes()
Expand All @@ -102,7 +102,7 @@ describe('Middleware Decorators', () => {
async(inject([MiddlewareController, ReflectiveInjector, Server],
(c: MiddlewareController, i: ReflectiveInjector, s: Server) => {

controller = c.registerRoutes()
controller = c.registerRoutes(s)
.registerInjector(i);

const callStackHandler: any = s.getRoutes()
Expand Down

0 comments on commit f35e00c

Please sign in to comment.