Пример #1
0
 def get(self, user_id=None, role_id=None, status=None):
     if user_id is not None:
         user = UserData.query.get(user_id)
         return jsonify(user.serialize())
     if role_id is not None:
         users = UserData.query.filter(UserData.role_id == role_id)
         return jsonify(UserData.serialize_list(users))
     elif status is not None:
         users = UserData.query.filter(UserData.status == status)
         return jsonify(UserData.serialize_list(users))
     else:
         return jsonify(
             UserData.serialize_list(
                 UserData.query.order_by(UserData.username.asc()).all()))
Пример #2
0
 def get(self, deal_id):
     if not deal_id:
         return
     
     deal_data = DealData(self.db)
     deal_info = deal_data.retrieve_deal_info(deal_id)
     if not deal_info:
         self.render("deal_info.html", deal_info=None)
         return
     
     user_data = UserData(self.db)
     user_info = user_data.retrieve(deal_info["seller"])
     if not user_info:
         self.render("deal_info.html", deal_info=None)
         return
     
     res = {}
     
     deal_photo_data = DealPhotoData(self.db)
     deal_photo_info = deal_photo_data.get_deal_photo(deal_id)
     
     if deal_photo_info and len(deal_photo_info)>0:
         photo_data = PhotoData(self.db)
         photo_urls = []
         photo_pids = []
         for pi in deal_photo_info:
             p = photo_data.retrieve(pi["photo_id"])
             photo_urls.append(p["filename"])
             photo_pids.append(p["pid"])
         res["imgs"] = photo_urls
         res["pids"] = photo_pids
     
     res["id"]=deal_info["id"]
     res["category"]=deal_info["category"]
     res["seller_fbid"]=deal_info["seller"]
     res["seller_name"]=user_info["username"]
     res["created_at"]=str(deal_info["created_at"])
     res["simple_desc"]=deal_info["simple_desc"]
     res["disp_addr"]=deal_info["displayed_addr"]
     res["min_price"]=deal_info["min_price"]
     res["max_price"]=deal_info["max_price"]
     res["details"]=deal_info["details"]
     res["contact_phone"]=deal_info["contact_phone"]
     res["contact_email"]=deal_info["contact_email"]
     
     self.render("deal_info.html", deal_info=res)
Пример #3
0
 def get(self):
     uid = self.get_argument("uid", None)
     if uid==None:
         self.write("{\"err\": \"not enough arguments\"}")
         return
     
     wishlist_data = WishlistData(self.db)
     wishlist = wishlist_data.retrieve_alive_wishlist(uid)
     if wishlist==None:
         return
     
     user_data = UserData(self.db)
     user_info = user_data.retrieve(uid)
     if not user_info or len(user_info)==0:
         print "no user info found in wishlist.py"
         return
     
     self.render("wishlist.html", wishlist=wishlist, user=user_info)
Пример #4
0
    def post(self):
        type = self.get_argument("t", None)
        type = int(type)
        if type == 0:
            fb_uid = self.get_argument("fbid", None)
            if fb_uid:
                user_data = UserData(self.db)
                uid = user_data.is_exist(fb_uid)
                self.write(str(uid))
            else:
                return
        elif type == 1:
            user_name    = self.get_argument("username", None)
            phone        = self.get_argument("phone", None)
            home_address = self.get_argument("addr", None)
            fb_uid       = self.get_argument("fbid", None)
            fb_username  = self.get_argument("fbu", None)
            fb_thumbnail = self.get_argument("fbthumb", None)
            fb_email     = self.get_argument("fbmail", None)
            fb_gender    = self.get_argument("fbgender", None)
            fb_location  = self.get_argument("fbloc", None)

            user_info = {}
            if user_name:
                user_info["username"] = user_name
            else:
                return
            if phone:
                user_info["phone"] = phone
            if home_address:
                user_info["home_address"] = home_address

            if fb_uid:
                user_info["fb_uid"] = fb_uid
            else:
                return
            if fb_username:
                user_info["fb_username"] = fb_username
            if fb_thumbnail:
                user_info["fb_thumbnail"] = fb_thumbnail
            if fb_email:
                user_info["fb_email"] = fb_email
            if fb_gender:
                user_info["fb_gender"] = fb_gender
            if fb_location:
                user_info["fb_location"] = fb_location
                
            user_data = UserData(self.db)
            uid = user_data.insert_new_user(user_info)
            self.write(str(uid))
        elif type == 2:
            fb_uid = self.get_argument("fbid", None)
            if fb_uid:
                user_data = UserData(self.db)
                user_info = user_data.retrieve(fb_uid)
                self.write(json.dumps(user_info))
        elif type == 3:
            fb_uid       = self.get_argument("fbid", None)
            user_name    = self.get_argument("username", None)
            phone        = self.get_argument("phone", None)
            home_address = self.get_argument("addr", None)
            fb_email     = self.get_argument("fbmail", None)
            fb_location  = self.get_argument("fbloc", None)
            
            user_info = {}
            if fb_uid:
                user_info["fb_uid"] = fb_uid
            else:
                return
            if user_name:
                user_info["username"] = user_name
            else:
                return
            if phone:
                user_info["phone"] = phone
            if home_address:
                user_info["home_address"] = home_address
            if fb_email:
                user_info["fb_email"] = fb_email
            if fb_location:
                user_info["fb_location"] = fb_location
            user_data = UserData(self.db)
            res = user_data.update(user_info)
            self.write(str(res));
Пример #5
0
 def get(self):
     local = self.get_cookie("geo")
     if not local:
         return
     else:
         local = " ".join(local.split("-"))
         local = local.lower()
     
     local     = int(city_index[local])
     category  = self.get_argument("category", None)
     min_price = self.get_argument("min", None)
     max_price = self.get_argument("max", None)
     keywords  = self.get_argument("q", None)
     
     limit = 2
     offset = self.get_argument("p", None)
     if offset==None: 
         offset = 0
     else:
         offset = self.validInt(offset)
         if offset==None: return
     
     if not category: return
     category = self.validInt(category)
     if not category: return
     
     if min_price:
         min_price = self.validFloat(min_price)
         if min_price==None: return
     if max_price:
         max_price = self.validFloat(max_price)
         if max_price==None: return
     if min_price!=None and max_price!=None and min_price > max_price:
         self.write("{\"err\":\"max price should be higher than min price\"}")
         return
     
     deal_data = DealData(self.db)
     user_data = UserData(self.db)
     
     entries = []
     
     if keywords and len(keywords)!=0:
         print keywords
         
         keywords = " ".join(keywords.split("+"))
         
         client = sphinxapi.SphinxClient()
         client.SetFilterRange("category", category, category)
         client.SetFilterRange("city_code", local, local)
         if min_price:
             client.SetFilterFloatRange("min_price", min_price, 99999999999999999.9)
         if max_price:
             client.SetFilterFloatRange("max_price", -1.0, max_price)
         
         client.SetLimits(offset*limit, limit)
         client.SetSortMode(sphinxapi.SPH_SORT_RELEVANCE)
         
         results = client.Query(keywords)
         hits = results["matches"]
         
         for hit in hits:
             deal_id = hit["id"]
             deal = deal_data.retrieve_deal_info(deal_id)
             deal_info = {}
             deal_info["id"] = deal["id"]
             deal_info["category"] = deal["category"]
             deal_info["seller_fbid"] = deal["seller"]
             user_info = user_data.retrieve(deal["seller"])
             deal_info["seller_name"] = user_info["username"]
             deal_info["created_at"] = str(deal["created_at"])
             deal_info["simple_desc"] = deal["simple_desc"]
             deal_info["disp_addr"] = deal["displayed_addr"]
             deal_info["min_price"] = deal["min_price"]
             deal_info["max_price"] = deal["max_price"]
             entries.append(deal_info)
     else:
         deals = deal_data.search_deals(local, category, min_price, max_price, limit, offset*limit)
         for deal in deals:
             deal_info = {}
             deal_info["id"] = deal["id"]
             deal_info["category"] = deal["category"]
             deal_info["seller_fbid"] = deal["seller"]
             user_info = user_data.retrieve(deal["seller"])
             deal_info["seller_name"] = user_info["username"]
             deal_info["created_at"] = str(deal["created_at"])
             deal_info["simple_desc"] = deal["simple_desc"]
             deal_info["disp_addr"] = deal["displayed_addr"]
             deal_info["min_price"] = deal["min_price"]
             deal_info["max_price"] = deal["max_price"]
             entries.append(deal_info)
     
     if offset==0 and len(entries)==0:
         self.render("error.html", type=0, msg="No results found")
     else:
         query = None
         if keywords and len(keywords)!=0:
             query = "+".join(keywords.split(" "))
         
         if min_price==None:
             min_price=""
         if max_price==None:
             max_price=""
         self.render("search.html", deals=entries, offset=offset, category=category, 
                     min_price=min_price, max_price=max_price, query=query)
         
         
         
         
         
Пример #6
0
 def post(self):
     user = UserData(parser.parse_args())
     db.session.add(user)
     db.session.commit()
     return jsonify(user.serialize())
Пример #7
0
 def get(self):
     #local = self.get_argument("local", None)
     local = self.get_cookie("geo")
     if not local:
         return
     local = " ".join(local.split("-"))
     if not local:
         return
     else:
         local = local.lower()
     
     category = self.get_argument("category", None)
     #limit = self.get_argument("limit", None)
     limit = 4
     
     if not category:
         self.render("deals.html", last=None, first=None, deals=None)
         return
     
     offset = self.get_argument("offset", None)
     morethan = self.get_argument("more", None)
     lessthan = self.get_argument("less", None)
     
     if (offset==None) and (morethan==None) and (lessthan==None):
         self.write("{\"err\":\"incomplete arguments\"}")
         return
     
     self.validInt(category)
     self.validInt(limit)
     
     if offset!=None:
         self.validInt(offset)
     elif morethan!=None:
         self.validInt(morethan)
     elif lessthan!=None:
         self.validInt(lessthan)
     
     deal_data = DealData(self.db)
     
     deals = None
     if offset:
         deals = deal_data.retrieve_deals(local, category, limit, offset)
     elif morethan:
         deals = deal_data.retrieve_deals(local, category, limit, None, morethan)
     elif lessthan:
         deals = deal_data.retrieve_deals(local, category, limit, None, None, lessthan)
     else: # this only happens when it is the end of deals and user presses prev page
         deals = deal_data.retrieve_deals(local, category, limit, None, None, None)
     
     last_id = deal_data.retrieve_last_deal(local, category)
     first_id= deal_data.retrieve_first_deal(local, category)
     
     user_data = UserData(self.db)
     
     deal_array = []
     for deal in deals:
         deal_info = {}
         deal_info["id"] = deal["id"]
         deal_info["category"] = deal["category"]
         deal_info["seller_fbid"] = deal["seller"]
         user_info = user_data.retrieve(deal["seller"])
         deal_info["seller_name"] = user_info["username"]
         deal_info["created_at"] = str(deal["created_at"])
         deal_info["simple_desc"] = deal["simple_desc"]
         deal_info["disp_addr"] = deal["displayed_addr"]
         deal_info["min_price"] = deal["min_price"]
         deal_info["max_price"] = deal["max_price"]
         deal_array.append(deal_info)
     
     self.render("deals.html", last=last_id, first=first_id, deals=deal_array)
     #self.write(json.dumps(res))
Пример #8
0
    def post(self):
        type = self.get_argument("t", None)
        if not type:
            return
        try:
            type = int(type)
        except:
            return

        if type == 0:
            deal_id = self.get_argument("dealid", None)
            uid = self.get_argument("uid", None)  # the one who sends the message
            with_uid = self.get_argument("to", None)  # the one who receives the message
            message = self.get_argument("msg", None)

            if (not deal_id) or (not uid) or (not with_uid) or (not message):
                self.write('{"err": "not enough arguments"}')
                return

            if self.validLong(deal_id) == None:
                print "invalid deal_id in ConvHandler.py post"
                return
            if self.validLong(uid) == None:
                print "invalid uid_id in ConvHandler.py post"
                return
            if self.validLong(with_uid) == None:
                print "invalid with_uid in ConvHandler.py post"
                return

            # insert the message into message table and get the message id
            message_data = MessageData(self.db)
            mid = message_data.insert_message(message)
            if mid == None:
                self.write('{"err": "error in saving message"}')
                return

            # insert the conversation into the conversation table twice
            conversation_data = ConversationData(self.db)
            cid = conversation_data.insert_new_conv(deal_id, uid, with_uid, mid, 1, 1)
            if cid == None:
                self.write('{"err": "error in saving conversation"}')
                return
            if uid != with_uid:
                cid = conversation_data.insert_new_conv(deal_id, with_uid, uid, mid, 0, 0)
                if cid == None:
                    self.write('{"err": "error in saving conversation"}')
                    return

            self.write('{"success": "true"}')
        elif type == 1:
            deal_id = self.get_argument("dealid", None)
            uid = self.get_argument("uid", None)
            if (not deal_id) or (not uid):
                self.write('{"err": "not enough arguments"}')
                return

            print deal_id

            if self.validLong(deal_id) == None:
                print "invalid deal_id in ConvHandler.py post"
                return
            if self.validLong(uid) == None:
                print "invalid uid_id in ConvHandler.py post"
                return

            # retrieve all contact ranked by date
            user_data = UserData(self.db)
            conversation_data = ConversationData(self.db)
            contacts = conversation_data.retrieve_contacts(deal_id, uid)

            result = []
            for contact in contacts:
                with_uid = contact["with_uid"]
                user_info = user_data.retrieve(with_uid)

                entry = {}
                entry["username"] = user_info["username"]
                entry["id"] = with_uid
                # retrieve the unread number for each contact
                count = conversation_data.retrieve_unread_message_num(deal_id, uid, with_uid)
                entry["unread"] = count[0]["count"]

                result.append(entry)

            self.write(json.dumps(result))
        elif type == 2:
            deal_id = self.get_argument("dealid", None)
            uid = self.get_argument("uid", None)
            with_uid = self.get_argument("with_uid", None)
            if (not deal_id) or (not uid) or (not with_uid):
                self.write('{"err": "not enough arguments"}')
                return

            conversation_data = ConversationData(self.db)
            messages = conversation_data.retrieve_messages(deal_id, uid, with_uid)
            if (not messages) or len(messages) == 0:
                return

            message_data = MessageData(self.db)

            result = []
            for message in messages:
                entry = {}
                msg_id = message["msg_id"]
                content = message_data.retrieve_message(msg_id)

                entry["message"] = content["message"]
                entry["msg_id"] = msg_id
                entry["created_at"] = str(message["created_at"])
                entry["is_sender"] = message["is_sender"]

                result.append(entry)
            self.write(json.dumps(result))
        elif type == 3:
            deal_id = self.get_argument("dealid", None)
            uid = self.get_argument("uid", None)
            with_uid = self.get_argument("with_uid", None)
            if (not deal_id) or (not uid) or (not with_uid):
                self.write('{"err": "not enough arguments"}')
                return

            conversation_data = ConversationData(self.db)
            conversation_data.make_messages_read(deal_id, uid, with_uid)
Пример #9
0
 def post(self):
     fb_uid = self.get_argument("fbid", None)
     category = self.get_argument("category", None)
     simple_desc = self.get_argument("simdesc", None)
     formatted_addr = self.get_argument("addr", None)
     disp_addr = self.get_argument("dispaddr", None)
     min_price = self.get_argument("min", None)
     max_price = self.get_argument("max", None)
     desc = self.get_argument("details", None)
     phone = self.get_argument("phone", None)
     email = self.get_argument("email", None)
     imgs = self.get_argument("imgs", None)
     
     deal_info = {}
     if fb_uid:
         deal_info["fbid"] = fb_uid
     else:
         self.write("{\"err\":\"login facebook\"}")
         return
     
     #check whether this user is registered
     user_data = UserData(self.db)
     if user_data.is_exist(fb_uid) == -1:
         print "reject unregistered user publishing deal"
         return
     
     if category:
         deal_info["category"] = category
     else:
         self.write("{\"err\":\"no category\"}")
         return
     
     if simple_desc:
         deal_info["simple_desc"] = simple_desc
     else:
         self.write("{\"err\":\"no simple desc\"}")
         return
     
     if min_price:
         deal_info["min_price"] = min_price
     else:
         self.write("{\"err\":\"no min price\"}")
         return
     
     if max_price:
         deal_info["max_price"] = max_price
     else:
         self.write("{\"err\":\"no max price\"}")
         return
     
     if formatted_addr:
         deal_info["formatted_addr"] = formatted_addr
     if disp_addr:
         deal_info["disp_addr"] = disp_addr
     if desc:
         deal_info["details"] = desc
     if phone:
         deal_info["phone"] = phone
     if email:
         deal_info["email"] = email
     if imgs:
         img_array = imgs.split("|")
         deal_info["imgs"] = img_array
         
     deal_data = DealData(self.db)
     deal_id = deal_data.insert_new_deal(deal_info)
     if deal_id == -1:
         self.write("{\"err\":\"error in inserting to deal table\"}")
         return
     
     if not ("imgs" in deal_info):
         self.write("{\"success\":"+str(deal_id)+"}")
         return
     
     deal_info["deal_id"] = deal_id
     deal_photo_data = DealPhotoData(self.db)
     res = deal_photo_data.insert_deal_photo(deal_info)
     self.write("{\"success\":"+str(res)+"}")