From e9d19185f90f2d0a0b77a667081ff91ea342be90 Mon Sep 17 00:00:00 2001 From: seaz96 Date: Thu, 31 Oct 2024 21:03:22 +0500 Subject: [PATCH 1/4] add name to readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d37b6d1..3a0a01a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# x курс -# Фамилия Имя Отчество +# 3 курс +# Азанов Никита Александрович # Проектная работа "Веб-ларек" Стек: HTML, SCSS, TS, Webpack From a9c17286aac09deb72b4e8dc660e03d8031d2dd9 Mon Sep 17 00:00:00 2001 From: seaz96 Date: Fri, 1 Nov 2024 00:14:39 +0500 Subject: [PATCH 2/4] smth looks like entities --- README.md | 1 - src/types/appState.tsx | 9 +++++++++ src/types/basket.tsx | 8 ++++++++ src/types/index.ts | 0 src/types/order.tsx | 8 ++++++++ src/types/product.tsx | 9 +++++++++ 6 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 src/types/appState.tsx create mode 100644 src/types/basket.tsx delete mode 100644 src/types/index.ts create mode 100644 src/types/order.tsx create mode 100644 src/types/product.tsx diff --git a/README.md b/README.md index 3a0a01a..ce4a6e4 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,6 @@ Важные файлы: - src/pages/index.html — HTML-файл главной страницы -- src/types/index.ts — файл с типами - src/index.ts — точка входа приложения - src/scss/styles.scss — корневой файл стилей - src/utils/constants.ts — файл с константами diff --git a/src/types/appState.tsx b/src/types/appState.tsx new file mode 100644 index 0000000..c727e6c --- /dev/null +++ b/src/types/appState.tsx @@ -0,0 +1,9 @@ +import { IBasket } from './basket'; +import { IOrder } from './order'; +import { IProduct } from './product'; + +export interface IAppState { + basket: IBasket; + order: IOrder; + products: IProduct[]; +} \ No newline at end of file diff --git a/src/types/basket.tsx b/src/types/basket.tsx new file mode 100644 index 0000000..c1a0f48 --- /dev/null +++ b/src/types/basket.tsx @@ -0,0 +1,8 @@ +export interface IBasket{ + items: Map, + totalPrice: number, + add(id: string): void; + changeAmount(id: string, amount: number): void; + remove(id: string): void; + clear(): void; +} \ No newline at end of file diff --git a/src/types/index.ts b/src/types/index.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/types/order.tsx b/src/types/order.tsx new file mode 100644 index 0000000..b186592 --- /dev/null +++ b/src/types/order.tsx @@ -0,0 +1,8 @@ +export interface IOrder { + payment: string; + email: string; + phone: string; + address: string; + total: number; + items: string[]; +} \ No newline at end of file diff --git a/src/types/product.tsx b/src/types/product.tsx new file mode 100644 index 0000000..84cfcca --- /dev/null +++ b/src/types/product.tsx @@ -0,0 +1,9 @@ +export interface IProduct { + id: string; + description: string; + image: string; + title: string; + category: string; + price: number; + inBasket: boolean; +} \ No newline at end of file From 30a4fe1e53e685d11edb8ec2bc4144fa663b0e2d Mon Sep 17 00:00:00 2001 From: seaz96 Date: Fri, 1 Nov 2024 00:18:04 +0500 Subject: [PATCH 3/4] add api and models --- src/types/api.tsx | 7 +++++++ src/types/basket.tsx | 8 +++++++- src/types/order.tsx | 4 ++++ src/types/product.tsx | 4 +++- 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 src/types/api.tsx diff --git a/src/types/api.tsx b/src/types/api.tsx new file mode 100644 index 0000000..9dfd113 --- /dev/null +++ b/src/types/api.tsx @@ -0,0 +1,7 @@ +import { IOrder } from './order'; + +export interface IApi { + getProducts(): Promise; + getProductById(id: string): Promise; + postOrder(order: IOrder): Promise; +} \ No newline at end of file diff --git a/src/types/basket.tsx b/src/types/basket.tsx index c1a0f48..c2fbda4 100644 --- a/src/types/basket.tsx +++ b/src/types/basket.tsx @@ -1,8 +1,14 @@ -export interface IBasket{ +import { IOrder } from './order'; + +export interface IBasket { items: Map, totalPrice: number, add(id: string): void; changeAmount(id: string, amount: number): void; remove(id: string): void; clear(): void; +} + +export interface IBasketModel extends IBasket { + } \ No newline at end of file diff --git a/src/types/order.tsx b/src/types/order.tsx index b186592..743f02f 100644 --- a/src/types/order.tsx +++ b/src/types/order.tsx @@ -5,4 +5,8 @@ export interface IOrder { address: string; total: number; items: string[]; +} + +export interface IOrderModel extends IOrder { + } \ No newline at end of file diff --git a/src/types/product.tsx b/src/types/product.tsx index 84cfcca..40e1dd2 100644 --- a/src/types/product.tsx +++ b/src/types/product.tsx @@ -6,4 +6,6 @@ export interface IProduct { category: string; price: number; inBasket: boolean; -} \ No newline at end of file +} + +export interface IProductModel extends IProduct {} \ No newline at end of file From 824393a36ddba83f5f281896114cb8aa9d0a899d Mon Sep 17 00:00:00 2001 From: seaz96 Date: Fri, 1 Nov 2024 19:39:41 +0500 Subject: [PATCH 4/4] add docs, update models --- README.md | 59 ++++++++++++++++++++++++++++++++++++++++++ src/types/api.tsx | 7 ++--- src/types/appState.tsx | 14 +++++----- src/types/basket.tsx | 10 +++---- src/types/order.tsx | 8 +++--- src/types/product.tsx | 6 ++++- 6 files changed, 84 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index ce4a6e4..3805454 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ - src/scss/styles.scss — корневой файл стилей - src/utils/constants.ts — файл с константами - src/utils/utils.ts — файл с утилитами +- src/types — типы и модели ## Установка и запуск Для установки и запуска проекта необходимо выполнить команды @@ -41,3 +42,61 @@ npm run build ``` yarn build ``` + +## Структуры данных +### Типы +#### IApi +Описание: интерфейс, который определяет методы для взаимодействия с API: +- getProducts(): возвращает список продуктов (IProduct[]) с помощью асинхронного метода (Promise). +- getProductById(id: string): возвращает продукт по его идентификатору (id) с помощью асинхронного метода (Promise). +- postOrder(order: IOrder): отправляет заказ (order) и возвращает результат асинхронно (Promise). + +#### IAppState +Описание: интерфейс, который определяет структуру состояния приложения: +- basket: объект типа IBasketModel, который содержит информацию о корзине. +- order: объект типа IOrderModel, который содержит информацию о заказе. +- catalog: массив объектов типа ICatalogModel, который содержит информацию о каталоге продуктов. + +#### IBasket +Описание: интерфейс, который определяет структуру корзины: +- items: объект типа Map, который содержит информацию о товарах в корзине и их количествах. +- totalPrice: число, которое представляет общую стоимость товаров в корзине. + +#### IOrder +Описание: интерфейс, который определяет структуру заказа: +- payment: строка, которая представляет способ оплаты. +- email: строка, которая представляет электронную почту покупателя. +- phone: строка, которая представляет телефон покупателя. +- address: строка, которая представляет адрес доставки. +- total: число, которое представляет общую стоимость заказа. +- items: массив строк, который содержит идентификаторы товаров в заказе. + +#### IProduct +Описание: интерфейс, который определяет структуру товара: +- id: строка, которая представляет идентификатор товара. +- description: строка, которая представляет описание товара. +- image: строка, которая представляет URL изображения товара. +- title: строка, которая представляет название товара. +- category: строка, которая представляет категорию товара. +- price: число, которое представляет цен + +### Модели +#### IBasketModel +Описание: интерфейс, который определяет методы для работы с корзиной: +- basket: объект типа IBasket, который содержит информацию о корзине. +- add(id: string): добавляет товар с указанным id в корзину. +- changeAmount(id: string, amount: number): изменяет количество товара с указанным id в корзине. +- remove(id: string): удаляет товар с указанным id из корзины. +- clear(): очищает корзину. + +#### IOrderModel +Описание: интерфейс, который определяет методы для работы с заказом: +- updateField(name: string, value: any): обновляет значение поля с указанным name в заказе. +- clearField(name: string): очищает значение поля с указанным name в заказе. +- clear(): очищает заказ. + +#### ICatalogModel +Описание: интерфейс, который определяет структуру каталога продуктов и методы для работы с ним: +- products: массив объектов типа IProduct, который содержит список всех продуктов в каталоге. +- getAll(): возвращает список всех продуктов в каталоге с помощью асинхронного метода (Promise). +- getProduct(id: string): возвращает продукт по его идентификатору (id) с помощью асинхронного метода (Promise). diff --git a/src/types/api.tsx b/src/types/api.tsx index 9dfd113..092ab5e 100644 --- a/src/types/api.tsx +++ b/src/types/api.tsx @@ -1,7 +1,8 @@ import { IOrder } from './order'; +import {IProduct} from "./product"; export interface IApi { - getProducts(): Promise; - getProductById(id: string): Promise; + getProducts(): Promise; + getProductById(id: string): Promise; postOrder(order: IOrder): Promise; -} \ No newline at end of file +} diff --git a/src/types/appState.tsx b/src/types/appState.tsx index c727e6c..18e419f 100644 --- a/src/types/appState.tsx +++ b/src/types/appState.tsx @@ -1,9 +1,9 @@ -import { IBasket } from './basket'; -import { IOrder } from './order'; -import { IProduct } from './product'; +import { IBasketModel} from './basket'; +import { IOrderModel} from './order'; +import { ICatalogModel } from './product'; export interface IAppState { - basket: IBasket; - order: IOrder; - products: IProduct[]; -} \ No newline at end of file + basket: IBasketModel; + order: IOrderModel; + catalog: ICatalogModel[]; +} diff --git a/src/types/basket.tsx b/src/types/basket.tsx index c2fbda4..ca30ce0 100644 --- a/src/types/basket.tsx +++ b/src/types/basket.tsx @@ -1,14 +1,12 @@ -import { IOrder } from './order'; - export interface IBasket { items: Map, totalPrice: number, +} + +export interface IBasketModel { + basket: IBasket; add(id: string): void; changeAmount(id: string, amount: number): void; remove(id: string): void; clear(): void; } - -export interface IBasketModel extends IBasket { - -} \ No newline at end of file diff --git a/src/types/order.tsx b/src/types/order.tsx index 743f02f..4a09c34 100644 --- a/src/types/order.tsx +++ b/src/types/order.tsx @@ -7,6 +7,8 @@ export interface IOrder { items: string[]; } -export interface IOrderModel extends IOrder { - -} \ No newline at end of file +export interface IOrderModel { + updateField(name: string, value: any): void; + clearField(name: string): void; + clear(): void; +} diff --git a/src/types/product.tsx b/src/types/product.tsx index 40e1dd2..582eeb5 100644 --- a/src/types/product.tsx +++ b/src/types/product.tsx @@ -8,4 +8,8 @@ export interface IProduct { inBasket: boolean; } -export interface IProductModel extends IProduct {} \ No newline at end of file +export interface ICatalogModel { + products: IProduct[]; + getAll(): IProduct[]; + getProduct(id: string): IProduct; +}