# Requerimientos de datos Esta documentacion es estrictamente para definir que datos y que tipo de operaciones CRUD requiere el front-end de la aplicacion cliente Raudo. Este documento fue escrito en editor de MarkDown por lo que puede y tendra errores ortograficos. ## Data Models #### Address ``` id: String, description: String, streetAddress: String, type: String ``` #### User ``` id: String, avatar: String, firstName: String, lastName: String, email: String, phoneNumber: String, addresses: <Address>[], defaultAddress: Address, isFirstLogging: bool ``` #### Category ``` id: String, name: String, thumbnail: String, parent: String, ``` #### StoreListItem ``` id: String, name: String, avgReview: number, // from 1 to 5 stimatedTime: String, distance: String, lowestPrice: number, isFavorite: bool, thumbnail: String, ``` #### Store ``` id: String, banners: <String>[], logo: String, name: String, ``` #### StoreFilters ``` price: { min: number, max: number, }, openHours: String, // "now-open" || "mon-fri" || "mon-sun" || "fri-sun" others: String, // "close-me" || "most-popular" sort: ASC || DESC ``` #### StoreProduct ``` id: String, name: String, thumbnail: String, avgReview: number, // from 1 to 5 isFavorite: bool, isCustomizable: bool, addons: <Addon>[], // List of all possible Addons stimatedTime: String, ``` #### Addon ``` id: String, name: String, price: number, ``` #### PromoBanner ``` image: String, path: String, ``` #### Coupon ``` code: String, image: String, description: String, ``` #### RaudoPaymentAccount ``` id: String, title: String, description: String, ``` #### Cart ``` products: <CartProduct>[], deliveryCost: number, discount: number, tip: number, tax: number subtotal: number, total: number, ``` #### CartProduct ``` id: String, name: String, thumbnail: String, addons: <Addon>[] // List of Addons selected by the user price: number, qty: number, ``` #### OrderListItem ``` id: String, description: String, date: String, currentStep: number, totalStep: number, currentStepDescription: String, price: number, rauderId: String, ``` #### OrderStatus ``` arrivalTime: String, currentStepTitle: String, steps: <Step>[], ``` #### Step ``` time: String, title: String, description: String, ``` #### ChatMessage ``` userId: String, content: String, time: String, avatar: String, ``` ### Por definir: #### Order Para la vista de single de orden aun no definida a nivel de UI. #### Notification Se necesita saber como funcionaran las notificaciones a nivel de UI. #### FavProduct Se necesita definir si se necesita este modelo o no, dependere de si es necesario tener la fecha en la que se agrego el producto a favoritos o no. ## Operaciones CRUD * Las estructura de las respuestas no son un modelo a seguir solo indican que datos son necesarios en las mismas. * No estan considerados los datos necesarios para la paginacion. * No se considero que sera un *urlParam* o *bodyParam*. ### Home #### Obtener *banners promocionales* params: streetAddress, json response: ``` { data: <PromoBanner>[] } ``` ### Category List #### Obtener *categorias* params: streetAddress, json response: ``` { data: <Category>[] } ``` ### Subcategory List #### Obtener *Subcategorias* params: streetAddress, categoryId json response: ``` { data: <Category>[] } ``` ### Store List #### Obtener *tiendas* params: streetAddress, subcategoryId, storeFilters json response: ``` { data: <StoreListItem>[] } ``` #### Agregar *tienda a favoritos* params: storeId json response: ``` { status: number } ``` ### Store Single #### Obtener *tienda* params: storeId json response: ``` { data: Store } ``` #### Obtener *productos* params: storeId json response: ``` { data: <StoreProduct>[] } ``` #### Agregar *producto al carrito* params: productId, qty, addonIds json response: ``` { status: number } ``` #### Agregar *Agregar a favoritos* params: productId json response: ``` { status: number } ``` ### Search Page #### Realizar *busqueda* params: streetAddress, query json response: ``` { data: { stores: <StoreListItem>[], produtcs: <StoreProduct>[] } } ``` #### Agregar *producto al carrito (repetido)* ### Cart #### Obtener *carrito* params: NONE json response: ``` { data: Cart, } ``` #### Eliminar *producto del carrito* params: reference json response: ``` { status: number } ``` #### Actualizar *cantidad de producto en carrito* params: reference, newQty json response: ``` { status: number } ``` #### Procesar *orden* params: streetAddress, beDeliveredAt, tip, paymentMethod, contactPhone, paymentProof json response: ``` { status: number } ``` ### MyOrders #### Obtener *ordenes* params: type (active || completed) json response: ``` { data: <orderListItem>[] } ``` ### Order Timeline #### Obtener *timeline* params: orderId, json response: ``` { data: { stimatedTime: String, steps: <Step>[], geoTrackingId: String, chatId: String, } } ``` ### Order Single #### Obtener *datos de orden* params: orderId, json response: ``` { data: { order: Order, chatId: String, } } ``` ### Re-order #### Obtener *orden antigua* params: orderId json response: ``` { data: { date: String, cart: Cart, } } ``` #### Agregar *producto al carrito (repetido)* ### Chat Page #### Obtener *chat* params: chatId json response: ``` { data: { messages: <ChatMessage>[], disabled: bool, } } ``` #### Enviar *mensaje* params: chatId, message json response: ``` { status: number, } ``` ### Payment Methods Page #### Obtener *metodos de pago* params: NONE json response: ``` { data: <RaudoPaymentAccount>[] } ``` ### My Addresses Page #### Crear *direccion* params: description, streetAddress, type json response: ``` { status: number } ``` #### Editar *direccion* params: addressId, description, streetAddress, type json response: ``` { status: number } ``` #### Borrar *direccion* params: addressId json response: ``` { status: number } ``` #### Obtener *usuario* params: NONE json response: ``` { data: User } ``` ### Promos Page #### Obtener *cupones* params: NONE json response: ``` { data: <PromoCoupon>[] } ``` #### Aplicar *cupon* params: couponCode, json response: ``` { status: number } ``` ### User Settings #### Obtener *usuario (repetido)* #### Actualizar *usuario* params: firstName, lastName, email, phoneNumber, imageBase64 json response: ``` { status: number } ```