def create_product(data, username): try: with session_scope() as session: user = session.query(models.UserSHG).filter( models.UserSHG.username == username).first() if not user: resp = {'status': 'fail', 'message': 'SHG does not exist'} return resp, 400 product = models.Product(data.get("name"), data.get("description"), data.get("image_uri"), data.get("min_size"), data.get("price"), user) session.add(product) resp = { 'status': 'success', 'message': 'Product added successfully' } return resp, 200 except BaseException: LOG.error("Couldn't create product", exc_info=True) response_object = { 'status': 'fail', 'message': 'Try again', } return response_object, 500
def create_bid(tender_id, amount, shg_id): # print(tender_id, amount, shg_id) with session_scope() as session: existing_bid = session.query( models.Bid).filter(models.Bid.shg_id == shg_id).filter( models.Bid.tender_id == tender_id).all() if (len(existing_bid) == 0): shg = session.query(models.UserSHG).filter( models.UserSHG.id == shg_id).all()[0] tender = session.query(models.Tender).filter( models.Tender.id == tender_id).all()[0] new_bid = models.Bid(amount, shg, tender) if new_bid: session.add(new_bid) response_data = { "success": True, "data": format_response(session, new_bid) } return response_data return { "success": False, "message": "Bid creation failed!" }, 400 # print(existing_bid[0].tender_id) return {"success": False, "message": "Bid exists"}, 400
def create_tender(name, sme_id, description, media, milestones, plan_uri): with session_scope() as session: user_sme = session.query( models.UserSME).filter(models.UserSME.id == sme_id).first() media_obj = [] milestone_obj = [] for m in media: new_media = models.Media(m["uri"], m["type"]) media_obj.append(new_media) session.add(new_media) for milestone in milestones: milestone_media = [] for milestone_m in milestone["media"]: new_mile_media = models.Media(m["uri"], m["type"]) milestone_media.append(new_mile_media) session.add(new_mile_media) new_milestone = models.Milestone(milestone["name"], milestone["description"], "pending", milestone_media) milestone_obj.append(new_milestone) session.add(new_milestone) new_tender = models.Tender(name, "created", description, media_obj, milestone_obj, user_sme, plan_uri) if new_tender: session.add(new_tender) response_data = { "success": True, "data": format_response(session, new_tender) } return response_data, 200 return {"success": False}, 400
def get_order(order_id): with session_scope() as session: order = session.query(models.Order).filter( models.Order.id == order_id).first() if order: return {"success": True, "data": format_response(session, order)}, 200 return {"success": False}, 404
def login_user_SHG(data): try: with session_scope() as session: user = session.query(models.UserSHG).filter( models.UserSHG.username == data.get("username")).all() if len(user) == 0: user = None else: user = user[0] if user is None: response_object = { 'status': 'fail', 'message': 'User does not exist. ' } return response_object, 403 if user and user.check_password(data.get('password')): if True: # if user.is_verified: // TODO: Add verification # convert string to bool if data.get('remember').lower() == 'true' or data.get( 'remember').lower() == 'yes': remem = True else: remem = False response_object = { 'status': 'success', 'message': 'Successfully logged in.', } login_info = format_user_shg(session, user) return login_info, 200 else: response_object = { 'status': 'fail', 'message': 'Please verify your Username before first login', } return response_object, 402 else: response_object = { 'status': 'fail', 'message': 'Username or password does not match.', } return response_object, 401 except BaseException: LOG.error('Login Failed', exc_info=True) response_object = { 'status': 'fail', 'message': 'Try again', } return response_object, 500
def get_shg_bids(shg_id): with session_scope() as session: bids = session.query( models.Bid).filter(models.Bid.shg_id == shg_id).all() if len(bids) > 0: return { "success": True, "data": [format_response(session, b) for b in bids] } return {"success": False}, 404
def get_product_id(id): with session_scope() as session: product = session.query( models.Product).filter(models.Product.id == id).first() if not product: resp = {'status': 'fail', 'message': 'Product not found'} return resp, 400 resp = format_response(session, product) return resp, 200
def create_milestone(tender_id, name, description, image_uri): with session_scope() as session: image = models.Media(image_uri, "image") new_milestone = models.Milestone( name, description, "created", [image]) session.flush() tender = session.query(models.Tender).filter( models.Tender.id == tender_id).first() tender.milestones.append(new_milestone) return {"success": True, "milestone_id": new_milestone.id}, 200
def get_tender_by_id(id_): with session_scope() as session: tender = session.query( models.Tender).filter(models.Tender.id == id_).all() if len(tender) > 0: data = { "success": True, "data": format_response(session, tender[0]) } return data, 200 return {"success": False}, 404
def load_user_from_request(request): try: with session_scope() as session: token = request.headers.get('Authorization') if token: user_id = decode_token(token) username = user_id['identity'] user = session.query(UserSHG).filter( UserSHG.username == username).first() if user: return user except Exception as e: return None
def accept_bid(bid_id, contract_uri): # TODO: authenticated by SME with session_scope() as session: bid = session.query( models.Bid).filter(models.Bid.id == bid_id).first() tender = session.query(models.Tender).filter( models.Tender.id == bid.tender_id).first() new_contract = models.Media(contract_uri, "image") new_order = models.Order(tender.name, "created", tender.description, tender.milestones, tender.sme, bid.shg, [new_contract], tender, tender.plan_uri) session.add(new_order) return {"success": True}, 200 return {"success": False}, 400
def delete_product(id, username): with session_scope() as session: product = session.query( models.Product).filter(models.Product.id == id).first() if not product: resp = {'status': 'fail', 'message': 'Product not found'} return resp, 400 if (product.shg.username != username): resp = {'status': 'fail', 'message': 'Not Authorized'} return resp, 401 session.delete(product) resp = {'status': 'success', 'message': 'Product Deleted'} return resp, 200
def update_milestone(milestone_id, name, description, image_uri, status): with session_scope() as session: if name: session.query(models.Milestone).filter( models.Milestone.id == milestone_id).update({models.Milestone.description: name}, synchronize_session=False) if description: session.query(models.Milestone).filter( models.Milestone.id == milestone_id).update({models.Milestone.description: description}, synchronize_session=False) if image_uri: session.query(models.Media).filter( models.Media.milestone_id == milestone_id).update({models.Media.uri: image_uri}, synchronize_session=False) if status: session.query(models.Media).filter( models.Media.milestone_id == milestone_id).update({models.Milestone.status: status}, synchronize_session=False) return {"success": True}, 200
def signup_SHG(data): try: with session_scope() as session: user = session.query(models.UserSHG).filter( models.UserSHG.username == data.get("username")).first() if user is not None: response_object = { 'status': 'invalid', 'message': 'Username Already Registered', } LOG.info( 'Username already present in database. Redirect to Login Page' ) return response_object, 401 bank = models.BankDetails(data.get("account_number"), data.get("branch_code")) user = models.UserSHG(data.get("name"), data.get("username"), data.get("password"), data.get("phone"), data.get("WAContact"), data.get("name_SHG"), data.get("industry_type"), data.get("production_cap"), data.get("order_size"), data.get("profile_image_uri"), bank) session.add(user) response_object = { 'status': 'success', 'message': 'User added Successfully', } return response_object, 200 except BaseException as e: print(e) response_object = { 'status': 'fail', 'message': 'Try again', } return response_object, 500
def edit_product(id, data, username): with session_scope() as session: product = session.query( models.Product).filter(models.Product.id == id).first() if not product: resp = {'status': 'fail', 'message': 'Product not found'} return resp, 400 if (product.shg.username != username): resp = {'status': 'fail', 'message': 'Not Authorized'} return resp, 401 for k, v in data.items(): if k == "id": continue session.query(models.Product).filter( models.Product.id == id).update({k: v}, synchronize_session=False) resp = {'status': 'success', 'message': 'Product Updated'} return resp, 200
def load_user(id): with session_scope() as session: return session.query(UserSHG).filter(UserSHG.id == id).first()
def get_all_orders(): with session_scope() as session: products = session.query(models.Product).all() resp = [format_response(session, product) for product in products] return resp, 200
def get_product_shg_id(id): with session_scope() as session: products = session.query( models.Product).filter(models.Product.shg_id == id).all() resp = [format_response(session, product) for product in products] return resp, 200
def mark_completed(id_): with session_scope() as session: milestone = session.query(models.Milestone).filter(models.Milestone.id == id_).update( {models.Milestone.status: "completed"}, synchronize_session=False) return {"success": True}, 200
def all_shg(): with session_scope() as session: all_shg = session.query(models.UserSHG).all() return [format_user_shg(s) for s in all_shg], 200
def all_sme(): with session_scope() as session: all_sme = session.query(models.UserSME).all() return [format_user_sme(s) for s in all_sme], 200
def complete_order(order_id): with session_scope() as session: order = session.query(models.Order).filter(models.Order.id == order_id).update( {models.Order.state: "completed"}, synchronize_session=False) return {"success": True}, 200
def get_all_tenders(): with session_scope() as session: all_tenders = session.query(models.Tender).all() return [format_response(session, t) for t in all_tenders], 200
def get_sme_tenders(sme_id): with session_scope() as session: tenders = session.query( models.Tender).filter(models.Tender.sme_id == sme_id).all() return [format_response(session, t) for t in tenders], 200
from drishtee.db.models import Tender, UserSME, BankDetails, UserSHG from drishtee.db.base import session_scope from datetime import datetime with session_scope() as session: bank_details = BankDetails("kjdsfhjdshf", "sdhksjhfds") # new_user_sme = UserSME( # "name", "username", "password", "phone", "WAContact", "industry_type", "https://google.com", bank_details # ) # user_sme = session.query(UserSME).filter(UserSME.id == 1).all()[0] # new_tender = Tender("created", "dsakjfh", [], [], new_user_sme) new_user_shg = UserSHG("sdjkfkdsf", "kdajsf", "adsfuhiua", "2345", "random", "sjhfjdshf", "skjdhfkjdsf", "3748", "7459", "https://reddit.com", bank_details) session.add(new_user_shg) session.add(bank_details)
def load_user(id): with session_scope() as session: user = session.query(UserSME).filter(UserSME.id == id).first() return user
def get_shg_orders(shg_id): with session_scope() as session: orders = session.query(models.Order).filter( models.Order.shg_id == shg_id).all() return [format_response(session, o) for o in orders], 200