import { WEB_SERVICE_PREFIX } from '@/constants/service'; import { request } from '../request'; import { type ServiceRequestResult, mapServiceResult, normalizeNullableStringId, normalizeStringId, safeJsonRequestConfig } from './shared'; import { normalizeProductMember, normalizeProductSettings } from './product-shared'; const PRODUCT_PREFIX = `${WEB_SERVICE_PREFIX}/project/product`; type ProductResponse = Omit & { id: string | number; managerUserId?: string | number | null; }; type ProductPageResponse = Api.Product.PageResult; function normalizeProduct(product: ProductResponse): Api.Product.Product { return { ...product, id: normalizeStringId(product.id), managerUserId: normalizeNullableStringId(product.managerUserId) ?? '' }; } /** 鑾峰彇浜у搧鍒嗛〉 */ export async function fetchGetProductPage(params?: Api.Product.ProductSearchParams) { const result = await request({ ...safeJsonRequestConfig, url: `${PRODUCT_PREFIX}/page`, method: 'get', params }); return mapServiceResult(result as ServiceRequestResult, data => ({ ...data, list: data.list.map(normalizeProduct) })); } /** 鑾峰彇浜у搧璇︽儏 */ export async function fetchGetProduct(id: string) { const result = await request({ ...safeJsonRequestConfig, url: `${PRODUCT_PREFIX}/get`, method: 'get', params: { id } }); return mapServiceResult(result as ServiceRequestResult, normalizeProduct); } /** 鍒涘缓浜у搧 */ export async function fetchCreateProduct(data: Api.Product.SaveProductParams) { const result = await request({ ...safeJsonRequestConfig, url: `${PRODUCT_PREFIX}/create`, method: 'post', data }); return mapServiceResult(result as ServiceRequestResult, normalizeStringId); } /** 鏇存柊浜у搧 */ export function fetchUpdateProduct(data: Api.Product.UpdateProductParams) { return request({ url: `${PRODUCT_PREFIX}/update`, method: 'put', data }); } /** 鍙樻洿浜у搧鐘舵€? */ export function fetchChangeProductStatus(data: Api.Product.ChangeProductStatusParams) { return request({ url: `${PRODUCT_PREFIX}/change-status`, method: 'post', data }); } /** 鍒犻櫎浜у搧 */ export function fetchDeleteProduct(data: Api.Product.DeleteProductParams) { return request({ url: `${PRODUCT_PREFIX}/delete`, method: 'post', data }); } export async function fetchGetProductSettings(id: string) { const result = await request({ ...safeJsonRequestConfig, url: `${PRODUCT_PREFIX}/${id}/settings`, method: 'get' }); return mapServiceResult(result as ServiceRequestResult, normalizeProductSettings); } export function fetchUpdateProductSettingBaseInfo(id: string, data: Api.Product.UpdateProductSettingBaseInfoParams) { return request({ ...safeJsonRequestConfig, url: `${PRODUCT_PREFIX}/${id}/settings/base-info`, method: 'put', data }); } export async function fetchGetProductMembers(id: string) { const result = await request({ ...safeJsonRequestConfig, url: `${PRODUCT_PREFIX}/${id}/members`, method: 'get' }); return mapServiceResult(result as ServiceRequestResult, data => data.map(normalizeProductMember) ); } export async function fetchCreateProductMember(id: string, data: Api.Product.CreateProductMemberParams) { const result = await request({ ...safeJsonRequestConfig, url: `${PRODUCT_PREFIX}/${id}/members`, method: 'post', data }); return mapServiceResult(result as ServiceRequestResult, normalizeStringId); } export function fetchUpdateProductMember(id: string, memberId: string, data: Api.Product.UpdateProductMemberParams) { return request({ ...safeJsonRequestConfig, url: `${PRODUCT_PREFIX}/${id}/members/${memberId}`, method: 'put', data }); } export function fetchInactiveProductMember( id: string, memberId: string, data: Api.Product.InactiveProductMemberParams ) { return request({ ...safeJsonRequestConfig, url: `${PRODUCT_PREFIX}/${id}/members/${memberId}/inactive`, method: 'post', data }); }