fixes + added order model + order handler
parent
54fa9ac7fa
commit
49ec6577f9
@ -0,0 +1,66 @@
|
||||
import express, { Request, Response } from 'express'
|
||||
import { Order, OrderProduct, OrderStore } from '../models/order'
|
||||
import { verifyAuthToken } from './utils'
|
||||
|
||||
const orderRoutes = (app: express.Application) => {
|
||||
app.get('/orders', index)
|
||||
app.get('/orders/:id', read)
|
||||
app.post('/orders', create)
|
||||
app.post('/orders/:id/products', addProduct)
|
||||
}
|
||||
|
||||
const store = new OrderStore()
|
||||
|
||||
const index = async (req: Request, res: Response) => {
|
||||
try {
|
||||
const orders = await store.index()
|
||||
res.json(orders)
|
||||
} catch (err) {
|
||||
res.status(400)
|
||||
res.json(err)
|
||||
}
|
||||
}
|
||||
|
||||
const read = async (req: Request, res: Response) => {
|
||||
try {
|
||||
const order = await store.read(req.params.id)
|
||||
res.json(order)
|
||||
} catch (err) {
|
||||
res.status(400)
|
||||
res.json(err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const create = async (req: Request, res: Response) => {
|
||||
try {
|
||||
const orderInfo: Order = {
|
||||
status: req.body.status,
|
||||
userId: req.body.userId
|
||||
}
|
||||
|
||||
const newOrder = await store.create(orderInfo)
|
||||
res.json(newOrder)
|
||||
} catch (err) {
|
||||
res.status(400)
|
||||
res.json(err)
|
||||
}
|
||||
}
|
||||
|
||||
const addProduct = async (req: Request, res: Response) => {
|
||||
try {
|
||||
const orderProductInfo: OrderProduct = {
|
||||
quantity: parseInt(req.body.quantity),
|
||||
orderId: parseInt(req.params.id),
|
||||
productId: req.body.productId
|
||||
}
|
||||
const addedProduct = await store.addProduct(orderProductInfo)
|
||||
res.json(addedProduct)
|
||||
} catch (err) {
|
||||
res.status(400)
|
||||
res.json(err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export default orderRoutes
|
@ -0,0 +1,89 @@
|
||||
import client from '../database'
|
||||
|
||||
export type Order = {
|
||||
status: string
|
||||
userId: number
|
||||
}
|
||||
|
||||
export type OrderProduct = {
|
||||
quantity: number
|
||||
orderId: number
|
||||
productId: number
|
||||
}
|
||||
|
||||
|
||||
export class OrderStore {
|
||||
async index(): Promise<Order[]> {
|
||||
try {
|
||||
|
||||
const conn = await client.connect()
|
||||
const sql = 'SELECT * FROM orders'
|
||||
|
||||
const result = await conn.query(sql)
|
||||
const orders = result.rows
|
||||
|
||||
conn.release()
|
||||
|
||||
return orders
|
||||
|
||||
} catch (err) {
|
||||
throw new Error(`Cannot get any order ${err}`)
|
||||
}
|
||||
}
|
||||
|
||||
async read(userId: string): Promise<Order> {
|
||||
try {
|
||||
|
||||
const conn = await client.connect()
|
||||
const sql = 'SELECT * FROM orders WHERE user_id=($1)'
|
||||
|
||||
const result = await conn.query(sql, [userId])
|
||||
const order = result.rows[0]
|
||||
|
||||
conn.release()
|
||||
|
||||
return order
|
||||
|
||||
} catch (err) {
|
||||
throw new Error(`Could not find order ${userId}. Error: ${err}`)
|
||||
}
|
||||
}
|
||||
|
||||
async create(o: Order): Promise<Order> {
|
||||
try {
|
||||
|
||||
const conn = await client.connect()
|
||||
const sql = 'INSERT INTO orders (status, user_id) VALUES ($1, $2) RETURNING *'
|
||||
|
||||
const result = await conn.query(sql, [o.status, o.userId])
|
||||
const order = result.rows[0]
|
||||
|
||||
conn.release()
|
||||
|
||||
return order
|
||||
|
||||
} catch (err) {
|
||||
throw new Error(`Could not add a new order ${o.userId}. Error: ${err}`)
|
||||
}
|
||||
}
|
||||
|
||||
async addProduct(o: OrderProduct): Promise<Order> {
|
||||
try {
|
||||
|
||||
const conn = await client.connect()
|
||||
const sql = 'INSERT INTO order_products (quantity, order_id, product_id) VALUES ($1, $2) RETURNING *'
|
||||
|
||||
const result = await conn.query(sql, [o.quantity, o.orderId, o.productId])
|
||||
const order = result.rows[0]
|
||||
|
||||
conn.release()
|
||||
|
||||
return order
|
||||
|
||||
} catch (err) {
|
||||
throw new Error(`Could not add a new orderProducts ${o.orderId}. Error: ${err}`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue