Добро пожаловать!
-
- Это проект V!U!E! Pizza для обучения на профессиональном онлайн‑курсе
- «Vue.js для опытных разработчиков».
-
diff --git a/backend/src/controllers/address.controller.ts b/backend/src/controllers/address.controller.ts index 0742f87e..b8857c74 100644 --- a/backend/src/controllers/address.controller.ts +++ b/backend/src/controllers/address.controller.ts @@ -21,12 +21,16 @@ import { import {Address} from '../models'; import {AddressRepository} from '../repositories'; import {authenticate} from '@loopback/authentication'; +import {inject} from '@loopback/core'; +import {SecurityBindings, UserProfile} from '@loopback/security'; @authenticate('jwt') export class AddressController { constructor( @repository(AddressRepository) public addressRepository : AddressRepository, + @inject(SecurityBindings.USER) + private currentUserProfile: UserProfile, ) {} @post('/addresses') @@ -41,7 +45,6 @@ export class AddressController { schema: { example: { name: "string", - userId: "string", street: "string", building: "string", flat: "string", @@ -51,9 +54,13 @@ export class AddressController { }, }, }) - address: Address, + address: Omit
, ): Promise { - return this.addressRepository.create(address); + const userId = this.currentUserProfile.id; + return this.addressRepository.create({ + ...address, + userId: userId, + }); } @oas.visibility(OperationVisibility.UNDOCUMENTED) @@ -81,8 +88,10 @@ export class AddressController { }, }) async find(): Promise { - const addresses = await this.addressRepository.find(); - return addresses.filter(address => !!address.userId); + const userId = this.currentUserProfile.id; + return this.addressRepository.find({ + where: {userId: userId} + }); } @oas.visibility(OperationVisibility.UNDOCUMENTED) diff --git a/backend/src/controllers/order.controller.ts b/backend/src/controllers/order.controller.ts index fe3e0151..c1f9f616 100644 --- a/backend/src/controllers/order.controller.ts +++ b/backend/src/controllers/order.controller.ts @@ -25,6 +25,8 @@ import { PizzaRepository } from '../repositories'; import {authenticate} from "@loopback/authentication"; +import {inject} from '@loopback/core'; +import {SecurityBindings, UserProfile} from '@loopback/security'; export class OrderController { constructor( @@ -38,6 +40,8 @@ export class OrderController { public pizzaIngredientRepository : PizzaIngredientRepository, @repository(PizzaRepository) public pizzaRepository : PizzaRepository, + @inject(SecurityBindings.USER, {optional: true}) + private currentUserProfile?: UserProfile, ) {} @post('/orders') @@ -60,6 +64,7 @@ export class OrderController { "userId": "string", "phone": "+7 999-999-99-99", "address": { + "name": "string", "street": "string", "building": "string", "flat": "string", @@ -99,29 +104,34 @@ export class OrderController { let addressId = address?.id; // if it is a new address if (address && !addressId) { - const name = `ул.${address.street}, д.${address.building}, кв.${address.flat}`; - const newAddress = await this.addressRepository.create({...address, name, userId}); + const newAddress = await this.addressRepository.create({...address, userId}); addressId = newAddress.id; } const newOrder = await this.orderRepository.create({...orderToSave, addressId}); - for (const pizza of pizzas) { - const { ingredients, ...pizzaToSave } = pizza; - const newPizza = await this.pizzaRepository.create({ - ...pizzaToSave, - orderId: newOrder.id - }); - for (const ingredient of ingredients) { - await this.pizzaIngredientRepository.create({ - ...ingredient, - pizzaId: newPizza.id - }) + if (pizzas && Array.isArray(pizzas)) { + for (const pizza of pizzas) { + const { ingredients, ...pizzaToSave } = pizza; + const newPizza = await this.pizzaRepository.create({ + ...pizzaToSave, + orderId: newOrder.id + }); + if (ingredients && Array.isArray(ingredients)) { + for (const ingredient of ingredients) { + await this.pizzaIngredientRepository.create({ + ...ingredient, + pizzaId: newPizza.id + }) + } + } } } - for (const item of misc) { - await this.miscOrderRepository.create({ - ...item, - orderId: newOrder.id - }) + if (misc && Array.isArray(misc)) { + for (const item of misc) { + await this.miscOrderRepository.create({ + ...item, + orderId: newOrder.id + }) + } } return newOrder; } @@ -195,7 +205,16 @@ export class OrderController { }, }) async find(): Promise
- Это проект V!U!E! Pizza для обучения на профессиональном онлайн‑курсе
- «Vue.js для опытных разработчиков».
-
Текущее значение: {{ basicCounter }}
+Значение: {{ limitedCounter }} (min: 1, max: 10)
+Количество в корзине: {{ cartCounter }}
+Значение: {{ stepCounter }} (шаг: 5)
+Значение: {{ readOnlyCounter }} (только для чтения)
+Начинка:
+ +Итого: {{ totalPrice }} ₽
+Перетащите ингредиент на пиццу для добавления
+Основной соус:
+ +Перетащите ингредиент на пиццу для добавления
+У вас пока нет заказов
++ {{ item.description }} +
++ {{ item.quantity > 1 ? `${item.quantity}×` : '' }}{{ item.price }} ₽ +
++ {{ item.name }} + {{ item.price }} ₽ +
++ Адрес доставки: {{ order.address }} +
++ Контактный телефон: + {{ user.phone }} +
+{{ formatAddress(address) }}
+