Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Development #411

Merged
merged 34 commits into from
Nov 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
0a6668e
implement the menu search
olasunkanmi-SE Jul 26, 2023
ff364d1
fix code smell
olasunkanmi-SE Jul 26, 2023
65b6009
calculate service charge
olasunkanmi-SE Sep 11, 2023
c6c683f
update sonar project config
olasunkanmi-SE Sep 11, 2023
cc60885
update total order calculation
olasunkanmi-SE Sep 11, 2023
d2dfe38
add cart items to order
olasunkanmi-SE Sep 11, 2023
541a0a3
move email header check to the backend
olasunkanmi-SE Sep 11, 2023
55765a0
remove quantity from order
olasunkanmi-SE Sep 23, 2023
5c3e4c7
Merge branch 'release' into development
olasunkanmi-SE Sep 23, 2023
f0dfa7b
update selected items to include itemId
olasunkanmi-SE Sep 23, 2023
faa996d
Merge branch 'development' of github.com:olasunkanmi-SE/restaurant in…
olasunkanmi-SE Sep 23, 2023
dead621
make cartitem and selectedCart Items optional in parent models
olasunkanmi-SE Sep 23, 2023
0dcffa7
Merge branch 'release' into development
olasunkanmi-SE Sep 23, 2023
ad8f925
create the order service
olasunkanmi-SE Sep 24, 2023
ddb05dd
Merge branch 'development' of github.com:olasunkanmi-SE/restaurant in…
olasunkanmi-SE Sep 24, 2023
e28d2ef
Merge branch 'release' into development
olasunkanmi-SE Sep 24, 2023
a83f120
create order controller
olasunkanmi-SE Sep 24, 2023
d90a534
checkout and fix (#391)
olasunkanmi-SE Oct 24, 2023
a998d1e
Test (#393)
olasunkanmi-SE Oct 24, 2023
599e37c
Test (#396)
olasunkanmi-SE Oct 24, 2023
3ab65de
Merge branch 'release' into development
olasunkanmi-SE Oct 24, 2023
35a3d9d
Test (#400)
olasunkanmi-SE Oct 25, 2023
b6dd7f1
Test (#403)
olasunkanmi-SE Oct 26, 2023
c094940
Merge branch 'release' into development
olasunkanmi-SE Oct 26, 2023
2bd6071
create the create order service
olasunkanmi-SE Oct 29, 2023
1d3abea
Merge branch 'release' into development
olasunkanmi-SE Oct 29, 2023
b4f6733
create order
olasunkanmi-SE Oct 29, 2023
f118a7b
Merge branch 'development' of github.com:olasunkanmi-SE/restaurant in…
olasunkanmi-SE Oct 29, 2023
420f2a9
Merge branch 'release' into development
olasunkanmi-SE Oct 29, 2023
325edb9
check for duplicate orders before creating one
olasunkanmi-SE Nov 12, 2023
736597c
Merge branch 'release' into development
olasunkanmi-SE Nov 12, 2023
dc6f1b4
Merge branch 'release' of github.com:olasunkanmi-SE/restaurant into d…
olasunkanmi-SE Nov 12, 2023
4766447
Merge branch 'development' of github.com:olasunkanmi-SE/restaurant in…
olasunkanmi-SE Nov 12, 2023
2f47f7b
remove ChatGpt code reviewer
olasunkanmi-SE Nov 12, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .github/workflows/workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,12 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
- name: ChatGPT comment
uses: kxxt/chatgpt-action@v0.3
id: chatgpr
with:
number: ${{ github.event.pull_request.number }}
sessionToken: ${{ secrets.CHATGPT_SESSION_TOKEN }}
split: "yolo"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# - name: ChatGPT comment
# uses: kxxt/chatgpt-action@v0.3
# id: chatgpr
# with:
# number: ${{ github.event.pull_request.number }}
# sessionToken: ${{ secrets.CHATGPT_SESSION_TOKEN }}
# split: "yolo"
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
7 changes: 4 additions & 3 deletions backend/src/cart/cart-item.mapper.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { Injectable } from '@nestjs/common';
import { HttpStatus, Injectable } from '@nestjs/common';
import { AuditMapper } from 'src/audit';
import { IMapper } from 'src/domain';
import { CartItemDataModel } from 'src/infrastructure/data_access/repositories/schemas/cartItem.schema';
import { SelectedCartItemDataModel } from 'src/infrastructure/data_access/repositories/schemas/selected-cart-item.schema';
import { CartItem } from './cart-item';
import { SelectedCartItemMapper } from './selectedItems/selected-cart-item.mapper';
import { SelectedCartItem } from './selectedItems/selectedCartItem';
import { throwApplicationError } from 'src/infrastructure/utilities/exception-instance';

@Injectable()
export class CartItemMapper implements IMapper<CartItem, CartItemDataModel> {
Expand Down Expand Up @@ -40,8 +41,8 @@ export class CartItemMapper implements IMapper<CartItem, CartItemDataModel> {
auditDeletedDateTime,
};
return cartItemDocument;
} catch (error) {
console.log(error);
} catch (error: any) {
throwApplicationError(HttpStatus.BAD_REQUEST, error.message);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { Order } from 'src/order/order';
import { OrderDataModel, OrderDocument } from '../schemas/order.schema';
import { IGenericDocument } from 'src/infrastructure/database';
import { CartItemDataModel } from '../schemas/cartItem.schema';
import { Result } from 'src/domain';

export interface IOrderRepository extends IGenericDocument<Order, OrderDocument> {
getOrders(): Promise<Order[]>;
createOrder(order: OrderDataModel): Promise<any>;
createOrder(order: OrderDataModel): Promise<Result<Order>>;
getDuplicateOrder(type: string, merchantId: string, cartItems: CartItemDataModel[]): Promise<boolean>;
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { OrderMapper } from './../../../order/order.mapper';
import { IOrderRepository } from './interfaces/order-repository.interface';
import { OrderDataModel, OrderDocument } from './schemas/order.schema';
import { Result } from 'src/domain';
import { CartItemDataModel } from './schemas/cartItem.schema';

@Injectable()
export class OrderRepository extends GenericDocumentRepository<Order, OrderDocument> implements IOrderRepository {
Expand All @@ -20,12 +21,22 @@ export class OrderRepository extends GenericDocumentRepository<Order, OrderDocum
this.orderMapper = orderMapper;
}

async getOrders(): Promise<Order[]> {
return (await this.find({})).getValue();
}

async createOrder(order: OrderDataModel): Promise<Result<Order>> {
const response = (await this.create(order)).getValue();
return response ? Result.ok(response) : Result.fail('Could not create order', HttpStatus.INTERNAL_SERVER_ERROR);
}

async getDuplicateOrder(type: string, merchantId: string, cartItems: CartItemDataModel[]): Promise<boolean> {
const currentTime: Date = new Date();
const duplicateTimeFrameInMinutes = 60 * 1000;
const selectedItemIds = cartItems.map((item) => item._id);
const result: Result<Order[]> = await this.find({
type,
merchantId,
cartItems: { $elemMatch: { $in: selectedItemIds } },
auditCreatedDateTime: { $gte: new Date(currentTime.getMilliseconds() - duplicateTimeFrameInMinutes) },
});
const potentialDuplicateOrder = result.getValue();
return potentialDuplicateOrder.length > 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,6 @@ export abstract class GenericDocumentRepository<TEntity, T extends Document> imp
.limit(options ? options.limit : null)
.lean()
.exec();
if (!documents?.length) {
throwApplicationError(HttpStatus.INTERNAL_SERVER_ERROR, 'documents does not exist');
}
const entities = documents?.length ? documents.map((document) => this.mapper.toDomain(document)) : [];
return Result.ok(entities);
} catch (error) {
Expand Down
3 changes: 3 additions & 0 deletions backend/src/order/order-entity.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,6 @@ export interface IOrder {
audit: Audit;
cartItems?: CartItem[];
}

//tableNumber
//status comment if any
10 changes: 6 additions & 4 deletions backend/src/order/order.service.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { HttpStatus, Inject } from '@nestjs/common';
import { Types } from 'mongoose';
import { TYPES } from 'src/application';
import { CartItem } from 'src/cart/cart-item';
import { SelectedCartItem } from 'src/cart/selectedItems/selectedCartItem';
import { Audit, Result } from 'src/domain';
import { Context, IContextService, MerchantRepository } from 'src/infrastructure';
import { CartItemRepository } from 'src/infrastructure/data_access/repositories/cart-item.repository';
import { ICartItemRepository } from 'src/infrastructure/data_access/repositories/interfaces/cart-item-repository.interface';
import { IOrderRepository } from 'src/infrastructure/data_access/repositories/interfaces/order-repository.interface';
import { CartItemDataModel } from 'src/infrastructure/data_access/repositories/schemas/cartItem.schema';
import { OrderDataModel } from 'src/infrastructure/data_access/repositories/schemas/order.schema';
Expand All @@ -20,7 +19,6 @@ import { Order } from './order';
import { IOrderResponseDTO } from './order-response.dto';
import { OrderMapper } from './order.mapper';
import { OrderParser } from './order.parser';
import { ICartItemRepository } from 'src/infrastructure/data_access/repositories/interfaces/cart-item-repository.interface';

export class OrderService implements IOrderService {
private context: Context;
Expand All @@ -42,6 +40,10 @@ export class OrderService implements IOrderService {
async createOrder(orderSummary: CreateOrderDTO): Promise<Result<IOrderResponseDTO>> {
await this.merchantService.validateContext();
const { state, type, merchantId, total, cartItems } = orderSummary;
const orderDuplicate = await this.orderRepository.getDuplicateOrder(type, merchantId, cartItems);
if (orderDuplicate) {
throwApplicationError(HttpStatus.NOT_FOUND, 'Duplicate order detected. Please confirm.');
}
const validateMerchant: Result<Merchant> = await this.merchantRepository.findOne({ _id: merchantId });
if (!validateMerchant.isSuccess) {
throwApplicationError(HttpStatus.NOT_FOUND, `Merchant does not exist`);
Expand Down Expand Up @@ -99,7 +101,6 @@ export class OrderService implements IOrderService {
} else {
throwApplicationError(HttpStatus.INTERNAL_SERVER_ERROR, `Could not create an order`);
}

const savedSelectedItems = insertedItems.getValue();
const savedItemsMap = savedSelectedItems.reduce((map, item) => {
const cartItemIdToString = this.cartItemRepository.objectIdToString(item.cartItemId);
Expand All @@ -116,6 +117,7 @@ export class OrderService implements IOrderService {
return Result.ok(response);
}
} catch (error) {
console.error(error);
session.abortTransaction();
} finally {
await session.endSession();
Expand Down