move to koa and add user pages
This commit is contained in:
1 parent
b4114a2440
commit
bd32044427
11 files changed
+1079
-107
No files matched your search
+48
-29
@@ -1,6 +1,8 @@
|
||||
import express from 'express';
|
||||
import koa from 'koa';
|
||||
import bodyParser from 'koa-body';
|
||||
import koaRouter from '@koa/router'
|
||||
import cors from '@koa/cors';
|
||||
import http from 'http';
|
||||
import cors from 'cors';
|
||||
import { groupBy } from 'lodash';
|
||||
import Bluebird from 'bluebird';
|
||||
|
||||
@@ -12,8 +14,21 @@ import type { Listing, User, Want, Prisma } from '@prisma/client';
|
||||
export default function createApi(log: Log, pg: Pg, discogs) {
|
||||
const PORT = 41337;
|
||||
|
||||
const app = express();
|
||||
const server = http.createServer(app);
|
||||
const app = new koa();
|
||||
|
||||
app.use(async (ctx, next) => {
|
||||
try {
|
||||
await next();
|
||||
} catch (err) {
|
||||
log.error(err);
|
||||
ctx.status = err.statusCode || err.status || 500;
|
||||
ctx.body = {
|
||||
message: err.message
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
const router = koaRouter();
|
||||
|
||||
interface ListingData extends Listing {
|
||||
data: any,
|
||||
@@ -33,13 +48,11 @@ export default function createApi(log: Log, pg: Pg, discogs) {
|
||||
currency: l.data.original_price.curr_abbr,
|
||||
condition: l.data.condition,
|
||||
uri: l.data.uri,
|
||||
user: l.want.user.name,
|
||||
user: l.want.user,
|
||||
}));
|
||||
|
||||
const shipping = b[0]?.data.seller.shipping;
|
||||
|
||||
console.log(b.map(l => l.data));
|
||||
|
||||
const bundle = {
|
||||
username: b[0]?.data.seller.username,
|
||||
seller: b[0]?.data.seller.id,
|
||||
@@ -78,56 +91,62 @@ export default function createApi(log: Log, pg: Pg, discogs) {
|
||||
|
||||
function listen() {
|
||||
return new Promise((resolve, reject) => {
|
||||
server.on('error', err => {
|
||||
app.on('error', err => {
|
||||
reject(err);
|
||||
})
|
||||
|
||||
server.listen(PORT, () => {
|
||||
app.listen(PORT, () => {
|
||||
log.info('listening', { PORT });
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
app.use(cors());
|
||||
app.use(express.json())
|
||||
app.use(bodyParser())
|
||||
|
||||
app.get('/bundles', async (req, res, next) => {
|
||||
router.get('/bundles', async (ctx, next) => {
|
||||
const bundles = await getBundles();
|
||||
// log.info(bundles);
|
||||
res.json(bundles);
|
||||
ctx.response.body = bundles;
|
||||
})
|
||||
|
||||
app.get('/user/:id/offers', async function userOffersGet(req, res, next) {
|
||||
const { id } = req.params;
|
||||
router.get('/user/:id/offers', async function userOffersGet(ctx, next) {
|
||||
const { id } = ctx.request.params;
|
||||
const user = await pg.userFindId(id);
|
||||
res.json(user);
|
||||
|
||||
// if (!user) return ctx.response.status = 404;
|
||||
|
||||
const bundles = (await getBundles())
|
||||
.map(b => {
|
||||
b.items = b.items.filter(i => i.user.id === user.id)
|
||||
return b;
|
||||
})
|
||||
.filter(b => b.items.length);
|
||||
|
||||
ctx.response.body = bundles;
|
||||
});
|
||||
|
||||
app.post('/user', async function usersPost(req, res, next) {
|
||||
const { name } = req.body;
|
||||
router.post('/user', async function usersPost(ctx, next) {
|
||||
const { name } = ctx.request.body;
|
||||
const user = await pg.userUpsert(null, name, null);
|
||||
res.json(user);
|
||||
ctx.response.body = user;
|
||||
});
|
||||
|
||||
app.post('/user/populate', async function usersPopulate(req, res, next) {
|
||||
const { userId } = req.body;
|
||||
router.post('/user/populate', async function usersPopulate(ctx, next) {
|
||||
const { userId } = ctx.request.body;
|
||||
const user = await pg.userFindId(userId);
|
||||
const listings = await populateUserListings(user);
|
||||
res.json(listings);
|
||||
ctx.response.body = listings;
|
||||
});
|
||||
|
||||
app.post('/want', async function wantPost(req, res, next) {
|
||||
const { userId, releaseId } = req.body;
|
||||
router.post('/want', async function wantPost(ctx, next) {
|
||||
const { userId, releaseId } = ctx.request.body;
|
||||
const user = await pg.userFindId(userId);
|
||||
const release = await discogs.release(releaseId);
|
||||
const want = await pg.wantUpsert(release, user);
|
||||
return res.json(want);
|
||||
ctx.response.body = want;
|
||||
});
|
||||
|
||||
app.use(function errorHandler(req, res, next, error) {
|
||||
log.warn(error);
|
||||
res.status(500).send({ error });
|
||||
});
|
||||
app.use(router.routes());
|
||||
|
||||
return {
|
||||
app,
|
||||
|
||||
Reference in new issue
Block a user