Skip to content
This repository has been archived by the owner on May 6, 2022. It is now read-only.

Commit

Permalink
Merge pull request #45 from Tolfix/dev
Browse files Browse the repository at this point in the history
0.6
  • Loading branch information
Tolfx authored Dec 9, 2021
2 parents 08e4b40 + 9b22c32 commit a10685c
Show file tree
Hide file tree
Showing 14 changed files with 100 additions and 43 deletions.
19 changes: 0 additions & 19 deletions src/Database/Schemas/Invoices.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import mongoose, { Document, model, Schema } from "mongoose"
import increment from "mongoose-auto-increment";
import { MongoDB_URI } from "../../Config";
import mainEvent from "../../Events/Main";
import { IInvoice } from "../../Interfaces/Invoice";

const InvoiceSchame = new Schema
Expand Down Expand Up @@ -81,24 +80,6 @@ InvoiceSchame.plugin(increment.plugin, {
incrementBy: 1
});

// Emit event when a new invoice is created
InvoiceSchame.post("save", function(invoice: IInvoice)
{
mainEvent.emit("invoice_created", invoice);
});

// Emit event when an invoice is updated
InvoiceSchame.post("update", function(invoice: IInvoice)
{
mainEvent.emit("invoice_updated", invoice);
});

// Emit event when an invoice is deleted
InvoiceSchame.post("remove", function(invoice: IInvoice)
{
mainEvent.emit("invoice_deleted", invoice);
});

const InvoiceModel = model<IInvoice & Document>("invoices", InvoiceSchame);

export default InvoiceModel;
19 changes: 0 additions & 19 deletions src/Database/Schemas/Orders.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import mongoose, { Document, model, Schema } from "mongoose"
import increment from "mongoose-auto-increment";
import { MongoDB_URI } from "../../Config";
import mainEvent from "../../Events/Main";
import { IOrder } from "../../Interfaces/Orders";

const OrderSchame = new Schema
Expand Down Expand Up @@ -75,24 +74,6 @@ OrderSchame.plugin(increment.plugin, {
incrementBy: 1
});

// Emit event when a new order is created
OrderSchame.post("save", function(order: IOrder)
{
mainEvent.emit("order_created", order);
});

// Emit event when an order is updated
OrderSchame.post("update", function(order: IOrder)
{
mainEvent.emit("order_updated", order);
});

// Emit event when an order is deleted
OrderSchame.post("remove", function(order: IOrder)
{
mainEvent.emit("order_deleted", order);
});

const OrderModel = model<IOrder & Document>("orders", OrderSchame);

export default OrderModel;
31 changes: 31 additions & 0 deletions src/Interfaces/Events/MainOnEvents.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import { ICategory } from "../Categories";
import { IConfigurableOptions } from "../ConfigurableOptions";
import { ICustomer } from "../Customer";
import { IImage } from "../Images";
import { IInvoice } from "../Invoice";
import { IOrder } from "../Orders";
import { IProduct } from "../Products";
import { ITransactions } from "../Transactions";

export interface MainOnEvents
{
Expand All @@ -8,7 +14,32 @@ export interface MainOnEvents
invoice_updated: IInvoice;
invoice_paid: IInvoice;
invoice_notified: IInvoice;

order_created: IOrder;
order_updated: IOrder;
order_deleted: IOrder;

categories_created: ICategory;
categories_updated: ICategory;
categories_deleted: ICategory;

product_created: IProduct;
product_updated: IProduct;
product_deleted: IProduct;

customer_created: ICustomer;
customer_updated: ICustomer;
customer_deleted: ICustomer;

images_created: IImage;
images_updated: IImage;
images_deleted: IImage;

transaction_created: ITransactions;
transaction_updated: ITransactions;
transaction_deleted: ITransactions;

configurable_options_created: IConfigurableOptions;
configurable_options_updated: IConfigurableOptions;
configurable_options_deleted: IConfigurableOptions;
}
3 changes: 3 additions & 0 deletions src/Lib/Orders/newInvoice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import getCategoryByProduct from "../Products/getCategoryByProduct";
import { IProduct } from "../../Interfaces/Products";
import ConfigurableOptionsModel from "../../Database/Schemas/ConfigurableOptions";
import { IConfigurableOptions } from "../../Interfaces/ConfigurableOptions";
import mainEvent from "../../Events/Main";


// Create a method that checks if the order next recycle is within 14 days
Expand Down Expand Up @@ -94,6 +95,8 @@ export async function createInvoiceFromOrder(order: IOrder)
notified: false,
})).save();

mainEvent.emit("invoice_created", newInvoice);

return newInvoice;
}

Expand Down
4 changes: 2 additions & 2 deletions src/Models/BaseModelAPI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@ export default class BaseModelAPI<IModel extends { uid: string }>
public findAndPatch(
uid: IModel["uid"],
data: IModel
): Promise<IModel | []>
): Promise<IModel>
{
if(!uid || uid === "undefined")
return Promise.resolve([]);
return Promise.reject("No uid provided");
return this.iModel.findOneAndUpdate({ $or: [
{ id: uid },
{ uid: uid }
Expand Down
10 changes: 9 additions & 1 deletion src/Routes/v2/Categories/Categories.controller.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Request, Response } from "express";
import CategoryModel from "../../../Database/Schemas/Category";
import ProductModel from "../../../Database/Schemas/Products";
import mainEvent from "../../../Events/Main";
import { ICategory } from "../../../Interfaces/Categories";
import { idCategory } from "../../../Lib/Generator";
import { APISuccess } from "../../../Lib/Response";
Expand All @@ -12,6 +13,9 @@ function insert(req: Request, res: Response)
{
API.create(req.body)
.then((result) => {

mainEvent.emit("categories_created", result);

APISuccess({
uid: result.uid
})(res);
Expand Down Expand Up @@ -48,14 +52,18 @@ function list(req: Request, res: Response)
function patch(req: Request, res: Response)
{
API.findAndPatch((req.params.uid as ICategory["uid"]), req.body).then((result) => {
// @ts-ignore
mainEvent.emit("categories_updated", result);
APISuccess(result)(res);
});
}

function removeById(req: Request, res: Response)
{
API.removeByUid(req.params.userId as ICategory["uid"])
.then((result)=>{
.then((result)=> {
// @ts-ignore
mainEvent.emit("categories_deleted", result);
APISuccess({}, 204)(res)
});
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Request, Response } from "express";
import ConfigurableOptionsModel from "../../../Database/Schemas/ConfigurableOptions";
import mainEvent from "../../../Events/Main";
import { IConfigurableOptions } from "../../../Interfaces/ConfigurableOptions";
import { idConfigurableOptions } from "../../../Lib/Generator";
import { APISuccess } from "../../../Lib/Response";
Expand All @@ -11,6 +12,9 @@ function insert(req: Request, res: Response)
{
API.create(req.body)
.then((result) => {

mainEvent.emit("configurable_options_created", result);

APISuccess({
uid: result.uid
})(res);
Expand Down Expand Up @@ -47,6 +51,8 @@ function list(req: Request, res: Response)
function patch(req: Request, res: Response)
{
API.findAndPatch((req.params.uid as IConfigurableOptions["uid"]), req.body).then((result) => {
// @ts-ignore
mainEvent.emit("configurable_options_updated", result);
APISuccess(result)(res);
});
}
Expand All @@ -55,6 +61,8 @@ function removeById(req: Request, res: Response)
{
API.removeByUid(req.params.uid as IConfigurableOptions["uid"])
.then((result)=>{
// @ts-ignore
mainEvent.emit("configurable_options_deleted", result);
APISuccess(result, 204)(res)
});
};
Expand Down
7 changes: 7 additions & 0 deletions src/Routes/v2/Customers/Customers.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { SendEmail } from "../../../Email/Send";
import { Company_Name } from "../../../Config";
import Footer from "../../../Email/Templates/General/Footer";
import getFullName from "../../../Lib/Customers/getFullName";
import mainEvent from "../../../Events/Main";

const API = new BaseModelAPI<ICustomer>(idCustomer, CustomerModel);

Expand All @@ -32,6 +33,8 @@ function insert(req: Request, res: Response)

API.create(req.body)
.then((result) => {

mainEvent.emit("customer_created", result);

// Send email to customer
SendEmail(result.personal.email, `Welcome to ${Company_Name}`, {
Expand Down Expand Up @@ -95,6 +98,8 @@ async function patch(req: Request, res: Response)
}
}
API.findAndPatch((req.params.uid as ICustomer["uid"]), req.body).then((result) => {
// @ts-ignore
mainEvent.emit("customer_updated", result);
APISuccess(result)(res);
});
}
Expand All @@ -103,6 +108,8 @@ function removeById(req: Request, res: Response)
{
API.removeByUid(req.params.uid as ICustomer["uid"])
.then((result)=>{
// @ts-ignore
mainEvent.emit("customer_deleted", result);
APISuccess(result, 204)(res)
});
};
Expand Down
15 changes: 14 additions & 1 deletion src/Routes/v2/Invoices/Invoices.controller.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { Request, Response } from "express";
import InvoiceModel from "../../../Database/Schemas/Invoices";
import mainEvent from "../../../Events/Main";
import { IInvoice } from "../../../Interfaces/Invoice";
import { idInvoice } from "../../../Lib/Generator";
import { APISuccess } from "../../../Lib/Response";
import { APIError, APISuccess } from "../../../Lib/Response";
import BaseModelAPI from "../../../Models/BaseModelAPI";

const API = new BaseModelAPI<IInvoice>(idInvoice, InvoiceModel);
Expand All @@ -11,6 +12,9 @@ function insert(req: Request, res: Response)
{
API.create(req.body)
.then((result) => {

mainEvent.emit("invoice_created", result);

APISuccess({
uid: result.uid
})(res);
Expand Down Expand Up @@ -46,15 +50,24 @@ function list(req: Request, res: Response)

function patch(req: Request, res: Response)
{
const paid = req.body.paid ?? false;
API.findAndPatch((req.params.uid as IInvoice["uid"]), req.body).then((result) => {
if(paid !== result.paid && result.paid)
mainEvent.emit("invoice_paid", result);
// @ts-ignore
mainEvent.emit("invoice_updated", result);
APISuccess(result)(res);
}).catch((err) => {
APIError(err)(res);
});
}

function removeById(req: Request, res: Response)
{
API.removeByUid(req.params.uid as IInvoice["uid"])
.then((result)=>{
// @ts-ignore
mainEvent.emit("invoice_deleted", result);
APISuccess(result, 204)(res)
});
};
Expand Down
3 changes: 3 additions & 0 deletions src/Routes/v2/Orders/Orders.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import NewOrderCreated from "../../../Email/Templates/Orders/NewOrderCreated";
import { IConfigurableOptions } from "../../../Interfaces/ConfigurableOptions";
import { CreatePaymentIntent } from "../../../Payments/Stripe";
import { createSwishQRCode } from "../../../Payments/Swish";
import mainEvent from "../../../Events/Main";

async function createOrder(customer: ICustomer, products: Array<{
product_id: IProduct["id"],
Expand Down Expand Up @@ -55,6 +56,8 @@ async function createOrder(customer: ICustomer, products: Array<{
uid: idOrder(),
}).save());

mainEvent.emit("order_created", order);

SendEmail(customer.personal.email, `New order from ${Company_Name !== "" ? Company_Name : "CPG"} #${order.id}`, {
isHTML: true,
body: NewOrderCreated(order, customer),
Expand Down
7 changes: 7 additions & 0 deletions src/Routes/v2/Orders/Orders.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { SendEmail } from "../../../Email/Send";
import CustomerModel from "../../../Database/Schemas/Customers/Customer";
import NewOrderCreated from "../../../Email/Templates/Orders/NewOrderCreated";
import { Company_Name } from "../../../Config";
import mainEvent from "../../../Events/Main";

const API = new BaseModelAPI<IOrder>(idOrder, OrderModel);

Expand All @@ -36,6 +37,8 @@ async function insert(req: Request, res: Response)
API.create(req.body)
.then(async (result) => {

mainEvent.emit("order_created", result);

const customer = await CustomerModel.findOne({ id: result.customer_uid });

if(customer)
Expand Down Expand Up @@ -80,6 +83,8 @@ function list(req: Request, res: Response)
function patch(req: Request, res: Response)
{
API.findAndPatch((req.params.uid as IOrder["uid"]), req.body).then((result) => {
// @ts-ignore
mainEvent.emit("order_updated", result);
APISuccess(result)(res);
});
}
Expand All @@ -88,6 +93,8 @@ function removeById(req: Request, res: Response)
{
API.removeByUid(req.params.uid as IOrder["uid"])
.then((result)=>{
// @ts-ignore
mainEvent.emit("order_deleted", result);
APISuccess(result, 204)(res)
});
};
Expand Down
8 changes: 8 additions & 0 deletions src/Routes/v2/Products/Products.controller.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Request, Response } from "express";
import ProductModel from "../../../Database/Schemas/Products";
import mainEvent from "../../../Events/Main";
import { IProduct } from "../../../Interfaces/Products";
import { idProduct } from "../../../Lib/Generator";
import { APISuccess } from "../../../Lib/Response";
Expand All @@ -11,6 +12,9 @@ function insert(req: Request, res: Response)
{
API.create(req.body)
.then((result) => {

mainEvent.emit("product_created", result);

APISuccess({
uid: result.uid
})(res);
Expand Down Expand Up @@ -47,6 +51,8 @@ function list(req: Request, res: Response)
function patch(req: Request, res: Response)
{
API.findAndPatch((req.params.uid as IProduct["uid"]), req.body).then((result) => {
// @ts-ignore
mainEvent.emit("product_updated", result);
APISuccess(result)(res);
});
}
Expand All @@ -55,6 +61,8 @@ function removeById(req: Request, res: Response)
{
API.removeByUid(req.params.uid as IProduct["uid"])
.then((result)=>{
// @ts-ignore
mainEvent.emit("product_deleted", result);
APISuccess(result, 204)(res)
});
};
Expand Down
1 change: 0 additions & 1 deletion src/Routes/v2/Stripe/Stripe.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,6 @@ export default class StripeRouter
switch (intent.status) {
case 'succeeded':
message = 'Success! Payment received.';
invoice.paid = true;
href = Company_Website;
status = intent.status;
break;
Expand Down
Loading

0 comments on commit a10685c

Please sign in to comment.