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