Subversion Repositories SmartDukaan

Rev

Rev 5712 | Rev 6039 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

namespace java in.shop2020.model.v1.catalog
namespace py shop2020.thriftpy.model.v1.catalog

include "GenericService.thrift"

/**
        Objects
*/

/**
Caution :- Never ever change the numbers in it. Please confirm from @Chandranshu or @Rajveer before any changes in enum and other entries in file.
**/
enum status {
        PHASED_OUT = 0,         //Item is no longer selling
        DELETED = 1,            //Item has been deliberately deleted 
        PAUSED = 2,                     //Item's sale has been paused manually.
        ACTIVE = 3,                     //Item is available for sale as of now
        IN_PROCESS = 4,         //Item has been added, but content is not available for the same
        CONTENT_COMPLETE = 5,  //The content for this item has been completed. We can start selling the item now.
        PAUSED_BY_RISK = 6,    //Item's sale has been automatically paused since it was marked as risky
        COMING_SOON= 7          //Item is now in Coming Soon Page and will move to ACTIVE gradually as it achieves the Start date.
}

enum ItemType {
    SERIALIZED = 1,
    NON_SERIALIZED = 2
}

struct Item{
        1:i64 id,
        2:string productGroup
        3:string brand,
        4:string modelNumber,
        5:string modelName,
        6:string color,
        7:i64 category,
        8:string comments,
        9:i64 catalogItemId,
        10:i64 featureId,
        11:string featureDescription,
        13:optional double mrp, //maxmimum retail price
        14:optional double sellingPrice, //Selling price
        15:optional double weight,
        16:i64 addedOn,
        17:optional i64 startDate,
        18:optional i64 retireDate,
        19:status itemStatus,
        20:string status_description,
        21:map<string,string> otherInfo,
        22:string bestDealText,
        23:optional double bestDealValue,
        24:bool defaultForEntity,
        25:i64 updatedOn,
        26:optional i64 bestSellingRank,
        27:bool risky,
        28:optional i32 expectedDelay,
        29:optional bool isWarehousePreferenceSticky,
        30:i32 warrantyPeriod,
        31:optional i64 preferredVendor,
        32:ItemType type,
        33:optional i64 comingSoonStartDate,
        34:optional i64 expectedArrivalDate,
        35:bool hasItemNo,
        36:bool clearance
}

struct Category{
        1:i64 id,
        2:string label,
        3:string description,
        4:i64 parent_category_id,
        /**
        * This field should not be used.
        */
        5:list<i64> children_category_ids
        6:string display_name
}

struct ItemShippingInfo{
        1:bool isActive,
        2:optional bool isRisky,
        3:optional i64 quantity
}

struct Source{
        1:i64 id,
        2:string name,
        3:string identifier
}

struct SourceItemPricing{
        1:i64 sourceId,
        2:i64 itemId,
        3:double mrp,
        4:double sellingPrice
}

struct ProductNotificationRequest       {
        1:Item item,
        2:string email,
        3:i64 addedOn
}

struct ProductNotificationRequestCount  {
        1:Item item,
        2:i64 count
}

struct VoucherItemMapping{
        1:i64 voucherType,
        2:i64 itemId,
        3:i64 amount
}

exception CatalogServiceException{
        1:i64 id,
        2:string message
}

service CatalogService extends GenericService.GenericService{

/**
        Availability and inventory attributes   
*/
        //all add and update methods - added by Ashish
        i64 addItem(1:Item item) throws (1:CatalogServiceException cex),
        i64 updateItem(1:Item item) throws (1:CatalogServiceException cex),
        
        /**
        Checks if the item given to the corresponding itemId is active. If it's active,
        whether it's risky and if it's risky, its inventory position.
        */
        ItemShippingInfo isActive(1:i64 itemId) throws (1:CatalogServiceException isex),
        
        string getItemStatusDescription(1:i64 itemId) throws (1:CatalogServiceException isex),
        
        //Item management apis
        void startItemOn(1:i64 item_id, 2:i64 timestamp) throws (1:CatalogServiceException cex),
        void retireItemOn(1:i64 item_id, 2:i64 timestamp) throws (1:CatalogServiceException cex),
        void changeItemStatus(1:i64 item_id, 2:i64 timestamp, 3:status newstatus) throws (1:CatalogServiceException cex),
        //Other accessor methods - added by Ashish
        Item getItem(1:i64 item_id) throws (1:CatalogServiceException cex),
        list<Item> getItemsByCatalogId(1:i64 catalog_item_id) throws  (1:CatalogServiceException cex),
        list<Item> getValidItemsByCatalogId(1:i64 catalog_item_id) throws  (1:CatalogServiceException cex),
        list<Item> getAllItems(1:bool isActive) throws (1:CatalogServiceException cex),
        list<Item> getAllItemsByStatus(1:status itemStatus) throws (1:CatalogServiceException cex),
        bool markItemAsContentComplete(1:i64 entityId, 2:i64 category, 3:string brand, 4:string modelName, 5:string modelNumber) throws (1:CatalogServiceException cex),
        
        /**
        Gets at most 'limit' items starting at the given offset. Returns an empty list if there are no more items at the given offset.
        */
        list<Item> getAllItemsInRange(1:i64 offset, 2:i64 limit) throws (1:CatalogServiceException cex),
        
        /**
        Gets at most 'limit' items starting at the given offset in the given status. Returns an empty list if there are no more items at the given offset.
        */
        list<Item> getAllItemsByStatusInRange(1:status itemStatus, 2:i64 offset, 3:i64 limit) throws (1:CatalogServiceException cex),
        
        /**
        Gets a count of all items by status
        */
        i32 getItemCountByStatus(1:bool useStatus, 2:status itemStatus),
        
        // for home page .... best deals, best sellers and latest arrivals
        list<Item> getBestSellers() throws (1:CatalogServiceException isex),
        list<i64> getBestSellersCatalogIds(1:i64 beginIndex, 2:i64 totalItems, 3:string brand, 4:i64 category) throws (1:CatalogServiceException cex),
        i64 getBestSellersCount() throws (1:CatalogServiceException cex),
        
        list<Item> getBestDeals() throws (1:CatalogServiceException isex),
        list<i64> getBestDealsCatalogIds(1:i64 beginIndex, 2:i64 totalItems, 3:string brand, 4:i64 category) throws (1:CatalogServiceException cex),
        i64 getBestDealsCount() throws (1:CatalogServiceException cex),

        list<Item> getComingSoon() throws (1:CatalogServiceException isex),
        list<i64> getComingSoonCatalogIds(1:i64 beginIndex, 2:i64 totalItems, 3:string brand, 4:i64 category) throws (1:CatalogServiceException cex),
        i64 getComingSoonCount() throws (1:CatalogServiceException cex),
        
        /**
        Returns a list of items sorted in the descending order by start date.
        The list is limited to the 'latest_arrivals_count' configuraiton parameter.
        */
        list<Item> getLatestArrivals() throws (1:CatalogServiceException isex),

        /**
        Returns the list of catalog ids of latest arrivals in the given categories of the given brand.
        To ignore the categories, pass the list as empty. To ignore brand, pass it as null.   
        */
        list<i64> getLatestArrivalsCatalogIds(1:i64 beginIndex, 2:i64 totalItems, 3:string brand, 4:list<i64> categories) throws (1:CatalogServiceException cex),
        
        /**
        Get the total number of latest arrivals we are willing to show.
        The count's upper bound is the 'latest_arrivals_count' configuraiton parameter.
        */
        i64 getLatestArrivalsCount() throws (1:CatalogServiceException cex),
        
        
        i64 generateNewEntityID(),
        
        /**
        * All category related functions
        */
        bool addCategory(1:Category category),
        Category getCategory(1:i64 id),
        list<Category> getAllCategories(),
        
        /**
        Returns the list of similar items.
        */
        list<Item> getAllSimilarItems(1:i64 itemId),
        
        /**
        Adds similar item.
        */
        Item addSimilarItem(1:i64 itemId, 2:i64 catalogItemId) throws (1:CatalogServiceException cex),
        
        /**
        Delete similar item.
        */
        bool deleteSimilarItem(1:i64 itemId, 2:i64 catalogItemId) throws (1:CatalogServiceException cex),
        
        /**
        Checks if similar item exists (with same Brand, ModelNumber, ModelName, Color)
        If yes, returns the itemId else returns 0
        */
        i64 checkSimilarItem(1:string brand, 2:string modelNumber, 3:string modelName, 4:string color),
        
        /**
        Check wether item is risky and change status if inventory is not available for risky items
        */
        void validateRiskyStatus(1:i64 itemId),
        
        /**
    Marks/Unmarks an item as risky. This flag is used for automatic marking of an item as INACTIVE in case of zero inventory.
    */
    void changeItemRiskyFlag(1:i64 itemId, 2:bool risky),
    
    
        /**
        Returns list of items marked as risky.
        */
        list<Item> getItemsByRiskyFlag(),
        
        /**
        Returns list of items with any status except PHASED_OUT and filtered by category, brand.
        */
        list<Item> getItemsForMasterSheet(1:string category, 2:string brand),
        
        /**
        Returns list of catalog ids of items with same similarity index as of the given itemId 
        */
        list<i64> getSimilarItemsCatalogIds(1:i64 beginIndex, 2:i64 totalItems, 3:i64 itemId),

        /**
        Add user requests for out of stock items. Once user will ask for notify me an entry will 
        */
        bool addProductNotification(i64 itemId, string email),
        
        /**
                Send the product notifications to the users for items which has stock.
        */
        bool sendProductNotifications(),
        
        /**
                Returns list of brand names for a given category Id
        */
        list<string> getAllBrandsByCategory(1:i64 categoryId),
    
    /**
                Returns list of brand names
        */
        list<string> getAllBrands(),
    
        /**
        Return list of all sources
        */
        list<Source> getAllSources(), 
                
        /**
        Returns the pricing information of an item. If no information is found, exception will be thrown.
        */
        SourceItemPricing getItemPricingBySource(1:i64 itemId, 2:i64 sourceId) throws (1:CatalogServiceException cex),
        
        /**
        Adds prices to be displayed corresponding to the item if user comes from a source.
        If item is not found or source is not found, it will throw exception.
        */
        void addSourceItemPricing(1:SourceItemPricing sourceItemPricing) throws (1:CatalogServiceException cex),
        
        /**
        Returns the list of source pricing information of an item.
        Raises an exception if item not found corresponding to itemId
        */
        list<SourceItemPricing> getAllSourcePricing(1:i64 itemId) throws (1:CatalogServiceException cex),
        
        /**
        Get the item for a given itemId and sourceId. MRP and sellingPrice will be updated for source if we have different prices for source.
        */
        Item getItemForSource(1:i64 item_id, 2:optional i64  sourceId) throws (1:CatalogServiceException cex),
        
        /**
        Searches items matching the the given terms in the catalog and returns results within the specified range.
        */
        list<Item> searchItemsInRange(1:list<string> searchTerms, 2:i64 offset, 3:i64 limit),
        
        /**
        Gets the count of search results for the given search terms so that the user can go through all the pages.
        */
        i32 getSearchResultCount(1:list<string> searchTerms),
        
        /**
        Returns a list of product notifications added after a supplied datetime
        */
        list<ProductNotificationRequest> getProductNotifications(1:i64 startDateTime),
        
        /**
        Returns a list of count of requests for product notification against each item
        */
        list<ProductNotificationRequestCount> getProductNotificationRequestCount(1:i64 startDateTime)
        
        /**
        This method adds a log to authorize table with Item Id, username who authorized the change, reason.
        */
        bool addAuthorizationLog(1:i64 itemId, 2:string username, 3:string reason) throws (1:CatalogServiceException cex),
    
    list<i64> getClearanceSaleCatalogIds() throws (1:CatalogServiceException cex),
        
        bool addupdateVoucherForItem(1:i64 catalog_item_id, 2:i64 voucherType, 3:i64 voucherAmount) throws (1:CatalogServiceException cex),
        
        bool deleteVoucherForItem(1:i64 catalog_item_id, 2:i64 voucherType) throws (1:CatalogServiceException cex),
        
        i64 getVoucherAmount(1:i64 itemId, 2:i64 voucherType),
        
        list<VoucherItemMapping> getAllItemVouchers(1:i64 itemId),
        
        bool isValidCatalogItemId(1:i64 catalog_item_id)
}