Skip to content

Commit

Permalink
Add update and delete endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
Murzbul committed Mar 24, 2020
1 parent f535cd4 commit 05d1cfc
Show file tree
Hide file tree
Showing 15 changed files with 148 additions and 67 deletions.
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,8 @@ Hi! Node experience it's a set of tools together for a simple projects with an a
- docker exec -it experience_node_1 bash

- yarn
- yarn run dev
- yarn run dev

OR

- docker-compose exec app yarn dev
85 changes: 45 additions & 40 deletions src/Api/Handlers/ItemHandler.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
import { Request, Response } from 'express';
import { inject } from 'inversify'
import { controller, httpGet, httpPost, request, response } from 'inversify-express-utils';
import {controller, httpDelete, httpGet, httpPost, httpPut, request, response} from 'inversify-express-utils';
import ItemService from '../../Services/ItemService';
import Responder from "../../Lib/Responder";
import ItemTransformer from "../Transformers/Items/ItemTransformer";
import StatusCode from "../../Lib/StatusCode";
import { TYPES } from "../../types";
import ItemRepRequest from "../Requests/ItemRepRequest";
import ItemRequestShow from "../Requests/ItemRequestShow";
import ItemRequestCriteria from "../Requests/ItemRequestCriteria";
import ItemRepRequest from "../Requests/Items/ItemRepRequest";
import IdRequest from "../Requests/Defaults/IdRequest";
import ItemRequestCriteria from "../Requests/Items/ItemRequestCriteria";
import ItemUpdateRequest from "../Requests/Items/ItemUpdateRequest";
import ItemRemoveRequest from "../Requests/Items/ItemRemoveRequest";

@controller('/items')
@controller('/api/items')
class ItemHandler
{
private service: ItemService;
Expand All @@ -23,63 +25,66 @@ class ItemHandler
}

@httpPost('/')
public async save (@request() request: Request, @response() response: Response)
public async save (@request() req: Request, @response() res: Response)
{
const itemRepRequest = new ItemRepRequest(request);
const itemRepRequest = new ItemRepRequest(req);
const item = await this.service.save(itemRepRequest);

this.responder.send(item, response, StatusCode.HTTP_CREATED, new ItemTransformer());
this.responder.send(item, res, StatusCode.HTTP_CREATED, new ItemTransformer());
}

@httpGet('/')
public async list (@request() request: Request, @response() response: Response)
public async list (@request() req: Request, @response() res: Response)
{
const itemRequest = new ItemRequestCriteria(request);
const itemRequest = new ItemRequestCriteria(req);
const items = await this.service.list(itemRequest);

this.responder.send(items, response, StatusCode.HTTP_OK, new ItemTransformer());
this.responder.send(items, res, StatusCode.HTTP_OK, new ItemTransformer());
}

@httpGet('/:id')
public async getOne (@request() request: Request, @response() response: Response/*, next: express.NextFunction*/)
public async getOne (@request() req: Request, @response() res: Response/*, next: express.NextFunction*/)
{
const itemRequestShow = new ItemRequestShow(request);
const itemRequestShow = new IdRequest(req);
const item = await this.service.getOne(itemRequestShow);
// const id = request.params.id;
// const items = await this.service.list(itemRequestShow);
// const item = await this.repository.findOne(id);

// if (item) {
// response.send(item);
// } else {
// next(new ItemNotFoundException(id));
// }

this.responder.send(item, response, StatusCode.HTTP_OK, new ItemTransformer());
this.responder.send(item, res, StatusCode.HTTP_OK, new ItemTransformer());
}

@httpPut('/:id')
public async update (@request() req: Request, @response() res: Response/*, next: express.NextFunction*/)
{
const itemRequest = new ItemUpdateRequest(req);
const item = await this.service.update(itemRequest);

// if (updatedPost) {
// response.send(updatedPost);
// } else {
// next(new PostNotFoundException(id));
// }

this.responder.send(item, res, StatusCode.HTTP_OK, new ItemTransformer());
}

@httpDelete('/:id')
public async remove (@request() req: Request, @response() res: Response/*, next: express.NextFunction*/)
{
const itemRequest = new ItemRemoveRequest(req);
const item = await this.service.remove(itemRequest);

// if (deleteResponse.raw[1]) {
// response.sendStatus(200);
// } else {
// next(new PostNotFoundException(id));
// }
this.responder.send(item, res, StatusCode.HTTP_OK, new ItemTransformer());
}
}

export default ItemHandler;

//
// private modifyPost = async (request: express.Request, response: express.Response, next: express.NextFunction) => {
// const id = request.params.id;
// const postData: Post = request.body;
// await this.postRepository.update(id, postData);
// const updatedPost = await this.postRepository.findOne(id);
// if (updatedPost) {
// response.send(updatedPost);
// } else {
// next(new PostNotFoundException(id));
// }
// }
//
// private deletePost = async (request: express.Request, response: express.Response, next: express.NextFunction) => {
// const id = request.params.id;
// const deleteResponse = await this.postRepository.delete(id);
// if (deleteResponse.raw[1]) {
// response.sendStatus(200);
// } else {
// next(new PostNotFoundException(id));
// }
// }
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as express from "express";
import ItemShowPayload from "../../Payloads/ItemShowPayload";
import IdPayload from "../../../Payloads/Defaults/IdPayload";

class ItemRequestShow implements ItemShowPayload {
class IdRequest implements IdPayload {

private request: express.Request;

Expand All @@ -14,4 +14,4 @@ class ItemRequestShow implements ItemShowPayload {
}
}

export default ItemRequestShow
export default IdRequest
17 changes: 17 additions & 0 deletions src/Api/Requests/Items/ItemRemoveRequest.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import * as express from "express";
import IdPayload from "../../../Payloads/Defaults/IdPayload";

class ItemRemoveRequest implements IdPayload {

private request: express.Request;

constructor(request: express.Request) {
this.request = request;
}

id(): string {
return this.request.params.id;
}
}

export default ItemRemoveRequest
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import * as express from "express";
import ItemRepPayload from "../../Payloads/ItemRepPayload";
import ItemRepPayload from "../../../Payloads/Items/ItemRepPayload";

class ItemRepRequest implements ItemRepPayload {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as express from "express";
import Criteria from "../../Payloads/Criteria";
import CriteriaPayload from "../../../Payloads/CriteriaPayload";

class ItemRequestCriteria implements Criteria {
class ItemRequestCriteria implements CriteriaPayload {

private request: express.Request;

Expand Down
25 changes: 25 additions & 0 deletions src/Api/Requests/Items/ItemUpdateRequest.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import * as express from "express";
import ItemUpdatePayload from "../../../Payloads/Items/ItemUpdatePayload";

class ItemUpdateRequest implements ItemUpdatePayload {

private request: express.Request;

constructor(request: express.Request) {
this.request = request;
}

name(): string {
return this.request.body.name;
}

type(): number {
return this.request.body.type;
}

id(): string {
return this.request.params.id;
}
}

export default ItemUpdateRequest
6 changes: 0 additions & 6 deletions src/Payloads/Criteria.ts

This file was deleted.

6 changes: 6 additions & 0 deletions src/Payloads/CriteriaPayload.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

interface CriteriaPayload {
id(): string;
}

export default CriteriaPayload
6 changes: 6 additions & 0 deletions src/Payloads/Defaults/IdPayload.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

interface IdPayload {
id(): string;
}

export default IdPayload
6 changes: 0 additions & 6 deletions src/Payloads/ItemShowPayload.ts

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Item } from "../Entities/Item";
import { Item } from "../../Entities/Item";

interface ItemPayload {
item(): Item;
Expand Down
File renamed without changes.
8 changes: 8 additions & 0 deletions src/Payloads/Items/ItemUpdatePayload.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import IdPayload from "../Defaults/IdPayload";
import ItemRepPayload from "./ItemRepPayload";

interface ItemUpdatePayload extends IdPayload, ItemRepPayload
{
}

export default ItemUpdatePayload
36 changes: 29 additions & 7 deletions src/Services/ItemService.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { Item } from '../Entities/Item';
import { getRepository, Repository } from 'typeorm';
import ItemPayload from '../Payloads/ItemPayload';
import {injectable} from 'inversify';
import ItemRepPayload from "../Payloads/ItemRepPayload";
import ItemShowPayload from "../Payloads/ItemShowPayload";
import Criteria from "../Payloads/Criteria";
import ItemRepPayload from "../Payloads/Items/ItemRepPayload";
import IdPayload from "../Payloads/Defaults/IdPayload";
import CriteriaPayload from "../Payloads/CriteriaPayload";
import ItemUpdatePayload from "../Payloads/Items/ItemUpdatePayload";

@injectable()
class ItemService {
Expand All @@ -25,22 +25,44 @@ class ItemService {
return item;
}

public async list (criteria: Criteria)
public async update (payload: ItemUpdatePayload): Promise<Item>
{
const id = payload.id();
const item = await this.repository.findOne(id);

item.name = payload.name();
item.type = payload.type();

await this.repository.save(item);

return item;
}

public async list (criteria: CriteriaPayload)
{
return await this.repository.find();
}

public async getOne (payload: ItemShowPayload)
public async getOne (payload: IdPayload): Promise<Item>
{
const id = payload.id();
let item = await this.repository.findOne(id);
const item = await this.repository.findOne(id);

if (!item) {
// throw Exception;
}

return item;
}

public async remove (payload: IdPayload): Promise<Item>
{
const id = payload.id();
const item = await this.repository.findOne(id);
await this.repository.delete(item);

return item;
}
}

export default ItemService;

0 comments on commit 05d1cfc

Please sign in to comment.