Example #1
0
    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
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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
Example #5
0
    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
Example #6
0
    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
Example #7
0
    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
Example #8
0
    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
Example #9
0
 def make_blood_bank(self, data, **kwargs):
     return BloodBank(**data)
Example #10
0
    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