def add_event(): """Add an event to the database Events are proposed meetings. A date has a specific AG which it is part of. :return: JSON object with redirect if successful or Unauthorized/NotFound """ ag_id = request.values.get('ag') if db.session.query(exists().where(AG.id == ag_id)).scalar(): if db.session.query(exists().where(UserAG.user_id == g.session.user_id and\ UserAG.ag_id == ag_id)).scalar(): user_ag = UserAG.query.filter_by(user_id=g.session.user_id, ag_id=ag_id).scalar() if user_ag.role == 'MENTOR': display_name = request.values.get('display_name') description = request.values.get('description') if not display_name or len(display_name) > 48: return jsonify({'reason': 'display_name'}), 400 if len(description) > 280: return jsonify({'reason': 'description'}), 400 event = Event() event.display_name = display_name event.description = description event.ag_id = ag_id event.date = None db.session.add(event) dates = request.values.getlist('dates[]') for _date in dates: formatted_datetime = datetime.datetime.strptime( _date, '%a %b %d %Y').date() if db.session.query(exists().where( Date.day == formatted_datetime)).scalar(): u_date = Date.query.filter_by( day=formatted_datetime).scalar() u_date.users.append(g.user) u_date.events.append(event) continue else: date_obj: Date = Date() date_obj.users.append(g.user) date_obj.events.append(event) date_obj.day = formatted_datetime db.session.add(date_obj) db.session.commit() return jsonify({'status': 'success', 'redirect': '/'}), 200 return Unauthorized() return NotFound()