Skip to content
Snippets Groups Projects
Commit 90b47abc authored by Ricardo's avatar Ricardo
Browse files

FIX implant must not have owner to be sold

parent bc3c67bc
No related branches found
No related tags found
No related merge requests found
import { type Request, type Response } from 'express';
import { implantsTable } from '@/db/schema';
import { implantsTable, purchasesTable, usersTable} from '@/db/schema';
import { db } from "@/db";
import { eq } from 'drizzle-orm';
import { implantSchema, updateImplantSchema } from '@/validators/implantsValidator';
import { error } from 'console';
export default class implant{
static implantRequestValidation (req: Request){
......@@ -101,7 +102,7 @@ export default class implant{
}
static async implantCreate(req: Request, res: Response){
const implant_package = implant.implantRequestUnzip(req);setInterval
const implant_package = implant.implantRequestUnzip(req);
if (!implant_package.success)
{
return res.status(400).json("Invalid Request");
......@@ -122,4 +123,54 @@ export default class implant{
return res.status(500).json({ error: "User Creation Error"});
}
}
static async implantBuy (req: Request, res: Response): Promise<any>{
try{
const { buyer_id, product_id } = req.body;
const user = await db.select().from(usersTable).where(eq(usersTable.id, buyer_id));
const cyberPart = await db.select().from(implantsTable).where(eq(implantsTable.id, product_id));
if (!user || !cyberPart)
return res.status(404).json({ error: "User or implant not found" });
const bought = await db.select().from(purchasesTable).where(eq(purchasesTable.implant_id, product_id))
if (bought)
return res.status(404).json({ error: "Implant was already bought" });
var userMoney = parseFloat(user.money);
const implantPrice = parseFloat(cyberPart.price);
var userCyberPsychosis = parseInt(user.cyberpsychosis, 10);
const userCyberLimit = parseInt(user.cyberLimit, 10);
const implantCyberCost = parseInt(cyberPart.cyberCost, 10)
if (userMoney < implantPrice)
return res.status(404).json({ error: "Insufficient money" });
userMoney -= implantPrice;
userCyberPsychosis += implantCyberCost;
if (userCyberPsychosis >= userCyberLimit)
return res.status(404).json({ error: "Impossible to use implant, risk of cyberpsychosis is too high" });
const updated_user = await db.update(usersTable)
.set({
money: userMoney.toString(),
cyberpsychosis: userCyberPsychosis.toString()
}).where(eq(usersTable.id, buyer_id)).returning();
const purchase = await db.insert(purchasesTable)
.values({
user_id: buyer_id,
implant_id: product_id,
}).returning();
return res.status(200)
.json({ message: "Implant bought successfully",
purchase, user: updated_user });
} catch (error) {
console.error(error);
return res.status(500).json({ error: "Erro ao realizar a compra" });
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment