コード例 #1
0
class TimeAudit(object):
    @declared_attr
    def __tablename__(cls):
        return cls.__name__.lower()

    created_at = db.Column(db.TIMESTAMP(timezone=True),
                           nullable=False,
                           default=db.func.now())
    updated_at = db.Column(db.TIMESTAMP(timezone=True),
                           nullable=False,
                           default=db.func.now(),
                           onupdate=db.func.now())
コード例 #2
0
class LastLocationPostGis(db.Model):
    """Simple database model to track the last location of an active user."""

    __tablename__ = 'last_location_post_gis'
    user_id = db.Column(db.Integer, primary_key=True)
    latest_point = db.Column(Geography(geometry_type='POINT', srid=4326),
                             nullable=True)
    last_modified = db.Column(db.TIMESTAMP(120),
                              nullable=True,
                              default=dt.datetime.utcnow())
    active = db.Column(db.BOOLEAN(120), nullable=False)
    #   define relationships with other tables
    person_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __init__(self, point=None, person_id=None):
        self.latest_point = point
        self.last_modified = dt.datetime.utcnow()
        self.active = True
        self.person_id = person_id
        self.user_id = person_id

    def serialize(self):
        return {
            'user_id': self.user_id,
            'latest_point_lat': str(to_shape(self.latest_point).y),
            'latest_point_lng': str(to_shape(self.latest_point).x),
            'last_modified': self.last_modified,
            'active': self.active,
            'person_id': self.person_id,
        }
コード例 #3
0
ファイル: user.py プロジェクト: mlafaive/GeoAdvertising
class User(db.Model):
    email = db.Column(db.String(50), primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    password = db.Column(db.String, nullable=False)
    last_offer_time = db.Column(db.TIMESTAMP(timezone=True), nullable=True)
    businesses = db.relationship('Business',
                                 backref='manager',
                                 lazy=True,
                                 cascade='all, delete-orphan')
    interests = db.relationship('Interest',
                                secondary=user_interest,
                                lazy='subquery',
                                backref=db.backref('users', lazy=True))

    def __init__(self,
                 email,
                 name,
                 password,
                 businesses=[],
                 interests=[],
                 last_offer_time=datetime.datetime.now(datetime.timezone.utc)):
        self.email = email
        self.name = name
        self.password = password
        self.last_offer_time = last_offer_time
        self.businesses = businesses
        self.interests = interests

    def __repr__(self):
        return "<email='%s', name='%s', password='******', last_offer_time=%r, businesses=%r, interests=%r>" % \
              (self.email, self.name, self.password, self.last_offer_time, [b.id for b in self.businesses], [i.name for i in self.interests])

    @property
    def serialize(self):
        """Return object data in easily serializeable format"""
        return {
            'email': self.email,
            'name': self.name,
            'last_offer_time': self.last_offer_time.isoformat(),
            'interests': [i.serialize for i in self.interests],
        }
コード例 #4
0
class Feedback(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(150), nullable=False)
    email = db.Column(db.String(150), nullable=False)
    subject = db.Column(db.String(150), nullable=False)
    message = db.Column(db.String(1000), nullable=False)
    received_at = db.Column(db.TIMESTAMP(120), nullable=False,
                              default=dt.datetime.utcnow())
    # person_id = db.Column(db.String(20), nullable=False)

    def to_dict(self):
        return {
            'id': self.id,
            'name': self.name,
            'email': self.email,
            'subject': self.subject,
            'message': self.message,
            'received_at': self.received_at,
        }

    def __init__(self, name=None,
                 email=None,
                 subject=None,
                 message=None):
        self.name = name
        self.email = email
        self.subject = subject
        self.message = message
        self.received_at = dt.datetime.utcnow()

    def serialize(self):
        return {
                    'id': self.id,
                    'name': self.name,
                    'email': self.email,
                    'subject': self.subject,
                    'message': self.message,
                    'received_at': self.received_at,
                }
コード例 #5
0
class InteractedUsers(db.Model):
    __tablename__ = 'interacted_users'
    id = db.Column(db.Integer,
                   primary_key=True)
    interacted_id = db.Column(db.Integer)
    at_location = db.Column(Geography(geometry_type='POINT',
                                      srid=4326),
                            nullable=True)
    at_time = db.Column(db.TIMESTAMP(120), nullable=True,
                        default=dt.datetime.utcnow())

#   define relationships with other tables
    person_id = db.Column(db.Integer,
                          db.ForeignKey('user.id'),
                          nullable=False)
    db.UniqueConstraint('interacted_id', 'person_id',
                        'person_interaction'),

    def __init__(self, point=None,
                 person_id=None,
                 interacted_id=None):
        self.at_location = point
        # default
        self.at_time = dt.datetime.utcnow()
        # person id is the current user id
        self.person_id = person_id
        # we will get this from post api call
        self.interacted_id = interacted_id

    def serialize(self):
        return {
                    'id': self.id,
                    'interacted_id': self.interacted_id,
                    'at_location_lat': str(to_shape(self.at_location).y),
                    'at_location_lon': str(to_shape(self.at_location).x),
                    'at_time': self.at_time,
                    'person_id': self.person_id,
                }
コード例 #6
0
ファイル: offer.py プロジェクト: mlafaive/GeoAdvertising
class Offer(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    start_time = db.Column(db.TIMESTAMP(timezone=True), nullable=False)
    end_time = db.Column(db.TIMESTAMP(timezone=True), nullable=False)
    description = db.Column(db.String(100), nullable=False)

    # Direct access to corresponding offer(offer) using Business
    business_id = db.Column(db.Integer,
                            db.ForeignKey('business.id'),
                            nullable=False)

    interests = db.relationship('Interest',
                                secondary=offer_interest,
                                lazy='subquery',
                                backref=db.backref('offers', lazy=True))
    users_accepted = db.relationship('User',
                                     secondary=user_accepted_offer,
                                     lazy='subquery',
                                     backref=db.backref('offers_accepted',
                                                        lazy=True))
    users_viewed = db.relationship('User',
                                   secondary=user_viewed_offer,
                                   lazy='subquery',
                                   backref=db.backref('offers_viewed',
                                                      lazy=True))

    __table_args__ = (db.UniqueConstraint(
        'description', 'business_id', name='_offer_description_business_uc'), )

    def __init__(self,
                 business_id,
                 start_time,
                 end_time,
                 description,
                 interests=[],
                 users_accepted=[],
                 users_viewed=[]):
        self.business_id = business_id
        self.start_time = start_time
        self.end_time = end_time
        self.description = description
        self.interests = interests
        self.users_accepted = users_accepted
        self.users_viewed = users_viewed

    def __repr__(self):
        return "<business_id=%d, start_time=%r, end_time=%r, description='%s', interests=%r, users_accepted=%d, users_viewed=%d>" % \
          (self.business_id, self.start_time, self.end_time, self.description, [i.name for i in self.interests], len(self.users_accepted), len(self.users_viewed))

    @property
    def serialize(self):
        """Return object data in easily serializeable format"""
        return {
            'id': self.id,
            'business': {
                'id': self.business.id,
                'name': self.business.name
            },
            'start_time': self.start_time.isoformat(),
            'end_time': self.end_time.isoformat(),
            'description': self.description,
            'interests': [i.serialize for i in self.interests],
            'accepts': len(self.users_accepted),
            'views': len(self.users_viewed),
        }