(feat): frontend get service refactoring
This commit is contained in:
parent
f20da5eb0f
commit
5cf3a7f7f7
@ -45,7 +45,7 @@ const App = () => {
|
|||||||
const { content, header, loader } = useSelector((state: ApplicationState) => state)
|
const { content, header, loader } = useSelector((state: ApplicationState) => state)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
dispatch(settingsActionCreators.requestContent())
|
dispatch(settingsActionCreators.requestContent({ searchParams: { locale: "en-US" }}))
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@ -1,11 +1,16 @@
|
|||||||
import { AuthorModel, FormItemModel, HeaderModel, ImageModel } from "./"
|
import { AuthorModel, FormItemModel, HeaderModel, ImageModel } from "./"
|
||||||
import { TitleSectionModel } from "./pageSections"
|
import { TitleSectionModel } from "./pageSections"
|
||||||
|
|
||||||
|
export interface Params {
|
||||||
export interface RequestModel {
|
|
||||||
[key: string]: string | undefined
|
[key: string]: string | undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface RequestModel<T, TT> {
|
||||||
|
pathParams?: T
|
||||||
|
searchParams?: TT,
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
export interface ResponseModel {}
|
export interface ResponseModel {}
|
||||||
|
|
||||||
export interface AddressPageSectionModel extends PageSectionModel {
|
export interface AddressPageSectionModel extends PageSectionModel {
|
||||||
|
|||||||
@ -1,43 +1,107 @@
|
|||||||
import { RequestModel } from "./abstractions"
|
import { Params, RequestModel } from "./abstractions"
|
||||||
|
|
||||||
|
|
||||||
// Blog requests
|
// Blog requests -----------------------------------------------------
|
||||||
export interface GetBlogCatalogRequestModel extends RequestModel {
|
export interface GetBlogcatalogPathParams extends Params {}
|
||||||
|
export interface GeBlogCatalogSearchParams extends Params {}
|
||||||
|
|
||||||
|
|
||||||
|
export interface GetBlogCatalogRequestModel extends RequestModel<GetBlogcatalogPathParams, GeBlogCatalogSearchParams> {
|
||||||
category?: string,
|
category?: string,
|
||||||
searchText?: string,
|
searchText?: string,
|
||||||
currentPage?: string,
|
currentPage?: string,
|
||||||
itemsPerPage?: string
|
itemsPerPage?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GetBlogCategoriesRequestModel extends RequestModel { }
|
// --------------------------------------------------------------------
|
||||||
|
export interface GetBlogCategoriesPathParams extends Params {}
|
||||||
|
export interface GetBlogCategoriesSearchParams extends Params {}
|
||||||
|
export interface GetBlogCategoriesRequestModel extends RequestModel<GetBlogCategoriesPathParams, GetBlogCategoriesSearchParams> { }
|
||||||
|
|
||||||
export interface GetBlogItemRequestModel extends RequestModel {
|
// --------------------------------------------------------------------
|
||||||
|
|
||||||
|
export interface GetBlogItemPathParams extends Params {}
|
||||||
|
export interface GetBlogItemSearchParams extends Params {
|
||||||
slug: string
|
slug: string
|
||||||
}
|
}
|
||||||
|
export interface GetBlogItemRequestModel extends RequestModel<GetBlogItemPathParams, GetBlogItemSearchParams> {
|
||||||
|
|
||||||
export interface GetBlogFeaturedRequestModel extends RequestModel { }
|
}
|
||||||
|
|
||||||
// Static content
|
|
||||||
export interface GetContentRequestModel extends RequestModel {
|
// ---------------------------------------------------------------------
|
||||||
|
export interface GetBlogFeaturedPathParams extends Params {}
|
||||||
|
export interface GetBlogFeaturedSearchParams extends Params {}
|
||||||
|
export interface GetBlogFeaturedRequestModel extends RequestModel<GetBlogFeaturedPathParams, GetBlogFeaturedSearchParams> { }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Static content -------------------------------------------------
|
||||||
|
export interface GetContentPathParams extends Params {}
|
||||||
|
|
||||||
|
export interface GetContentSearchParams extends Params {
|
||||||
locale?: string
|
locale?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shop requests
|
export interface GetContentRequestModel extends RequestModel<GetContentPathParams, GetContentSearchParams> { }
|
||||||
export interface GetShopCatalogRequestModel extends RequestModel {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Shop requests -------------------------------------------------
|
||||||
|
export interface GetShopCatalogPathParams extends Params {}
|
||||||
|
export interface GetShopCatalogSearchParams extends Params {
|
||||||
category?: string,
|
category?: string,
|
||||||
searchText?: string,
|
searchText?: string,
|
||||||
currentPage?: string,
|
currentPage?: string,
|
||||||
itemsPerPage?: string
|
itemsPerPage?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GetShopCategoriesRequestModel extends RequestModel { }
|
export interface GetShopCatalogRequestModel extends RequestModel<GetShopCatalogPathParams, GetShopCatalogSearchParams> { }
|
||||||
|
|
||||||
export interface GetShopFeaturedRequestModel extends RequestModel { }
|
// Shop cart items ------------------------------------------------
|
||||||
|
export interface GetShopCartItemsPathParams extends Params {
|
||||||
export interface GetShopItemRequestModel extends RequestModel {
|
userId: string
|
||||||
slug: string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GetShopRelatedRequestModel extends RequestModel { }
|
export interface GetShopCartItemsSearchParams extends Params {
|
||||||
|
userId: string
|
||||||
|
}
|
||||||
|
|
||||||
export interface GetShopCartRequestModel extends RequestModel {}
|
export interface GetShopCartItemsRequestModel extends RequestModel<GetShopCartItemsPathParams, GetShopCartItemsSearchParams> {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
|
||||||
|
export interface GetShopCategoriesPathParams extends Params {}
|
||||||
|
export interface GetShopCategoriesSearchParams extends Params {}
|
||||||
|
export interface GetShopCategoriesRequestModel extends RequestModel<GetShopCategoriesPathParams, GetShopCategoriesSearchParams> { }
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
export interface GetShopFeaturedSearchParams extends Params {}
|
||||||
|
export interface GetShopFeaturedPathParams extends Params {}
|
||||||
|
export interface GetShopFeaturedRequestModel extends RequestModel<GetShopFeaturedSearchParams, GetShopFeaturedPathParams> { }
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
export interface GetShopItemPathParams extends Params {}
|
||||||
|
export interface GetShopItemSearchParams extends Params {
|
||||||
|
slug: string
|
||||||
|
}
|
||||||
|
export interface GetShopItemRequestModel extends RequestModel<GetShopItemPathParams, GetShopItemSearchParams> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
export interface GetShopRelatedPathParams extends Params {}
|
||||||
|
export interface GetShopRelatedSearchParams extends Params {}
|
||||||
|
export interface GetShopRelatedRequestModel extends RequestModel<GetShopRelatedPathParams, GetShopRelatedSearchParams> { }
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
export interface GetShopCartItemPathParams extends Params {}
|
||||||
|
export interface GetShopCartItemSearchParams extends Params {}
|
||||||
|
|
||||||
|
export interface GetShopCartItemRequestModel extends RequestModel<GetShopCartItemPathParams, GetShopCartItemSearchParams> {}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { BlogItemModel, CategoryModel, CommentModel, HeaderModel, LocalizationModel, MenuItemModel, PaginationModel, RouteModel, ShopItemModel } from "./"
|
import { BlogItemModel, CategoryModel, CommentModel, HeaderModel, ImageModel, LocalizationModel, MenuItemModel, PaginationModel, RouteModel, ShopItemModel } from "./"
|
||||||
import { ResponseModel } from "./abstractions"
|
import { ResponseModel } from "./abstractions"
|
||||||
import * as Pages from "./pages"
|
import * as Pages from "./pages"
|
||||||
|
|
||||||
@ -24,8 +24,18 @@ export interface GetShopRelatedResponseModel extends ResponseModel {
|
|||||||
items: ShopItemModel []
|
items: ShopItemModel []
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GetShopCartResponseModel extends ResponseModel {
|
|
||||||
items: ShopItemModel []
|
export interface GetShopCartItemResponseModel {
|
||||||
|
slug: string
|
||||||
|
sku: string,
|
||||||
|
image: ImageModel,
|
||||||
|
title: string,
|
||||||
|
brandName: string,
|
||||||
|
shortText: string,
|
||||||
|
created: string,
|
||||||
|
price: number,
|
||||||
|
newPrice?: number,
|
||||||
|
quantity: number
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -59,7 +59,9 @@ const BlogItem = () => {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if(params?.slug)
|
if(params?.slug)
|
||||||
dispatch(blogItemActionCreators.requestBlogItem({
|
dispatch(blogItemActionCreators.requestBlogItem({
|
||||||
|
searchParams: {
|
||||||
slug: params.slug
|
slug: params.slug
|
||||||
|
}
|
||||||
}))
|
}))
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import React, { useEffect, useState } from 'react'
|
|||||||
// Redux
|
// Redux
|
||||||
import { useDispatch, useSelector } from 'react-redux'
|
import { useDispatch, useSelector } from 'react-redux'
|
||||||
import { actionCreators as loaderActionCreators } from '../../../store/reducers/Loader'
|
import { actionCreators as loaderActionCreators } from '../../../store/reducers/Loader'
|
||||||
// import { actionCreator as shopCartActionCreator } from '../../../store/reducers/ShopCart'
|
import { actionCreators as shopCartActionCreators } from '../../../store/reducers/ShopCart'
|
||||||
import { ApplicationState } from '../../../store'
|
import { ApplicationState } from '../../../store'
|
||||||
|
|
||||||
import { Button, Col, Container, Input, InputGroup, Row } from 'reactstrap'
|
import { Button, Col, Container, Input, InputGroup, Row } from 'reactstrap'
|
||||||
@ -18,13 +18,19 @@ const Cart = () => {
|
|||||||
const dispatch = useDispatch()
|
const dispatch = useDispatch()
|
||||||
const { content, shopCart } = useSelector((state: ApplicationState) => state)
|
const { content, shopCart } = useSelector((state: ApplicationState) => state)
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
content?.isLoading || shopCart?.isLoading
|
dispatch(shopCartActionCreators.requestCart({ pathParams: { userId: "fdc5aa50-ee68-4bae-a8e6-b8ae2c258f60" }}))
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
content?.isLoading
|
||||||
? dispatch(loaderActionCreators.show())
|
? dispatch(loaderActionCreators.show())
|
||||||
: setTimeout(() => {
|
: setTimeout(() => {
|
||||||
dispatch(loaderActionCreators.hide())
|
dispatch(loaderActionCreators.hide())
|
||||||
}, 1000)
|
}, 1000)
|
||||||
}, [content?.isLoading, shopCart?.isLoading])
|
}, [content?.isLoading])
|
||||||
|
|
||||||
const {
|
const {
|
||||||
currencySymbol = ""
|
currencySymbol = ""
|
||||||
|
|||||||
@ -94,7 +94,9 @@ const ShopItemsSection: FC<ShopItems> = ({
|
|||||||
currentPage: currentPage,
|
currentPage: currentPage,
|
||||||
onClick: (nextPage) => {
|
onClick: (nextPage) => {
|
||||||
dispatch(shopCatalogActionCreators.requestShopCatalog({
|
dispatch(shopCatalogActionCreators.requestShopCatalog({
|
||||||
|
searchParams: {
|
||||||
currentPage: nextPage + ""
|
currentPage: nextPage + ""
|
||||||
|
}
|
||||||
}))
|
}))
|
||||||
|
|
||||||
navigate(`${path}/${nextPage}`)
|
navigate(`${path}/${nextPage}`)
|
||||||
@ -119,7 +121,9 @@ const ShopCatalog = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
dispatch(shopCatalogActionCreators.requestShopCatalog({
|
dispatch(shopCatalogActionCreators.requestShopCatalog({
|
||||||
|
searchParams: {
|
||||||
currentPage: params?.page ? params.page : "1"
|
currentPage: params?.page ? params.page : "1"
|
||||||
|
}
|
||||||
}))
|
}))
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
|
|||||||
@ -35,7 +35,9 @@ const ShopItem : FC = () => {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if(params?.slug)
|
if(params?.slug)
|
||||||
dispatch(shopItemActionCreators.requestShopItem({
|
dispatch(shopItemActionCreators.requestShopItem({
|
||||||
|
searchParams: {
|
||||||
slug: params.slug
|
slug: params.slug
|
||||||
|
}
|
||||||
}))
|
}))
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { RequestModel } from "./models/abstractions"
|
import { Params, RequestModel } from "./models/abstractions"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -12,13 +12,21 @@ const Post = () => {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const Get = async <T>(apiUrl: string, props?: RequestModel): Promise<T | null> => {
|
const Get = async <T>(apiUrl: string, pathParams?: Params, searchParams?: Params): Promise<T | null> => {
|
||||||
const url = new URL(apiUrl)
|
const url = new URL(apiUrl)
|
||||||
|
|
||||||
if(props) {
|
if(pathParams) {
|
||||||
Object.keys(props).forEach(key => {
|
Object.keys(pathParams).forEach(key => {
|
||||||
if (typeof(props[key]) !== undefined) {
|
if (typeof(pathParams[key]) !== undefined) {
|
||||||
url.searchParams.append(key, props[key] as string)
|
url.pathname += `/${pathParams[key]}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if(searchParams) {
|
||||||
|
Object.keys(searchParams).forEach(key => {
|
||||||
|
if (typeof(searchParams[key]) !== undefined) {
|
||||||
|
url.searchParams.append(key, searchParams[key] as string)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,7 +22,7 @@ type KnownAction = RequestAction | ReceiveAction
|
|||||||
export const actionCreators = {
|
export const actionCreators = {
|
||||||
requestBlogCatalog: (props?: GetBlogCatalogRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
requestBlogCatalog: (props?: GetBlogCatalogRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
|
|
||||||
Get<Promise<GetBlogCatalogResponseModel>>('https://localhost:7151/api/BlogCatalog', props)
|
Get<Promise<GetBlogCatalogResponseModel>>('https://localhost:7151/api/BlogCatalog', props?.pathParams, props?.searchParams)
|
||||||
.then(response => response)
|
.then(response => response)
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if(data)
|
if(data)
|
||||||
|
|||||||
@ -22,7 +22,7 @@ type KnownAction = RequestAction | ReceiveAction
|
|||||||
export const actionCreators = {
|
export const actionCreators = {
|
||||||
requestBlogCategories: (props?: GetBlogCategoriesRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
requestBlogCategories: (props?: GetBlogCategoriesRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
|
|
||||||
Get<Promise<GetBlogCategoriesResponseModel>>('https://localhost:7151/api/BlogCategories', props)
|
Get<Promise<GetBlogCategoriesResponseModel>>('https://localhost:7151/api/BlogCategories', props?.pathParams, props?.searchParams)
|
||||||
.then(response => response)
|
.then(response => response)
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if(data)
|
if(data)
|
||||||
|
|||||||
@ -22,7 +22,7 @@ type KnownAction = RequestAction | ReceiveAction
|
|||||||
export const actionCreators = {
|
export const actionCreators = {
|
||||||
requestBlogFeatured: (props?: GetBlogFeaturedRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
requestBlogFeatured: (props?: GetBlogFeaturedRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
|
|
||||||
Get<Promise<GetBlogFeaturedResponseModel>>('https://localhost:7151/api/BlogFeatured', props)
|
Get<Promise<GetBlogFeaturedResponseModel>>('https://localhost:7151/api/BlogFeatured', props?.pathParams, props?.searchParams)
|
||||||
.then(response => response)
|
.then(response => response)
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if(data)
|
if(data)
|
||||||
|
|||||||
@ -20,16 +20,16 @@ interface ReceiveAction extends GetBlogItemResponseModel {
|
|||||||
type KnownAction = RequestAction | ReceiveAction
|
type KnownAction = RequestAction | ReceiveAction
|
||||||
|
|
||||||
export const actionCreators = {
|
export const actionCreators = {
|
||||||
requestBlogItem: (props: GetBlogItemRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
requestBlogItem: (props?: GetBlogItemRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
|
|
||||||
Get<Promise<GetBlogItemResponseModel>>('https://localhost:7151/api/BlogItem', props)
|
Get<Promise<GetBlogItemResponseModel>>('https://localhost:7151/api/BlogItem', props?.pathParams, props?.searchParams)
|
||||||
.then(response => response)
|
.then(response => response)
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if(data)
|
if(data)
|
||||||
dispatch({ type: 'RECEIVE_BLOG_ITEM', ...data })
|
dispatch({ type: 'RECEIVE_BLOG_ITEM', ...data })
|
||||||
})
|
})
|
||||||
|
|
||||||
dispatch({ type: 'REQUEST_BLOG_ITEM', slug: props.slug })
|
// dispatch({ type: 'REQUEST_BLOG_ITEM', slug: props.slug })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -23,7 +23,7 @@ type KnownAction = RequestAction | ReceiveAction;
|
|||||||
export const actionCreators = {
|
export const actionCreators = {
|
||||||
requestContent: (props?: GetContentRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
requestContent: (props?: GetContentRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
|
|
||||||
Get<Promise<GetContentResponseModel>>('https://localhost:7151/api/Content/404c8232-9048-4519-bfba-6e78dc7005ca?locale=en-US', props)
|
Get<Promise<GetContentResponseModel>>('https://localhost:7151/api/Content/404c8232-9048-4519-bfba-6e78dc7005ca', props?.pathParams, props?.searchParams)
|
||||||
.then(response => response)
|
.then(response => response)
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
if(data) {
|
if(data) {
|
||||||
|
|||||||
@ -1,34 +1,47 @@
|
|||||||
import { Action, Reducer } from 'redux'
|
import { Action, Reducer } from 'redux'
|
||||||
import { AppThunkAction } from '..'
|
import { AppThunkAction } from '..'
|
||||||
import { ShopItemModel } from '../../models'
|
|
||||||
import { GetShopCartRequestModel } from '../../models/requests'
|
|
||||||
import { GetShopCartResponseModel } from '../../models/responses'
|
|
||||||
|
|
||||||
export interface ShopCartState extends GetShopCartResponseModel {
|
import { GetShopCartItemsRequestModel } from '../../models/requests'
|
||||||
|
import { GetShopCartItemResponseModel } from '../../models/responses'
|
||||||
|
|
||||||
|
import { Get } from '../../restClient'
|
||||||
|
|
||||||
|
export interface ShopCartState {
|
||||||
|
items: GetShopCartItemResponseModel [],
|
||||||
isLoading: boolean
|
isLoading: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RequestAction extends GetShopCartRequestModel {
|
export interface RequestAction {
|
||||||
type: 'REQUEST_CART'
|
type: 'REQUEST_CART_ITEMS'
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ReceiveAction extends GetShopCartResponseModel {
|
export interface ReceiveAction {
|
||||||
type: 'RECEIVE_CART'
|
items: GetShopCartItemResponseModel [],
|
||||||
|
type: 'RECEIVE_CART_ITEMS'
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IncrementItemQuantityAction extends GetShopCartResponseModel {
|
// export interface IncrementItemQuantityAction extends GetShopCartResponseModel {
|
||||||
type: 'INCREMENT_ITEM_QUANTITY'
|
// type: 'INCREMENT_ITEM_QUANTITY'
|
||||||
}
|
// }
|
||||||
|
|
||||||
export interface DecrementItmeQuantityAction extends GetShopCartResponseModel {
|
// export interface DecrementItmeQuantityAction extends GetShopCartResponseModel {
|
||||||
type: 'DECREMENT_ITEM_QUANTITY'
|
// type: 'DECREMENT_ITEM_QUANTITY'
|
||||||
}
|
// }
|
||||||
|
|
||||||
export type KnownAction = RequestAction | ReceiveAction | IncrementItemQuantityAction | DecrementItmeQuantityAction
|
export type KnownAction = RequestAction | ReceiveAction //| IncrementItemQuantityAction | DecrementItmeQuantityAction
|
||||||
|
|
||||||
export const actionCreators = {
|
export const actionCreators = {
|
||||||
requestCart: (): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
requestCart: (props?: GetShopCartItemsRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
|
|
||||||
|
|
||||||
|
Get<Promise<GetShopCartItemResponseModel []>>('https://localhost:7151/api/ShopCartItems/404c8232-9048-4519-bfba-6e78dc7005ca', props?.pathParams, props?.searchParams)
|
||||||
|
.then(response => response)
|
||||||
|
.then(data => {
|
||||||
|
if(data)
|
||||||
|
dispatch({ type: 'RECEIVE_CART_ITEMS', items: [...data] })
|
||||||
|
})
|
||||||
|
|
||||||
|
dispatch({ type: 'REQUEST_CART_ITEMS' })
|
||||||
},
|
},
|
||||||
|
|
||||||
addToCart: (): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
addToCart: (): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
@ -43,103 +56,61 @@ export const actionCreators = {
|
|||||||
// dispatch({ type: 'REQUEST_BLOG_ITEM', slug: props.slug })
|
// dispatch({ type: 'REQUEST_BLOG_ITEM', slug: props.slug })
|
||||||
},
|
},
|
||||||
|
|
||||||
increment: (): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
// increment: (startDateIndex: number): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
|
|
||||||
const items: ShopItemModel [] = []
|
// const items: ShopItemModel [] = []
|
||||||
dispatch({ type: 'INCREMENT_ITEM_QUANTITY', items })
|
// dispatch({ type: 'INCREMENT_ITEM_QUANTITY', items })
|
||||||
|
|
||||||
|
|
||||||
},
|
// },
|
||||||
decrement: (): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
// decrement: (): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
|
|
||||||
const items: ShopItemModel [] = []
|
// const items: ShopItemModel [] = []
|
||||||
dispatch({ type: 'DECREMENT_ITEM_QUANTITY', items })
|
// dispatch({ type: 'DECREMENT_ITEM_QUANTITY', items })
|
||||||
},
|
// },
|
||||||
|
|
||||||
remFromCart: (): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
// remFromCart: (): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
|
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
const unloadedState: ShopCartState = {
|
const unloadedState: ShopCartState = {
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
id: '',
|
|
||||||
slug: "shop-catalog-item",
|
slug: "shop-catalog-item",
|
||||||
sku: "SKU-0",
|
sku: "SKU-0",
|
||||||
image: { src: "https://dummyimage.com/450x300/dee2e6/6c757d.jpg", alt: "..." },
|
image: { src: "https://dummyimage.com/450x300/dee2e6/6c757d.jpg", alt: "..." },
|
||||||
badges: [ "sale" ],
|
|
||||||
title: "Shop item title",
|
title: "Shop item title",
|
||||||
brandName: "Brand & Name",
|
brandName: "Brand & Name",
|
||||||
|
|
||||||
shortText: "Lorem ipsum, dolor sit amet consectetur adipisicing elit. Eaque fugit ratione dicta mollitia. Officiis ad...",
|
shortText: "Lorem ipsum, dolor sit amet consectetur adipisicing elit. Eaque fugit ratione dicta mollitia. Officiis ad...",
|
||||||
text: "",
|
|
||||||
author: {
|
|
||||||
id: '',
|
|
||||||
image: { src: "https://dummyimage.com/40x40/ced4da/6c757d", alt: "..." },
|
|
||||||
nickName: "Admin"
|
|
||||||
},
|
|
||||||
created: (new Date).toString(),
|
created: (new Date).toString(),
|
||||||
|
|
||||||
tags: [ "react", "redux", "webapi" ],
|
|
||||||
|
|
||||||
rating: 4.5,
|
|
||||||
price: 20,
|
price: 20,
|
||||||
newPrice: 10,
|
newPrice: 10,
|
||||||
|
|
||||||
quantity: 1
|
quantity: 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '',
|
|
||||||
slug: "shop-catalog-item",
|
slug: "shop-catalog-item",
|
||||||
sku: "SKU-0",
|
sku: "SKU-0",
|
||||||
image: { src: "https://dummyimage.com/450x300/dee2e6/6c757d.jpg", alt: "..." },
|
image: { src: "https://dummyimage.com/450x300/dee2e6/6c757d.jpg", alt: "..." },
|
||||||
badges: [ "sale" ],
|
|
||||||
title: "Shop item title",
|
title: "Shop item title",
|
||||||
brandName: "Brand & Name",
|
brandName: "Brand & Name",
|
||||||
|
|
||||||
shortText: "Lorem ipsum, dolor sit amet consectetur adipisicing elit. Eaque fugit ratione dicta mollitia. Officiis ad...",
|
shortText: "Lorem ipsum, dolor sit amet consectetur adipisicing elit. Eaque fugit ratione dicta mollitia. Officiis ad...",
|
||||||
text: "",
|
|
||||||
author: {
|
|
||||||
id: '',
|
|
||||||
image: { src: "https://dummyimage.com/40x40/ced4da/6c757d", alt: "..." },
|
|
||||||
nickName: "Admin"
|
|
||||||
},
|
|
||||||
created: (new Date).toString(),
|
created: (new Date).toString(),
|
||||||
|
|
||||||
tags: [ "react", "redux", "webapi" ],
|
|
||||||
|
|
||||||
rating: 4.5,
|
|
||||||
price: 20,
|
price: 20,
|
||||||
newPrice: 10,
|
newPrice: 10,
|
||||||
|
quantity: 1
|
||||||
quantity: 2
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '',
|
|
||||||
slug: "shop-catalog-item",
|
slug: "shop-catalog-item",
|
||||||
sku: "SKU-0",
|
sku: "SKU-0",
|
||||||
image: { src: "https://dummyimage.com/450x300/dee2e6/6c757d.jpg", alt: "..." },
|
image: { src: "https://dummyimage.com/450x300/dee2e6/6c757d.jpg", alt: "..." },
|
||||||
badges: [ "sale" ],
|
|
||||||
title: "Shop item title",
|
title: "Shop item title",
|
||||||
brandName: "Brand & Name",
|
brandName: "Brand & Name",
|
||||||
|
|
||||||
shortText: "Lorem ipsum, dolor sit amet consectetur adipisicing elit. Eaque fugit ratione dicta mollitia. Officiis ad...",
|
shortText: "Lorem ipsum, dolor sit amet consectetur adipisicing elit. Eaque fugit ratione dicta mollitia. Officiis ad...",
|
||||||
text: "",
|
|
||||||
author: {
|
|
||||||
id: '',
|
|
||||||
image: { src: "https://dummyimage.com/40x40/ced4da/6c757d", alt: "..." },
|
|
||||||
nickName: "Admin"
|
|
||||||
},
|
|
||||||
created: (new Date).toString(),
|
created: (new Date).toString(),
|
||||||
|
|
||||||
tags: [ "react", "redux", "webapi" ],
|
|
||||||
|
|
||||||
rating: 4.5,
|
|
||||||
price: 20,
|
price: 20,
|
||||||
newPrice: 10,
|
newPrice: 10,
|
||||||
|
quantity: 1
|
||||||
quantity: 3
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
@ -153,29 +124,29 @@ export const reducer: Reducer<ShopCartState> = (state: ShopCartState | undefined
|
|||||||
|
|
||||||
const action = incomingAction as KnownAction
|
const action = incomingAction as KnownAction
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
case 'REQUEST_CART':
|
case 'REQUEST_CART_ITEMS':
|
||||||
return {
|
return {
|
||||||
...state,
|
...state,
|
||||||
isLoading: true
|
isLoading: true
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'RECEIVE_CART':
|
case 'RECEIVE_CART_ITEMS':
|
||||||
return {
|
return {
|
||||||
...action,
|
...action,
|
||||||
isLoading: false
|
isLoading: false
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'INCREMENT_ITEM_QUANTITY':
|
// case 'INCREMENT_ITEM_QUANTITY':
|
||||||
return {
|
// return {
|
||||||
...action,
|
// ...action,
|
||||||
isLoading: false
|
// isLoading: false
|
||||||
}
|
// }
|
||||||
|
|
||||||
case 'DECREMENT_ITEM_QUANTITY':
|
// case 'DECREMENT_ITEM_QUANTITY':
|
||||||
return {
|
// return {
|
||||||
...action,
|
// ...action,
|
||||||
isLoading: false
|
// isLoading: false
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
return state
|
return state
|
||||||
|
|||||||
@ -22,7 +22,7 @@ type KnownAction = RequestAction | ReceiveAction
|
|||||||
export const actionCreators = {
|
export const actionCreators = {
|
||||||
requestShopCatalog: (props?: GetShopCatalogRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
requestShopCatalog: (props?: GetShopCatalogRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
|
|
||||||
Get<Promise<GetShopCatalogResponseModel>>('https://localhost:7151/api/ShopCatalog', props)
|
Get<Promise<GetShopCatalogResponseModel>>('https://localhost:7151/api/ShopCatalog', props?.pathParams, props?.searchParams)
|
||||||
.then(response => response)
|
.then(response => response)
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if(data)
|
if(data)
|
||||||
|
|||||||
@ -22,7 +22,7 @@ type KnownAction = RequestAction | ReceiveAction
|
|||||||
export const actionCreators = {
|
export const actionCreators = {
|
||||||
requestShopCategories: (props?: GetShopCategoriesRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
requestShopCategories: (props?: GetShopCategoriesRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
|
|
||||||
Get<Promise<GetShopCategoriesResponseModel>>('https://localhost:7151/api/ShopCategories', props)
|
Get<Promise<GetShopCategoriesResponseModel>>('https://localhost:7151/api/ShopCategories', props?.pathParams, props?.searchParams)
|
||||||
.then(response => response)
|
.then(response => response)
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if(data)
|
if(data)
|
||||||
|
|||||||
@ -22,7 +22,7 @@ type KnownAction = RequestAction | ReceiveAction
|
|||||||
export const actionCreators = {
|
export const actionCreators = {
|
||||||
requestShopFeatured: (props?: GetShopFeaturedRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
requestShopFeatured: (props?: GetShopFeaturedRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
|
|
||||||
Get<Promise<GetShopFeaturedResponseModel>>('https://localhost:7151/api/ShopFeatured', props)
|
Get<Promise<GetShopFeaturedResponseModel>>('https://localhost:7151/api/ShopFeatured', props?.pathParams, props?.searchParams)
|
||||||
.then(response => response)
|
.then(response => response)
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if(data)
|
if(data)
|
||||||
|
|||||||
@ -21,16 +21,16 @@ interface ReceiveAction extends GetShopItemResponseModel {
|
|||||||
type KnownAction = RequestAction | ReceiveAction
|
type KnownAction = RequestAction | ReceiveAction
|
||||||
|
|
||||||
export const actionCreators = {
|
export const actionCreators = {
|
||||||
requestShopItem: (props: GetShopItemRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
requestShopItem: (props?: GetShopItemRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
|
|
||||||
Get<Promise<GetShopItemResponseModel>>('https://localhost:7151/api/ShopItem', props)
|
Get<Promise<GetShopItemResponseModel>>('https://localhost:7151/api/ShopItem', props?.pathParams, props?.searchParams)
|
||||||
.then(response => response)
|
.then(response => response)
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if(data)
|
if(data)
|
||||||
dispatch({ type: 'RECEIVE_SHOP_ITEM', ...data })
|
dispatch({ type: 'RECEIVE_SHOP_ITEM', ...data })
|
||||||
})
|
})
|
||||||
|
|
||||||
dispatch({ type: 'REQUEST_SHOP_ITEM', slug: props.slug })
|
// dispatch({ type: 'REQUEST_SHOP_ITEM', slug: props.slug })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ type KnownAction = RequestAction | ReceiveAction
|
|||||||
export const actionCreators = {
|
export const actionCreators = {
|
||||||
requestShopRelated: (props?: GetShopRelatedRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
requestShopRelated: (props?: GetShopRelatedRequestModel): AppThunkAction<KnownAction> => (dispatch, getState) => {
|
||||||
|
|
||||||
Get<Promise<GetShopRelatedResponseModel>>('https://localhost:7151/api/ShopRelated', props)
|
Get<Promise<GetShopRelatedResponseModel>>('https://localhost:7151/api/ShopRelated', props?.pathParams, props?.searchParams)
|
||||||
.then(response => response)
|
.then(response => response)
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if(data)
|
if(data)
|
||||||
|
|||||||
@ -6,5 +6,6 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Core.Abstractions.DomainObjects {
|
namespace Core.Abstractions.DomainObjects {
|
||||||
public abstract class DomainObjectBase<T> : EquatableBase<T> {
|
public abstract class DomainObjectBase<T> : EquatableBase<T> {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,7 +7,7 @@ using System.Text;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Core.Models {
|
namespace Core.Models {
|
||||||
public class PaginationModel<T> : ResponseModelBase {
|
public abstract class PaginationModelBase<T> : ResponseModelBase {
|
||||||
public int TotalPages { get; set; }
|
public int TotalPages { get; set; }
|
||||||
public int CurrentPage { get; set; }
|
public int CurrentPage { get; set; }
|
||||||
public List<T> Items { get; set; }
|
public List<T> Items { get; set; }
|
||||||
@ -6,9 +6,6 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Core.Abstractions.Models {
|
namespace Core.Abstractions.Models {
|
||||||
public abstract class RequestModelBase<T> : ModelBase {
|
public abstract class RequestModelBase<T> : ModelBase {
|
||||||
|
|
||||||
public abstract T ApplyTo(T obj);
|
|
||||||
|
|
||||||
public abstract T ToDomainObject();
|
public abstract T ToDomainObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,7 +15,7 @@ namespace DataProviders {
|
|||||||
(List<ShopCartItem>?, IDomainResult) GetAll(Guid siteId, Guid userId);
|
(List<ShopCartItem>?, IDomainResult) GetAll(Guid siteId, Guid userId);
|
||||||
(ShopCartItem?, IDomainResult) Get(Guid siteId, Guid userId, string sku);
|
(ShopCartItem?, IDomainResult) Get(Guid siteId, Guid userId, string sku);
|
||||||
(Guid?, IDomainResult) Update(ShopCartItem shopCart);
|
(Guid?, IDomainResult) Update(ShopCartItem shopCart);
|
||||||
IDomainResult Delete(Guid siteId, Guid userId, string sku);
|
IDomainResult Delete(Guid id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ShopCartDataProvider : DataProviderBase<ShopCartItem>, IShopCartDataProvider {
|
public class ShopCartDataProvider : DataProviderBase<ShopCartItem>, IShopCartDataProvider {
|
||||||
@ -45,8 +45,7 @@ namespace DataProviders {
|
|||||||
public (Guid?, IDomainResult) Update(ShopCartItem shopCart) =>
|
public (Guid?, IDomainResult) Update(ShopCartItem shopCart) =>
|
||||||
UpdateWithPredicate(shopCart, x => x.Id == shopCart.Id, _collectionName);
|
UpdateWithPredicate(shopCart, x => x.Id == shopCart.Id, _collectionName);
|
||||||
|
|
||||||
public IDomainResult Delete(Guid siteId, Guid userId, string sku) {
|
public IDomainResult Delete(Guid id) =>
|
||||||
throw new NotImplementedException();
|
DeleteWithPredicate(x => x.Id == id, _collectionName);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -59,8 +59,10 @@ public class BlogCatalogController : ControllerBase {
|
|||||||
var totalPages = blogModels.Count() / itemsPerPage;
|
var totalPages = blogModels.Count() / itemsPerPage;
|
||||||
|
|
||||||
var blogCatalogResponse = new GetBlogCatalogResponseModel {
|
var blogCatalogResponse = new GetBlogCatalogResponseModel {
|
||||||
|
|
||||||
|
/*
|
||||||
FeaturedBlog = blogModels[0],
|
FeaturedBlog = blogModels[0],
|
||||||
BlogItemsPagination = new PaginationModel<BlogItemModel> {
|
BlogItemsPagination = new PaginationModelBase<BlogItemModel> {
|
||||||
CurrentPage = currentPage,
|
CurrentPage = currentPage,
|
||||||
TotalPages = totalPages,
|
TotalPages = totalPages,
|
||||||
Items = blogModels.Skip((currentPage -1) * itemsPerPage).Take(itemsPerPage).ToList()
|
Items = blogModels.Skip((currentPage -1) * itemsPerPage).Take(itemsPerPage).ToList()
|
||||||
@ -90,7 +92,7 @@ public class BlogCatalogController : ControllerBase {
|
|||||||
Id = Guid.NewGuid(),
|
Id = Guid.NewGuid(),
|
||||||
Text = "Tutorials"
|
Text = "Tutorials"
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -59,11 +59,11 @@ public class ShopCatalogController : ControllerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var shopCatalogResponse = new GetShopCatalogResponseModel {
|
var shopCatalogResponse = new GetShopCatalogResponseModel {
|
||||||
ShopItemsPagination = new PaginationModel<ShopItemModel> {
|
/*ShopItemsPagination = new PaginationModelBase<ShopItemModel> {
|
||||||
CurrentPage = currentPage,
|
CurrentPage = currentPage,
|
||||||
TotalPages = 100,
|
TotalPages = 100,
|
||||||
Items = shopModels
|
Items = shopModels
|
||||||
}
|
}*/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -15,23 +15,19 @@ namespace WeatherForecast.Models.Requests {
|
|||||||
public double NewPrice { get; set; }
|
public double NewPrice { get; set; }
|
||||||
public uint Quantity { get; set; }
|
public uint Quantity { get; set; }
|
||||||
|
|
||||||
public override ShopCartItem ApplyTo(ShopCartItem shopCart) {
|
public override ShopCartItem ToDomainObject() => new ShopCartItem {
|
||||||
shopCart.Slug = Slug;
|
Slug = Slug,
|
||||||
shopCart.Image = new Image {
|
Image = new Image {
|
||||||
Src = Image.Src,
|
Src = Image.Src,
|
||||||
Alt = Image.Alt
|
Alt = Image.Alt
|
||||||
|
},
|
||||||
|
Title = Title,
|
||||||
|
BrandName = BrandName,
|
||||||
|
ShortText = ShortText,
|
||||||
|
Created = Created,
|
||||||
|
Price = Price,
|
||||||
|
NewPrice = NewPrice,
|
||||||
|
Quantity = Quantity
|
||||||
};
|
};
|
||||||
shopCart.Title = Title;
|
|
||||||
shopCart.BrandName = BrandName;
|
|
||||||
shopCart.ShortText = ShortText;
|
|
||||||
shopCart.Created = Created;
|
|
||||||
shopCart.Price = Price;
|
|
||||||
shopCart.NewPrice = NewPrice;
|
|
||||||
shopCart.Quantity = Quantity;
|
|
||||||
|
|
||||||
return shopCart;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override ShopCartItem ToDomainObject() => ApplyTo(new ShopCartItem());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,23 +15,20 @@ namespace WeatherForecast.Models.Requests {
|
|||||||
public double NewPrice { get; set; }
|
public double NewPrice { get; set; }
|
||||||
public uint Quantity { get; set; }
|
public uint Quantity { get; set; }
|
||||||
|
|
||||||
public override ShopCartItem ApplyTo(ShopCartItem shopCart) {
|
|
||||||
shopCart.Slug = Slug;
|
public override ShopCartItem ToDomainObject() => new ShopCartItem {
|
||||||
shopCart.Image = new Image {
|
Slug = Slug,
|
||||||
|
Image = new Image {
|
||||||
Src = Image.Src,
|
Src = Image.Src,
|
||||||
Alt = Image.Alt
|
Alt = Image.Alt
|
||||||
|
},
|
||||||
|
Title = Title,
|
||||||
|
BrandName = BrandName,
|
||||||
|
ShortText = ShortText,
|
||||||
|
Created = Created,
|
||||||
|
Price = Price,
|
||||||
|
NewPrice = NewPrice,
|
||||||
|
Quantity = Quantity
|
||||||
};
|
};
|
||||||
shopCart.Title = Title;
|
|
||||||
shopCart.BrandName = BrandName;
|
|
||||||
shopCart.ShortText = ShortText;
|
|
||||||
shopCart.Created = Created;
|
|
||||||
shopCart.Price = Price;
|
|
||||||
shopCart.NewPrice = NewPrice;
|
|
||||||
shopCart.Quantity = Quantity;
|
|
||||||
|
|
||||||
return shopCart;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override ShopCartItem ToDomainObject() => ApplyTo(new ShopCartItem());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,6 @@ namespace WeatherForecast.Models.Responses {
|
|||||||
|
|
||||||
public List<CategoryModel> Categories { get; set; }
|
public List<CategoryModel> Categories { get; set; }
|
||||||
|
|
||||||
public PaginationModel<BlogItemModel> BlogItemsPagination { get; set; }
|
public PaginationModelBase<BlogItemModel> BlogItemsPagination { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,14 +0,0 @@
|
|||||||
using Core.Abstractions.Models;
|
|
||||||
using Core.DomainObjects.Documents;
|
|
||||||
|
|
||||||
namespace WeatherForecast.Models.Responses {
|
|
||||||
public class GetShopCartItemsResponseModel : ResponseModelBase {
|
|
||||||
|
|
||||||
public List<GetShopCartItemResponseModel> Items { get; set; }
|
|
||||||
|
|
||||||
public GetShopCartItemsResponseModel(List<ShopCartItem> items) {
|
|
||||||
Items = items.Select(x => new GetShopCartItemResponseModel(x)).ToList();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -3,6 +3,6 @@ using Core.Models;
|
|||||||
|
|
||||||
namespace WeatherForecast.Models.Responses {
|
namespace WeatherForecast.Models.Responses {
|
||||||
public class GetShopCatalogResponseModel : ResponseModelBase {
|
public class GetShopCatalogResponseModel : ResponseModelBase {
|
||||||
public PaginationModel<ShopItemModel> ShopItemsPagination { get; set; }
|
public PaginationModelBase<ShopItemModel> ShopItemsPagination { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,13 +31,13 @@ namespace WeatherForecast.Services {
|
|||||||
if (getResult.IsSuccess)
|
if (getResult.IsSuccess)
|
||||||
return IDomainResult.Failed<Guid?>();
|
return IDomainResult.Failed<Guid?>();
|
||||||
|
|
||||||
var obj = requestModel.ToDomainObject();
|
var item = requestModel.ToDomainObject();
|
||||||
|
|
||||||
obj.SiteId = siteId;
|
item.SiteId = siteId;
|
||||||
obj.UserId = userId;
|
item.UserId = userId;
|
||||||
obj.Sku = sku;
|
item.Sku = sku;
|
||||||
|
|
||||||
var (id, insertResult) = _shopCartDataProvider.Insert(obj);
|
var (id, insertResult) = _shopCartDataProvider.Insert(item);
|
||||||
|
|
||||||
if (!insertResult.IsSuccess)
|
if (!insertResult.IsSuccess)
|
||||||
return IDomainResult.Failed<Guid?>();
|
return IDomainResult.Failed<Guid?>();
|
||||||
@ -59,10 +59,15 @@ namespace WeatherForecast.Services {
|
|||||||
if (!getResult.IsSuccess || item == null)
|
if (!getResult.IsSuccess || item == null)
|
||||||
return (null, getResult);
|
return (null, getResult);
|
||||||
|
|
||||||
var newShopCart = requestData.ApplyTo(item);
|
// construct domain object from model
|
||||||
|
var newItem = requestData.ToDomainObject();
|
||||||
|
newItem.Id = item.Id;
|
||||||
|
newItem.SiteId = siteId;
|
||||||
|
newItem.UserId = userId;
|
||||||
|
newItem.Sku = sku;
|
||||||
|
|
||||||
if (!item.Equals(newShopCart)) {
|
if (!item.Equals(newItem)) {
|
||||||
var (id, updateResult) = _shopCartDataProvider.Update(item);
|
var (id, updateResult) = _shopCartDataProvider.Update(newItem);
|
||||||
if (!updateResult.IsSuccess || id == null)
|
if (!updateResult.IsSuccess || id == null)
|
||||||
return (null, updateResult);
|
return (null, updateResult);
|
||||||
}
|
}
|
||||||
@ -71,7 +76,11 @@ namespace WeatherForecast.Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public IDomainResult Delete(Guid siteId, Guid userId, string sku) {
|
public IDomainResult Delete(Guid siteId, Guid userId, string sku) {
|
||||||
var result = _shopCartDataProvider.Delete(siteId, userId, sku);
|
var (item, getResult) = _shopCartDataProvider.Get(siteId, userId, sku);
|
||||||
|
if (!getResult.IsSuccess || item == null)
|
||||||
|
return getResult;
|
||||||
|
|
||||||
|
var result = _shopCartDataProvider.Delete(item.Id);
|
||||||
if (!result.IsSuccess)
|
if (!result.IsSuccess)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
|||||||
@ -1,13 +1,12 @@
|
|||||||
using DataProviders;
|
using DataProviders;
|
||||||
using DomainResults.Common;
|
using DomainResults.Common;
|
||||||
|
|
||||||
using WeatherForecast.Models.Requests;
|
|
||||||
using WeatherForecast.Models.Responses;
|
using WeatherForecast.Models.Responses;
|
||||||
|
|
||||||
namespace WeatherForecast.Services {
|
namespace WeatherForecast.Services {
|
||||||
|
|
||||||
public interface IShopCartItemsService {
|
public interface IShopCartItemsService {
|
||||||
(GetShopCartItemsResponseModel?, IDomainResult) Get(Guid siteId, Guid userId);
|
(List<GetShopCartItemResponseModel>?, IDomainResult) Get(Guid siteId, Guid userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ShopCartItemsService : IShopCartItemsService {
|
public class ShopCartItemsService : IShopCartItemsService {
|
||||||
@ -23,14 +22,14 @@ namespace WeatherForecast.Services {
|
|||||||
_shopCartDataProvider = shopCartDataprovider;
|
_shopCartDataProvider = shopCartDataprovider;
|
||||||
}
|
}
|
||||||
|
|
||||||
public (GetShopCartItemsResponseModel?, IDomainResult) Get(Guid siteId, Guid userId) {
|
public (List<GetShopCartItemResponseModel>?, IDomainResult) Get(Guid siteId, Guid userId) {
|
||||||
|
|
||||||
var (items, result) = _shopCartDataProvider.GetAll(siteId, userId);
|
var (items, result) = _shopCartDataProvider.GetAll(siteId, userId);
|
||||||
|
|
||||||
if (!result.IsSuccess || items == null)
|
if (!result.IsSuccess || items == null)
|
||||||
return (null, result);
|
return (null, result);
|
||||||
|
|
||||||
return IDomainResult.Success(new GetShopCartItemsResponseModel(items));
|
return IDomainResult.Success(items.Select(x => new GetShopCartItemResponseModel(x)).ToList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user