def add_participants(username, trip_id): if not request.json or 'participants' not in request.json: return make_response(jsonify({'error': 'Missing required parameter'}), 422) participants = request.json.get('participants') e = create_engine("sqlite:///trip_communicator.db") Ses = sessionmaker(bind=e) session = Ses() trip = session.query(Trip).filter( and_(Trip.trip_id == trip_id, Trip.owner_name == username)).first() if trip is not None: for p in participants: participant = add_participant_from_response(session, p, trip) if participant is not None: session.add(participant) commit_and_close(session) return make_response(jsonify({'Response': 'OK'}), 201) commit_and_close(session) return make_response( jsonify( {'Error': 'User is not the owner of trip or trip doesn\'t exist'}), 403)
def get_users(): e = create_engine("sqlite:///trip_communicator.db") Ses = sessionmaker(bind=e) session = Ses() users = session.query(User).all() r = [u.convert_to_json() for u in users] commit_and_close(session) return make_response(jsonify({'Users': r}), 201)
def get_participants(trip_id): e = create_engine("sqlite:///trip_communicator.db") Ses = sessionmaker(bind=e) session = Ses() trip = session.query(Trip).filter_by(trip_id=trip_id).first() if trip is None: commit_and_close(session) return make_response(jsonify({'Response': 'Incorrect trip_id '}), 400) participants = session.query(Participant).filter_by( trip_id=trip.trip_id).all() commit_and_close(session) return make_response( jsonify({"Participants": [p.convert_to_json() for p in participants]}), 201)
def join_chat(username, trip_id): e = create_engine("sqlite:///trip_communicator.db") Ses = sessionmaker(bind=e) session = Ses() participant = session.query(Participant).filter( and_(Participant.trip_id == trip_id, Participant.username == username)).first() owner = session.query(Trip).filter( and_(Trip.trip_id == trip_id, Trip.owner_name == username)).first() if participant is None and owner is None: commit_and_close(session) return make_response( jsonify({'Response': 'Can not join to this chat'}), 403) return make_response(jsonify({'Response': 'OK'}), 201)
def update_trip(username, trip_id): if request.json is None: return make_response(jsonify({'error': 'Missing required parameter'}), 422) e = create_engine("sqlite:///trip_communicator.db") Ses = sessionmaker(bind=e) session = Ses() user = session.query(User).filter_by(username=username).first() if user is None: commit_and_close(session) return make_response(jsonify({'error': 'Incorrect username'}), 400) trip = session.query(Trip).filter_by(trip_id=trip_id).first() datetime_format = '%Y-%m-%d' isChanged = False if trip is not None and trip.is_owner(user): if 'date_from' in request.json: isChanged = True trip.date_from = datetime.strptime(request.json['date_from'], datetime_format).date() if 'date_to' in request.json: isChanged = True trip.date_to = datetime.strptime(request.json['date_to'], datetime_format).date() if 'trip_name' in request.json: isChanged = True trip.trip_name = request.json['trip_name'] if 'participants' in request.json: isChanged = True update_participants(request.json['participants'], trip, session) commit_and_close(session) if isChanged: return make_response(jsonify({'Response': 'OK'}), 201) return make_response( jsonify({'error': 'Missing at least one required parameter'}), 422) return make_response( jsonify({ 'Response': 'User is not the owner of trip or trip doesn\'t exist' }), 403)
def delete_user(username): e = create_engine("sqlite:///trip_communicator.db") Ses = sessionmaker(bind=e) session = Ses() user = session.query(User).filter_by(username=username).first() if user is None: commit_and_close(session) return make_response(jsonify({'Response': 'Incorrect username'}), 400) trips = session.query(Trip).filter_by(owner_name=username).all() for trip in trips: session.query(Participant).filter_by(trip_id=trip.trip_id).delete() session.query(Trip).filter_by(owner_name=username).delete() session.query(User).filter_by(username=username).delete() session.query(Participant).filter_by(username=username).delete() commit_and_close(session) return make_response(jsonify({'Response': 'OK'}), 201)
def add_user(): if not request.json or ('username' not in request.json or 'password' not in request.json): return make_response(jsonify({'error': 'Missing required parameter'}), 422) username = request.json.get('username') password = request.json.get('password') e = create_engine("sqlite:///trip_communicator.db") Ses = sessionmaker(bind=e) session = Ses() if session.query(User).filter_by(username=username).first() is not None: commit_and_close(session) return make_response(jsonify({'error': 'Bad Request'}), 400) user = User(username, password) session.add(user) commit_and_close(session) return make_response(jsonify({'username': username}), 201)
def get_user_trips(username): e = create_engine("sqlite:///trip_communicator.db") Ses = sessionmaker(bind=e) session = Ses() user = session.query(User).filter_by(username=username).first() if user is None: commit_and_close(session) return make_response(jsonify({'Response': 'Incorrect username'}), 400) trips = session.query(Trip).filter(Trip.owner_name == username).all() participants = [] for t in trips: participants.append( session.query(Participant).filter( Participant.trip_id == t.trip_id).all()) return make_response( jsonify([ trips[i].convert_to_json_for_user(participants[i]) for i in range(len(trips)) ]), 201)
def change_password(username): if not request.json or ('new_password' not in request.json or 'password' not in request.json): return make_response(jsonify({'error': 'Missing required parameter'}), 422) current_password = request.json.get('password') new_password = request.json.get('new_password') e = create_engine("sqlite:///trip_communicator.db") Ses = sessionmaker(bind=e) session = Ses() user = session.query(User).filter_by(username=username).first() if user is None: commit_and_close(session) return make_response(jsonify({'Response': 'Incorrect username'}), 400) if user.verify_password(current_password): user.hash_password(new_password) commit_and_close(session) return make_response(jsonify({'Response': 'OK'}), 201) commit_and_close(session) return make_response(jsonify({'Response': 'Incorrect current password'}), 403)
def add_trip(username): if not request.json or ('trip_name' not in request.json or 'date_from' not in request.json or 'date_to' not in request.json or 'participants' not in request.json): return make_response(jsonify({'error': 'Missing required parameter'}), 422) datetime_format = '%Y-%m-%d' # The format participants = request.json.get('participants') date_from = datetime.strptime(request.json.get('date_from'), datetime_format).date() date_to = datetime.strptime(request.json.get('date_to'), datetime_format).date() trip_name = request.json.get('trip_name') e = create_engine("sqlite:///trip_communicator.db") Ses = sessionmaker(bind=e) session = Ses() user = session.query(User).filter_by(username=username).first() if user is None: commit_and_close(session) return make_response(jsonify({'Response': 'Incorrect username'}), 400) trip = Trip(trip_name, date_from, date_to, user) session.add(trip) session.commit() for p in participants: participant = add_participant_from_response(session, p, trip) if participant is not None: session.add(participant) owner_participant = Participant(user, trip) session.add(owner_participant) session.commit() trip_id = trip.trip_id session.close() return make_response(jsonify({'Trip id': trip_id}), 201)
def authenticate_user(): if not request.json or ('username' not in request.json or 'password' not in request.json): return make_response(jsonify({'error': 'Missing required parameter'}), 422) username = request.json.get('username') password = request.json.get('password') e = create_engine("sqlite:///trip_communicator.db") Ses = sessionmaker(bind=e) session = Ses() user = session.query(User).filter_by(username=username).first() if user is None: commit_and_close(session) return make_response(jsonify({'error': 'Bad Request'}), 400) if not user.verify_password(password): commit_and_close(session) return make_response(jsonify({'Response': 'Wrong password'}), 401) commit_and_close(session) return make_response(jsonify({'Response': 'OK'}), 201)
def delete_trip(username, trip_id): e = create_engine("sqlite:///trip_communicator.db") Ses = sessionmaker(bind=e) session = Ses() user = session.query(User).filter_by(username=username).first() if user is None: commit_and_close(session) return make_response(jsonify({'Response': 'Incorrect username'}), 400) trip = session.query(Trip).filter_by(trip_id=trip_id).first() if trip is not None and trip.is_owner(user): session.query(Trip).filter_by(trip_id=trip_id).delete() session.query(Participant).filter_by(trip_id=trip_id).delete() commit_and_close(session) return make_response(jsonify({'Response': 'OK'}), 201) else: commit_and_close(session) return make_response( jsonify({ 'Response': 'User is not the owner of trip or trip doesn\'t exist' }), 403)