Esempio n. 1
0
    def put(self, id):
        data = self.parser()
        with lock.lock:
            event = EventModel.find_by_id(id)

            if id and EventModel.find_by_id(id):
                event.delete_from_db()
                event = EventModel(data['name'], data['place'], data['city'],
                                   data['date'], data['price'],
                                   data['available_tickets'])
                event.save_to_db()
                return {'message': "Success, event added"}, 201
            else:
                return {'message': "Not found"}, 404
Esempio n. 2
0
    def post(self, id_event):
        event = EventModel.find_by_id(id_event)

        if event:

            parser = reqparse.RequestParser(
            )  # create parameters parser from request
            # define al input parameters need and its type
            parser.add_argument(n.NM,
                                type=str,
                                required=True,
                                help="Artistic name of the artist")
            parser.add_argument(n.CTRY,
                                type=str,
                                required=True,
                                help="Country nationality of the artist")
            parser.add_argument(n.GNR,
                                type=str,
                                required=True,
                                help="Main genre of the artist")
            data = parser.parse_args()

            with lock.lock:
                artist = ArtistModel.find_by_name(data[n.NM])

                if artist and artist.country == data[
                        n.CTRY] and artist.genre == data[n.GNR]:
                    event.artists.append(artist)
                    event.save_to_db()
                    return event.json(), 200
                else:
                    return {n.MSG: "Artist not found"}, 409

        else:
            return {n.MSG: "Event not found"}, 404
Esempio n. 3
0
 def get(self, id):
     with lock.lock:
         event = EventModel.find_by_id(id)
         if event:
             return {'event': event.json()}, 200
         else:
             return {"message": "Not found"}, 404
Esempio n. 4
0
    def post(cls, event_id: str):

        event: EventModel = EventModel.find_by_id(ObjectId(event_id))

        current_user_id = get_jwt_identity()

        for participant in event.participants:
            if str(current_user_id) == str(participant.user_id):
                if participant.role == Role.ADMIN:
                    song_ids = RecommendationAlgorithmSVD.run(event_id)
                    event.playlist = song_ids
                    event.save_to_db()

                    songs: List[SongModel] = SongModel.find_all_by_ids(
                        song_ids)
                    return {
                        "status": Status.SUCCESS,
                        "event": event.json_with_playlist(songs)
                    }, 200
                else:
                    return {
                        "status": Status.NO_ADMIN,
                        "message": "User is not an admin"
                    }, 403

        return {
            "status": Status.USER_NOT_FOUND,
            "message": "User is not event participant"
        }, 403
Esempio n. 5
0
    def put(self, id):
        data = Event.parser.parse_args()
        data.start_time = datetime.datetime.strptime(
            data.start_time, '%Y-%m-%d %H:%M:%S')
        data.end_time = datetime.datetime.strptime(
            data.end_time, '%Y-%m-%d %H:%M:%S')
        data.event_date = datetime.datetime.strptime(
            data.event_date, '%Y-%m-%d %H:%M:%S')

        event = EventModel.find_by_id(id)

        if event is None:
            event = EventModel(**data)
        else:
            event.name = data['name'] or event.name
            event.category = data['category'] or event.category
            event.location = data['location'] or event.location
            event.start_time = data['start_time'] or event.start_time
            event.end_time = data['end_time'] or event.end_time
            event.event_date = data['event_date'] or event.event_date
            event.owner = data['owner'] or event.owner
            event.status = data['status'] or event.status
            event.quota = data['quota'] or event.quota
            event.price = data['price'] or event.price

        event.save_to_db()
        return event.json()
Esempio n. 6
0
    def put(self, id):
        event = EventModel.find_by_id(id)
        if event:
            parser = reqparse.RequestParser(
            )  # create parameters parser from request
            # define al input parameters need and its type
            parser.add_argument(n.NM,
                                type=str,
                                required=True,
                                help="Name of the event")
            parser.add_argument(
                n.PLC,
                type=str,
                required=True,
                help="Place or area where the event takes place")
            parser.add_argument(n.CTY,
                                type=str,
                                required=True,
                                help="City that holds the event")
            parser.add_argument(n.DATE,
                                type=str,
                                required=True,
                                help="Date when the event takes place")
            parser.add_argument(n.PRC,
                                type=int,
                                required=True,
                                help="Weighted average price of the event")
            parser.add_argument(
                n.TAT,
                type=int,
                required=True,
                help="Number of people that can attend the event")
            data = parser.parse_args()

            with lock.lock:
                if data[n.PRC] < 0:
                    return {n.MSG: "Negative price not allowed"}, 400

                if data[n.TAT] < 0:
                    return {
                        n.MSG: "Negative number of tickets not possible"
                    }, 400

                aux_event = EventModel.find_by_uniqueness(
                    data[n.NM], data[n.DATE], data[n.CTY])
                if aux_event and aux_event.id != id:
                    return {
                        n.MSG: "Event already in the data base with another ID"
                    }, 409

                try:
                    event.modify_from_db(data[n.NM], data[n.PLC], data[n.CTY],
                                         data[n.DATE], data[n.PRC],
                                         data[n.TAT])
                    return event.json(), 200
                except:
                    return {n.MSG: "Error Description"}, 500

        else:
            return {n.MSG: "Event not found"}, 404
Esempio n. 7
0
 def get(cls, **kwargs):
     # Statistics for a specific event
     if 'event_id' in kwargs:
         event = EventModel.find_by_id(kwargs['event_id'])
         if not event:
             return {"message": "Event not found."}, 404
         else:
             return cls.build_event_response(event), 200
     # Statistics for a specific ticket type
     elif 'ticket_type' in kwargs:
         if not valid_ticket_type(kwargs['ticket_type']):
             return {
                 'message':
                 'That is not a valid ticket type. '
                 'Please choose between {}, {} or {}.'.format(*ticket_types)
             }, 400
         kwargs['ticket_type'] = convert_ticket_type(kwargs['ticket_type'])
         return cls.build_ticket_response(kwargs['ticket_type'])
     else:
         # Statistics for every event in the database
         response = {'events': []}
         for event in EventModel.query.all():
             response['events'].append({
                 event.name: {
                     'id': event.id,
                     **cls.build_event_response(event)
                 }
             })
         return response
Esempio n. 8
0
 def post(self, **kwargs):
     reservation_json = request.get_json()
     if 'reservation_id' not in kwargs:
         if not valid_ticket_type(reservation_json['ticket_type']):
             return {
                 'message':
                 'That is not a valid ticket type. '
                 'Please choose between {}, {} or {}.'.format(*ticket_types)
             }, 400
         reservation_json['ticket_type'] = convert_ticket_type(
             reservation_json['ticket_type'])
         user_id = get_jwt_identity()
         reservation_json['user_id'] = user_id
         event = EventModel.find_by_id(reservation_json['event_id'])
         if event:
             if not event.check_availability(
                     reservation_json['ticket_type']):
                 return {
                     'message':
                     'We are sorry to inform that {} '
                     'tickets are sold out.'.format(
                         reservation_json['ticket_type'])
                 }, 200
         else:
             return {'message': 'That is not a valid event'}, 404
         if not validate_request(reservation_json, ReservationModel):
             return {
                 'message':
                 'Request invalid, please re-check your parameters.'
             }, 400
         # Unpack the request into a new reservation model
         reservation = ReservationModel(**reservation_json)
         # It is needed to remove one available ticket, since now it is reserved
         reservation.update_event()
         reservation.save_to_db()
         scheduler.add_job(reservation.update_ticket_amount,
                           'date',
                           id=reservation.id,
                           run_date=reservation.expire_at)
         return {"message": "Your reservation was successful."}, 201
     else:
         # Here the user is trying to pay for a reservation, since an ID was passed in the request
         reservation_json['reservation_id'] = kwargs['reservation_id']
         reservation = ReservationModel.find_by_id(kwargs['reservation_id'])
         if reservation:
             if reservation.expired:
                 return {
                     'message':
                     'Sorry, that reservation is already expired. Please make a new reservation and '
                     'pay after.'
                 }, 400
             reservation_json['reservation'] = reservation
             # Popping keys from the dictionary, since this dict will be passed on later to our payment gateway
             reservation_json.pop('reservation_id', None)
             return self.pay(**reservation_json)
         else:
             return {
                 "message": "That reservation was not found on the system."
             }, 404
Esempio n. 9
0
 def put(self, query):
     event = EventModel.find_by_id(query)
     if event:
         event = self.update_event(event)
     else:
         event = self.parse_to_new_event(query)
     event.save_to_db()
     return event.json()
Esempio n. 10
0
    def delete(self, event_id):
        event = EventModel.find_by_id(event_id)

        if event:
            event.delete_from_db()
            return {'message': 'Event deleted!'}, 200

        return {'message': 'Event with that ID not found.'}, 404
Esempio n. 11
0
 def delete(self, id):
     with lock.lock:
         event = EventModel.find_by_id(id)
         if event:
             event.delete_from_db()
             return {'message': 'Event deleted'}, 200
         else:
             return {'message': "Event not found"}, 404
Esempio n. 12
0
 def delete(self, id):
     with lock.lock:
         event = EventModel.find_by_id(id)
         if event:
             event.delete_from_db()
             return {n.MSG: "Event deleted successfully"}, 200
         else:
             return {n.MSG: "Event not found"}, 404
Esempio n. 13
0
    def get(self):
        dic = {}
        date = request.args.get('date')
        if date:
            dic["date"] = date.split(',')
        adv_origin = request.args.get('adv_origin')
        if adv_origin:
            dic["adv_origin"] = adv_origin.split(',')
        adv_organization = request.args.get('adv_organization')
        if adv_organization:
            dic["adv_organization"] = adv_organization.split(',')
        adv_camp = request.args.get('adv_camp')
        if adv_camp:
            dic["adv_camp"] = adv_camp.split(',')
        target_sector = request.args.get('target_sector')
        if target_sector:
            dic["target_sector"] = target_sector.split(',')
        target_name = request.args.get('target_name')
        if target_name:
            dic["target_name"] = target_name.split(',')
        target_origin = request.args.get('target_origin')
        if target_origin:
            dic["target_origin"] = target_origin.split(',')
        reference = request.args.get('reference')
        if reference:
            dic["reference"] = reference.split(',')
        status = request.args.get('status')
        if status:
            dic["status"] = status.split(',')
        details = request.args.get('details')
        if details:
            dic["details"] = details.split(',')
        type = request.args.get('type')
        if type:
            dic["type"] = type.split(',')
        reporter = request.args.get('reporter')
        if reporter:
            dic["reporter"] = reporter.split(',')

        query = "SELECT * FROM data.Events WHERE "
        for k, v in dic.items():
            if len(v) == 1:
                query += f"{k} = '{v[0]}' AND "
            else:
                query += '('
                for value in v:
                    query += f"{k} = '{value}' OR "
                query = query[:-4]
                query += ") AND "
        query = query[:-5]

        sql_query = text(query)
        result = db.engine.execute(sql_query)
        events = [EventModel.find_by_id(row[0]).json() for row in result]
        headers = {'content-type': 'text/html'}

        return make_response(render_template("events.html", events=events),
                             200, headers)
    def delete(self, id):
        event = EventModel.find_by_id(id)
        if event:
            if event.owner == get_jwt_identity():
                event.delete_from_db()
            else:
                return {'message': 'Non autorizzato'}, 403

        return {'message': 'Event deleted'}
Esempio n. 15
0
 def json(self):
     event = EventModel.find_by_id(self.id_event)
     return {
         "Id": self.id_event,
         "Username": self.username,
         "Event_name": event.name,
         "Event_date": event.date,
         "Event_city": event.city,
         "Tickets_bought": self.tickets_bought
     }
Esempio n. 16
0
    def get(self, id):
        try:
            event = EventModel.find_by_id(id)
        except:
            return {'message': 'An error occured searching the event'}, 500

        if event:
            return event.json()

        return {'message': 'Event not found'}, 404  # not-found
Esempio n. 17
0
 def get(self, id):
     with lock.lock:
         event = EventModel.find_by_id(id)
         if event:
             artists = event.artists
             return {
                 'artists': list(map(lambda x: x.json(), artists))
             }, 200 if artists else 404
         else:
             return {'message': "Event not found"}, 404
Esempio n. 18
0
    def json(self):
        event = EventModel.find_by_id(self.event_id)

        return {
            'id': self.id,
            'price': self.price,
            'quantity': self.quantity,
            'seat_num': self.seat_num,
            'event': event.json(),
            'order_id': self.order_id
        }
Esempio n. 19
0
    def delete(self, id_event, id_artist):
        with lock.lock:
            event = EventModel.find_by_id(id_event)
            artist = ArtistModel.query.join(
                ArtistModel.events).filter(EventModel.id == id_event).filter(
                    ArtistModel.id == id_artist).first()

            if artist:
                event.artists.remove(artist)
                return {n.MSG: "Artist deleted successfully"}, 200
            else:
                return {n.MSG: "Artist or event not found"}, 404
Esempio n. 20
0
 def get(cls, **kwargs):
     if '_id' in kwargs:
         # get occurrence by id
         event = EventModel.find_by_id(kwargs['_id'])
         if event:
             return event_schema.dump(event), 200
         else:
             return {"message": "Event not found."}, 404
     else:
         event = EventModel.find_by_name(kwargs['name'])
         if event:
             return event_schema.dump(event), 200
         else:
             return {"message": "Event not found."}, 404
Esempio n. 21
0
    def json(self):

        event = EventModel.find_by_id(self.id_event).json()[n.EVNT]

        return {
            n.ORDR: {
                n.ID: self.id,
                n.USR: self.username,
                n.EVNTNM: event[n.NM],
                n.EVNTDT: event[n.DATE],
                n.EVNTCTY: event[n.CTY],
                n.TCK: self.tickets_bought,
            }
        }
Esempio n. 22
0
    def get(cls, event_id: str):
        if not ObjectId.is_valid(event_id):
            return {"status": Status.INVALID_FORMAT, "message": "Id is not valid ObjectId"}, 400

        event: EventModel = EventModel.find_by_id(ObjectId(event_id))
        if not event:
            return {"status": Status.NOT_FOUND, "message": "Event not found."}, 404

        participants_id = list(map(lambda participant: participant.user_id, event.participants))
        users: List[UserModel] = UserModel.find_all_by_ids(participants_id)

        songs: List[SongModel] = SongModel.find_all_by_ids(event.playlist)

        return {"status": Status.SUCCESS, "event": event.json_with_playlist(songs, users)}, 200
Esempio n. 23
0
 def get(self, id_event, id_artist):
     with lock.lock:
         event = EventModel.find_by_id(id_event)
         if event:
             artist = next(
                 filter(lambda x: str(x.id) == str(id_artist),
                        event.artists), None)
             if artist:
                 return {'artist': artist.json()}, 200 if artist else 404
             else:
                 return {
                     'message':
                     "Artist with id [{}] not found".format(id_artist)
                 }, 404
         else:
             return {
                 'message': "Event with id [{}] not found".format(id_event)
             }, 404
Esempio n. 24
0
    def delete(self, id_event, id_artist):
        with lock.lock:
            event = EventModel.find_by_id(id_event)
            if event:
                for a in event.artists:
                    print("a.id : {}, id_artist: {}, a.id == id_artist: {}".
                          format(a.id, id_artist, a.id == id_artist))
                    print("artist {}".format(type(id_artist)))
                    print("a {}".format(type(a.id)))
                    if a.id == id_artist:
                        event.artists.remove(a)
                        event.save_to_db()
                        return {'message': "Success"}, 200

                return {
                    'message': "Artist with id {} not found".format(id_artist)
                }, 404
            else:
                return {'message': "Event not found"}, 404
    def put(self, id):
        data = self.parser.parse_args()

        event = EventModel.find_by_id(id)
        if event:
            try:
                event.update(data.name, data.startdate, data.enddate, data.org,
                             data.place, get_jwt_identity())
            except:
                return {"message": "Non autorizzato"}, 403
        else:
            event = EventModel(data.name, data.startdate, data.enddate,
                               data.org, data.place, get_jwt_identity())
        try:
            event.save_to_db()
        except:
            return {"message": "An error occurred creating the event."}, 500

        return event.json(), 201
Esempio n. 26
0
    def post(self, id=None):
        data = self.parser()
        with lock.lock:
            if id and EventModel.find_by_id(id):
                return {
                    'message': "Event with id [{}] already exists".format(id)
                }, 404
            else:
                event = EventModel(data['name'], data['place'], data['city'],
                                   data['date'], data['price'],
                                   data['available_tickets'])
                print(event)
                try:
                    event.save_to_db()
                except Exception as e:
                    print(e)
                    return {"message": 'error'}, 500

                return event.json(), 201
Esempio n. 27
0
    def put(self, event_id):
        data = Event.parser.parse_args()

        event = EventModel.find_by_id(event_id)

        if event is None:
            event = EventModel(data['name'], data['description'],
                               data['location'], data['date_time'],
                               data['is_private'], group_id)
        else:
            event.name = data['name']
            event.description = data['description']
            event.location = data['location']
            event.date_time = datetime.strptime(data['date_time'],
                                                '%Y/%m/%d %H:%M')
            event.is_private = data['is_private']

        event.save_to_db()

        return event.json(), 200
Esempio n. 28
0
    def post(self, id_event, id_artist=None):
        with lock.lock:
            data = self.parser()
            artist = ArtistModel.find_by_id(
                id_artist) if id_artist else ArtistModel.find_by_name(
                    data['name'])
            event = EventModel.find_by_id(id_event)
            if not event:
                return {
                    'message': "Event with id [{}] not found".format(id_event)
                }, 404
            else:
                if not artist:
                    artist = ArtistModel(data['name'], data['country'],
                                         data['genre'])
                    artist.save_to_db()
                try:
                    event.artists.append(artist)
                    event.save_to_db()
                except:
                    return {"message": "Error Description"}, 500

                return {"message": "Success"}, 201
Esempio n. 29
0
    def post(self, username):
        user = AccountsModel.find_by_username(username)
        if user:
            parser = reqparse.RequestParser()
            parser.add_argument(n.IDEVNT, type=int, required=True, help="Id of the event")
            parser.add_argument(n.TCK, type=int, required=True, help="Number of tickets the user wants to buy")
            data = parser.parse_args()

            with lock.lock:
                if username == g.user.username:
                    event = EventModel.find_by_id(data[n.IDEVNT])
                    if event:
                        price = event.price*data[n.TCK]
                        if user.available_money >= price:
                            if event.total_available_tickets >= data[n.TCK]:
                                try:
                                    user.pay(price)
                                    event.sell(data[n.TCK])
                                    new_order = OrdersModel(data[n.IDEVNT], data[n.TCK])
                                    user.orders.append(new_order)
                                    new_order.save_to_db()
                                    user.save_to_db()
                                    event.save_to_db()
                                    return new_order.json(), 201
                                except:
                                    return {n.MSG: "Error Description"}, 500
                            else:
                                return {n.MSG: "The event does not have enough available ticket"}, 400
                        else:
                            return {n.MSG: "The user does not have enough money"}, 400
                    else:
                        return {n.MSG: "Event not found"}, 404
                else:
                    return {n.MSG: "Username error"}, 400
        else:
            return {n.MSG: "Username not found"}, 404
Esempio n. 30
0
 def post(self, username):
     data = self.parser()
     with lock.lock:
         if username == g.user.username:
             a = AccountsModel.find_by_username(username)
             e = EventModel.find_by_id(data['event_id'])
             if e.total_available_tickets >= data["tickets_bought"]:
                 if a.available_money >= e.price * data["tickets_bought"]:
                     e.total_available_tickets = EventModel.total_available_tickets - data[
                         "tickets_bought"]
                     a.available_money -= data["tickets_bought"] * e.price
                     o = OrdersModel(e.id, data["tickets_bought"])
                     a.orders.append(o)
                     db.session.commit()
                     return {"order": o.json()}, 201
                 else:
                     return {'message': 'Not enough money'}, 501
             else:
                 return {'message': 'No enough tickets'}, 502
         else:
             return {
                 'message':
                 'Endpoint username and g.user.username not equal'
             }, 400