big websocket change

This commit is contained in:
ntr committed 2022-09-16 19:21:11 +10:00
1 parent 0e3c272adc
commit 73248f7d9f
12 files changed
+126 -99

No files matched your search

+23
View File
@@ -118,11 +118,34 @@ export default function createOffers(log: Log, pg: Pg) {
});
}
async function acpOffers() {
const offers = await pg.offersAdmin();
const grouped = groupBy(offers, o => o.listing.data.seller.id);
const sellerOffers = sortBy(Object.values(grouped).map(offers => {
const shipping = offers[0]?.listing.data.seller.shipping;
const bundle = {
username: offers[0]?.listing.data.seller.username,
seller: offers[0]?.listing.data.seller.id,
shipsFrom: offers[0]?.listing.data.ships_from,
shipping,
offers,
mentionsAustralia: shipping.toLowerCase().includes('australia'),
mentionsWorldwide: shipping.toLowerCase().includes('world'),
}
return bundle;
}), bundle => -bundle.offers.length);
return sellerOffers;
}
return {
generate,
accept,
bundles,
statusSet,
acpOffers,
};
}
+34 -1
View File
@@ -8,6 +8,7 @@ import type { Want, Offer, User } from '@prisma/client';
import { Pg } from './pg';
import { Status } from './offers';
import { isAdmin } from './utils';
function checkMsgType(msgType: RpcMessageType): msgType is RpcMessageType {
if (RpcMessageType[msgType]) {
@@ -28,7 +29,9 @@ export default function createRpc(log: Log, pg: Pg, user: User, ws, discogs, off
assert(Status[status], 'unknown status');
const offer = await offers.statusSet(user, id, status);
return [RpcMessageType.Offers, []]
const userOffers = await pg.userOffers(user);
return [RpcMessageType.Offers, userOffers]
}
async function wantRm(params: WantRmParams): Promise<WantsMessage> {
@@ -41,6 +44,22 @@ export default function createRpc(log: Log, pg: Pg, user: User, ws, discogs, off
return [RpcMessageType.Wants, wants];
}
async function acpOfferStatusSet(params: OfferStatusSetParams): Promise<AcpOffersMessage> {
const { id, status } = params;
assert(isAdmin(user), 'not authorised');
assert(id, 'no id supplied');
assert(Status[status], 'unknown status');
const offer = await offers.statusSet(user, id, status);
return [RpcMessageType.AcpOffers, await offers.acpOffers()]
}
async function acpOffers(): Promise<AcpOffersMessage> {
assert(isAdmin(user), 'not authorised');
return [RpcMessageType.AcpOffers, await offers.acpOffers()];
}
async function receive(message: any): Promise<RpcMessage> {
const [msgType, params] = message;
@@ -53,6 +72,10 @@ export default function createRpc(log: Log, pg: Pg, user: User, ws, discogs, off
return ping();
case RpcMessageType.OfferStatusSet:
return offerStatusSet(params);
case RpcMessageType.AcpOfferStatusSet:
return acpOfferStatusSet(params);
case RpcMessageType.AcpOffers:
return acpOffers();
case RpcMessageType.WantRm:
return wantRm(params);
default:
@@ -103,6 +126,9 @@ export enum RpcMessageType {
OfferStatusSet = 'OfferStatusSet',
AcpOfferStatusSet = 'AcpOfferStatusSet',
AcpOffers = 'AcpOffers',
WantRm = 'WantRm',
}
@@ -114,6 +140,9 @@ type WantsMessage = [RpcMessageType.Wants, Want[]];
type OffersMessage = [RpcMessageType.Offers, Offer[]];
type OfferStatusSetMessage = [RpcMessageType.OfferStatusSet, Offer[]];
type AcpOfferStatusSetMessage = [RpcMessageType.AcpOfferStatusSet, Offer[]];
type AcpOffersMessage = [RpcMessageType.AcpOffers, Offer[]];
export type RpcMessage =
PingMessage |
PongMessage |
@@ -124,6 +153,10 @@ export type RpcMessage =
OffersMessage |
OfferStatusSetMessage |
AcpOfferStatusSetMessage |
AcpOffersMessage |
ErrorMessage;
+5 -1
View File
@@ -1,4 +1,4 @@
import type { Want } from '@prisma/client';
import type { Want, User } from '@prisma/client';
export function logAxiosError(e) {
console.warn({
@@ -25,4 +25,8 @@ export function wantDetails(want: Want) {
}
}
export function isAdmin(user: User) {
return user.email === 'ntr@mnml.gg';
}
export function offerDetails() {}