|
@@ -4,6 +4,7 @@ import { cartService } from "./cart-service.js";
|
|
|
import sessionService from "#modules/client/users/auth/services/session-service.js";
|
|
|
import { ApiError } from "#exceptions/api-error.js";
|
|
|
import { RouterUtils } from "#utils/router-utils.js";
|
|
|
+import { ordersService } from "../orders-service.js";
|
|
|
|
|
|
class ClientCartController {
|
|
|
async addItemToCart(req: Request, res: Response) {
|
|
@@ -34,8 +35,38 @@ class ClientCartController {
|
|
|
"Тип товара не совпадает",
|
|
|
);
|
|
|
|
|
|
- // проверка на наличие корзины пользователя
|
|
|
+ // проверка на наличие товара в наличии
|
|
|
+ // if (realProduct.stockQuantity < product.) {
|
|
|
+ // throw ApiError.BadRequest("notEnoughStock", "Недостаточно товара в наличии");
|
|
|
+ // }
|
|
|
+
|
|
|
+ // проверка нет ли товара в чужих заказах
|
|
|
+ if (product.productType === "ACTIVITY_REGISTRATION") {
|
|
|
+ const isItemExist = await ordersService.checkItemInOrders({
|
|
|
+ productId: product.productId,
|
|
|
+ activity_reg_id: product.activityRegId,
|
|
|
+ });
|
|
|
+
|
|
|
+ if (isItemExist)
|
|
|
+ throw ApiError.BadRequest(
|
|
|
+ "itemAlreadyInOrder",
|
|
|
+ "Товар уже у кого-то заказе",
|
|
|
+ );
|
|
|
+ }
|
|
|
+ if (product.productType === "ACTIVITY_PARTICIPANT") {
|
|
|
+ const isItemExist = await ordersService.checkItemInOrders({
|
|
|
+ productId: product.productId,
|
|
|
+ activity_reg_id: product.activityRegId,
|
|
|
+ pe_member_id: product.peMemberId,
|
|
|
+ });
|
|
|
+ if (isItemExist)
|
|
|
+ throw ApiError.BadRequest(
|
|
|
+ "itemAlreadyInOrder",
|
|
|
+ "Товар уже у кого-то заказе",
|
|
|
+ );
|
|
|
+ }
|
|
|
|
|
|
+ // проверка на наличие корзины пользователя
|
|
|
const cart = await cartService.getCart(
|
|
|
user ? { userId: user.userId } : { cartId: cartId! },
|
|
|
true,
|
|
@@ -56,40 +87,38 @@ class ClientCartController {
|
|
|
if (cartItem) {
|
|
|
throw ApiError.BadRequest("itemAlreadyInCart", "Товар уже в корзине");
|
|
|
}
|
|
|
- // в корзине нет такого товара
|
|
|
- else {
|
|
|
- switch (product.productType) {
|
|
|
- case "SHOP_ORDER":
|
|
|
- case "TICKET": {
|
|
|
- await cartService.addItemToCart({
|
|
|
- productType: product.productType,
|
|
|
- cartId: cart.cartId,
|
|
|
- productId: realProduct.productId,
|
|
|
- priceAtAddition: realProduct.price,
|
|
|
- });
|
|
|
- break;
|
|
|
- }
|
|
|
- case "ACTIVITY_REGISTRATION": {
|
|
|
- await cartService.addItemToCart({
|
|
|
- productType: product.productType,
|
|
|
- cartId: cart.cartId,
|
|
|
- productId: realProduct.productId,
|
|
|
- priceAtAddition: realProduct.price,
|
|
|
- activityRegId: product.activityRegId,
|
|
|
- });
|
|
|
- break;
|
|
|
- }
|
|
|
- case "ACTIVITY_PARTICIPANT": {
|
|
|
- await cartService.addItemToCart({
|
|
|
- productType: product.productType,
|
|
|
- cartId: cart.cartId,
|
|
|
- productId: realProduct.productId,
|
|
|
- priceAtAddition: realProduct.price,
|
|
|
- activityRegId: product.activityRegId,
|
|
|
- peMemberId: product.peMemberId,
|
|
|
- });
|
|
|
- break;
|
|
|
- }
|
|
|
+
|
|
|
+ switch (product.productType) {
|
|
|
+ case "SHOP_ORDER":
|
|
|
+ case "TICKET": {
|
|
|
+ await cartService.addItemToCart({
|
|
|
+ productType: product.productType,
|
|
|
+ cartId: cart.cartId,
|
|
|
+ productId: realProduct.productId,
|
|
|
+ priceAtAddition: realProduct.price,
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "ACTIVITY_REGISTRATION": {
|
|
|
+ await cartService.addItemToCart({
|
|
|
+ productType: product.productType,
|
|
|
+ cartId: cart.cartId,
|
|
|
+ productId: realProduct.productId,
|
|
|
+ priceAtAddition: realProduct.price,
|
|
|
+ activityRegId: product.activityRegId,
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "ACTIVITY_PARTICIPANT": {
|
|
|
+ await cartService.addItemToCart({
|
|
|
+ productType: product.productType,
|
|
|
+ cartId: cart.cartId,
|
|
|
+ productId: realProduct.productId,
|
|
|
+ priceAtAddition: realProduct.price,
|
|
|
+ activityRegId: product.activityRegId,
|
|
|
+ peMemberId: product.peMemberId,
|
|
|
+ });
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|