def get(cls): req = request.args # Banks by state and city if 'state' in req and 'city' in req: banks = BloodBank.find_all_by_state_city(req['state'], req['city']) # Banks by distance elif 'lati' in req and 'longi' in req: if 'radius' in req: all_banks = BloodBank.find_all() elif 'group' in req: if not BloodGroupType.has_value_member(int(req['group'])): return {"message": INVALID_BLOOD_GROUP}, 400 group = BloodGroupType(int(req['group'])) all_banks = BloodBank.find_all_by_group(group=group) else: return {"message": "Send radius or group in query param"}, 400 # filter and sort banks by distance radius = float(req.get('radius', float('-inf'))) banks = geo.sort_by_distance(all_banks, float(req['lati']), float(req['longi']), radius) # search all banks with similar names elif 'name' in req: banks = BloodBank.find_all_like_name(req['name']) else: banks = BloodBank.find_all() bank_list = bank_list_schema.dump(banks) return {"banks": bank_list}, 200
def delete(cls, bank_id: int): bank = BloodBank.find_by_id(bank_id) if not bank: return {"message": BANK_NOT_FOUND}, 404 bank.delete_from_db() return {"message": BANK_DELETED}, 200
def get(cls, bank_id: int, group: int): if not BloodBank.find_by_id(bank_id): return {"message": BANK_DOES_NOT_EXIST.format(bank_id)}, 404 if not BloodGroupType.has_value_member(group): return {"message": INVALID_BLOOD_GROUP}, 400 blood_group = BloodGroupType(group) bags = BloodBag.find_all_by_bank_and_group(bank_id, blood_group) return {"bags": bag_list_schema.dump(bags)}, 200
def get(cls, bank_id: int): if not BloodBank.find_by_id(bank_id): return {"message": BANK_DOES_NOT_EXIST.format(bank_id)}, 404 bags = BloodBag.find_all_by_bank(bank_id) bag_list = bag_list_schema.dump(bags) # for bag in bag_list: # bag['bank_id'] = bank_id return {"bags": bag_list}, 200
def post(cls): bank_json = request.get_json() bank = bank_schema.load(bank_json) if BloodBank.find_by_email(bank.email): return {"message": BANK_ALREADY_EXISTS}, 400 pw_hash = bcrypt.generate_password_hash(bank.password) bank.password = pw_hash.decode() # convert bytes to string bank.save_to_db() return {"message": CREATED_SUCCESSFULLY}, 201
def post(cls): user_json = request.get_json() login_data = login_schema.load(user_json) if login_data['is_user']: user = User.find_by_email(login_data['email']) else: user = BloodBank.find_by_email(login_data['email']) if user and bcrypt.check_password_hash(user.password, login_data['password']): access_token = create_access_token(identity=user.id, fresh=True) return {"access_token": access_token}, 200 return {"message": INVALID_CREDENTIALS}, 401
def post(cls, bank_id: int): if not BloodBank.find_by_id(bank_id): return {"message": BANK_DOES_NOT_EXIST.format(bank_id)}, 404 bag_json = request.get_json() blood_group = bag_json['blood_group'] if not BloodGroupType.has_key_member(blood_group): return {"message": INVALID_BLOOD_GROUP}, 400 bag_size_id = bag_json['bag_size_id'] if not BagSize.find_by_id(bag_size_id): return {"message": INVALID_BAG_SIZE}, 400 bag = bag_schema.load(bag_json) bag.blood_bank_id = bank_id bag.bag_size_id = bag_size_id bag.save_to_db() return {"message": UPDATED_SUCCESSFULLY}, 200
def post(cls, user_id: int): user = User.find_by_id(user_id) if not user: return {"message": USER_NOT_FOUND}, 404 donation_json = request.get_json() bank = BloodBank.find_by_id(donation_json['blood_bank_id']) if not bank: return {"message": BANK_NOT_FOUND}, 404 donation = donation_schema.load(donation_json) user.donations.append(donation) # save user's last_donation_date user.last_donation_date = donation.date_of_donation if donation.date_of_donation else datetime.now() db.session.add(user) db.session.add(donation) db.session.commit() return {"message": DONATION_SAVED}, 201
def make_blood_bank(self, data, **kwargs): return BloodBank(**data)
def get(cls, bank_id: int): bank = BloodBank.find_by_id(bank_id) if not bank: return {"message": BANK_NOT_FOUND}, 404 return bank_schema.dump(bank), 200