예제 #1
0
class User(UserJsonSerializer, db.Model, UserMixin):
    """User model"""
    # __searchable__ = ['email']
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean())
    confirmed_at = db.Column(db.DateTime())
    last_login_at = db.Column(db.DateTime())
    current_login_at = db.Column(db.DateTime())
    last_login_ip = db.Column(db.String(100))
    current_login_ip = db.Column(db.String(100))
    login_count = db.Column(db.Integer)
    roles = db.relationship('Role',
                            secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic'))
    connections = db.relationship('Connection',
                                  lazy='dynamic',
                                  backref=db.backref('user'),
                                  cascade="all")
    following = db.relationship('User',
                                secondary=followers,
                                primaryjoin=(followers.c.follower_id == id),
                                secondaryjoin=(followers.c.following_id == id),
                                backref=db.backref('followers',
                                                   lazy='dynamic'),
                                lazy='dynamic')
예제 #2
0
class Job(BaseModel, HasUID, HasCreator, HasBloc):
    __tablename__ = 'jobs'

    title = db.Column(db.String(128))
    location = db.Column(db.String(128))
    description = db.Column(db.TEXT)
    thumbnail = db.Column(db.TEXT)
    min_salary = db.Column(AMOUNT_FIELD)
    max_salary = db.Column(AMOUNT_FIELD)
    salary_currency = db.Column(db.String(3))
    salary_interval = db.Column(db.String(128))
    duration = db.Column(
        db.Enum('SHORT TERM', 'FULL-TIME', 'PART-TIME', name='job_durations'))

    def as_json(self):
        return {
            'title': self.title,
            'location': self.location,
            'description': self.description,
            'min_salary': self.min_salary,
            'max_salary': self.max_salary,
            'salary_interval': self.salary_interval,
            'duration': self.duration,
            'currency': self.currency
        }
예제 #3
0
class Project(BaseModel, HasUID, HasBloc, HasCreator):
    __tablename__ = 'projects'

    title = db.Column(db.String(64))
    description = db.Column(db.TEXT)
    thumbnail = db.Column(db.TEXT)
    weblink = db.Column(db.String(256))

    @property
    def likes_count(self):
        return ProjectLike.query.filter_by(project_id=self.id).count()

    @property
    def views_count(self):
        return ProjectView.query.filter_by(project_id=self.id).count()
예제 #4
0
class PollItem(PollItemJsonSerializer, db.Model):
    """PollItem model
    """
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255), nullable=False)
    poll_id = db.Column(db.Integer, db.ForeignKey('poll.id'), nullable=False)
    description = db.Column(db.Text)
예제 #5
0
class Bloc(BaseModel, HasUID, LookUp, HasStatus):
    __tablename__ = 'blocs'

    created_by = db.Column(db.Integer, db.ForeignKey('users.id'))
    location_id = db.Column(db.Integer, db.ForeignKey('locations.id'))

    is_private = db.Column(db.Boolean, default=False)
    is_default = db.Column(db.Boolean, default=True)
    invite_code = db.Column(db.String(6))
    theme_color = db.Column(db.String(8), default=generate_random_bloc_color)

    location = db.relationship('Location', backref=db.backref('blocs'))

    @property
    def latest_feeds(self):
        bloc_feeds = BlocFeed.query.filter_by(bloc_id=self.id).order_by(
            BlocFeed.id.desc()).limit(PAGINATE_DEFAULT_PER_PAGE).all()

        print("latest feeds: %s" % bloc_feeds)

        return [bloc_feed.feed for bloc_feed in bloc_feeds]

    @property
    def events(self):
        bloc_events = Event.query.filter_by(bloc_id=self.id).order_by(
            Event.id.desc()).limit(PAGINATE_DEFAULT_PER_PAGE).all()

        return bloc_events

    def generate_invite_code(self):
        raise NotImplementedError

    def set_invite_code(self, _code=None):
        if _code is not None:
            _code = self.generate_invite_code()

        self.invite_code = _code

    def as_json(self):
        return {
            'name': self.name,
            'theme_color': self.theme_color,
            'invite_code': self.invite_code,
            'is_private': self.is_private,
            'is_default': self.is_default,
            'creator': self.created_by
        }
예제 #6
0
class Poll(PollJsonSerializer, db.Model):
    """Poll model
    """
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255), nullable=False)
    status = db.Column(db.SmallInteger, default=0)
    created_at = db.Column(db.DateTime, default=datetime.datetime.now)
    completed_at = db.Column(db.DateTime)
예제 #7
0
class JobApplication(BaseModel, HasUID, HasCreator, HasBloc):
    __tablename__ = 'job_applications'

    cv = db.Column(db.String(1024))
    job_id = db.Column(db.Integer, db.ForeignKey('jobs.id'))

    job = db.relationship('Job',
                          backref=db.backref('job_applications', uselist=True),
                          uselist=False)
예제 #8
0
class Conversation(BaseModel):
    __tablename__ = 'conversations'

    expecting_response_for = db.Column(db.String(128))

    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))

    user = db.relationship('User',
                           backref=db.backref('conversations', uselist=True),
                           lazy='joined')
예제 #9
0
class Connection(db.Model):
    """Connection model"""
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    provider_id = db.Column(db.String(255))
    provider_user_id = db.Column(db.String(255))
    access_token = db.Column(db.String(255))
    secret = db.Column(db.String(255))
    full_name = db.Column(db.String(255))
    display_name = db.Column(db.String(255))
    profile_url = db.Column(db.String(512))
    image_url = db.Column(db.String(512))
    rank = db.Column(db.Integer)
예제 #10
0
class Event(BaseModel, HasUID, HasBloc, HasCreator):
    __tablename__ = 'events'

    bloc_id = db.Column(db.Integer, db.ForeignKey('blocs.id'))
    title = db.Column(db.String(128))
    description = db.Column(db.TEXT)
    thumbnail = db.Column(db.TEXT)
    venue = db.Column(db.String(64))
    datetime = db.Column(db.DateTime)

    bloc = db.relationship('Bloc',
                           backref=db.backref('events', uselist=True),
                           uselist=False)

    def as_json(self):
        return {
            'id': self.id,
            'title': self.title,
            'description': self.description,
            'venue': self.venue,
            'datetime': self.datetime.isoformat(),
            # 'thumbnail': self.thumbnail
        }

    @property
    def interest_count(self):
        return EventInterest.query.filter_by(
            event_id=self.id,
            # status_id=None, STATUSES.index('active'))
        ).count()

    @property
    def user_is_interested(self):
        return bool(
            EventInterest.query.filter_by(event_id=self.id,
                                          user_id=g.user.id).count())

    @property
    def humane_date(self):
        return str(self.created_at.date)
예제 #11
0
class Location(BaseModel):
    __tablename__ = 'locations'

    title = db.Column(db.String(128))
    coordinates = db.Column(db.String(50))
    address = db.Column(db.String(128))
    country = db.Column(db.String(32))
    state = db.Column(db.String(32))
    town = db.Column(db.String(32))

    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))

    user = db.relationship('User',
                           backref=db.backref('locations', uselist=True),
                           uselist=False)

    def as_json(self):
        return {
            'title': self.title,
            'address': self.address,
            'country': self.country,
            'state': self.state,
            'town': self.town,
            'coordinates': self.coordinates
        }
예제 #12
0
class User(db.Model):
	__tablename__ = 'users'
	uid = db.Column(db.Integer, primary_key = True)
	firstname = db.Column(db.String(100))
	lastname = db.Column(db.String(100))
	email = db.Column(db.String(120), unique=True)
	pwdhash = db.Column(db.String(54))

	def __init__(self, firstname, lastname, email, password):
		self.firstname = firstname.title()
		self.lastname = lastname.title()
		self.email = email.lower()
		self.set_password(password)
	 
	def set_password(self, password):
		self.pwdhash = generate_password_hash(password)

	def check_password(self, password):
		return check_password_hash(self.pwdhash, password)

	def __repr__(self):
		return '<User %r>' % self.email
예제 #13
0
class Course(BaseModel, HasUID, HasBloc, HasCreator):
    __tablename__ = 'courses'

    title = db.Column(db.String(128))
    description = db.Column(db.TEXT)
    bloc_id = db.Column(db.Integer, db.ForeignKey('blocs.id'))
    created_by_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    start_date = db.Column(db.Date)
    end_date = db.Column(db.Date)
    time = db.Column(db.String(6))
    days_of_week = db.Column(db.TEXT)
    timezone = db.String(6)
    thumbnail = db.Column(db.TEXT)

    source_category = db.Column(
        db.Enum('SOCIAL MEDIA',
                'ONLINE SCHOOL',
                name='course_source_categories'))
    source = db.Column(db.Enum('FACEBOOK', 'UDACITY', name='course_sources'))

    created_by = db.relationship('User',
                                 backref=db.backref('courses', uselist=True))

    bloc = db.relationship('Bloc', backref=db.backref('courses'))

    @property
    def ratings_(self):
        return {
            'count': CourseRating.prep_query_for_active().count(),
            'average': 4.2
        }

    def as_json(self):
        return {
            'title': self.title,
            'description': self.description,
            'created_by': self.created_by.as_json()
        }
예제 #14
0
class Feed(BaseModel, HasUID):
    __tablename__ = 'feeds'

    created_by_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    external_app_uid = db.Column(db.String(64))
    created_at = db.Column(db.DateTime, default=datetime.now)
    message = db.Column(db.TEXT)

    created_by = db.relationship('User',
                                 backref=db.backref('user_feeds',
                                                    uselist=True))

    @property
    def likes_count(self):
        return FeedLike.prep_query_for_active(feed_id=self.id).count()

    @property
    def comments_count(self):
        return FeedComment.prep_query_for_active(feed_id=self.id).count()
예제 #15
0
class BaseModel(db.Model):
    __abstract__ = True

    id = db.Column(db.Integer, primary_key=True)

    created_at = db.Column(db.DateTime, default=datetime.now)
    uid = db.Column(db.String(64))

    def save(self):
        self.uid = shortuuid.uuid()
        db.session.add(self)
        db.session.commit()

    def update(self, **kwargs):
        for k, v in kwargs.items():
            setattr(self, k, v)

        db.session.commit()

    @classmethod
    def get(cls, **kwargs):
        return cls.query.filter_by(**kwargs).first()

    @classmethod
    def query_for_active(cls, _desc=False, **kwargs):
        query = cls.query.filter_by(status_id=STATUSES.index('active') + 1,
                                    **kwargs)

        if _desc:
            query.order_by(cls.id.desc())

        return query.all()

    @classmethod
    def prep_query_for_active(cls, _desc=False, **kwargs):
        query = cls.query.filter_by(status_id=STATUSES.index('active') + 1,
                                    **kwargs)

        if _desc:
            query.order_by(cls.id.desc())

        return query
예제 #16
0
class Post(BaseModel, HasUID, HasBloc, HasCreator):
    __tablename__ = 'posts'

    title = db.Column(db.String(64))
    body = db.Column(db.TEXT)
예제 #17
0
class AddressBase(object):
    recipient_name = db.Column(db.String(90))
    phone_number = db.Column(db.String(45))
    zip = db.Column(db.String(45))
    address_line1 = db.Column(db.String(255))
    address_line2 = db.Column(db.String(255))
예제 #18
0
class LookUp(object):
    name = db.Column(db.String(64), unique=True)
    description = db.Column(db.String(128))
예제 #19
0
 def uid(cls):
     return db.Column(db.String(64), default=shortuuid.uuid)
예제 #20
0
class User(BaseModel, HasUID, HasStatus):
    __tablename__ = 'users'

    username = db.Column(db.String(64))
    first_name = db.Column(db.String(64))
    last_name = db.Column(db.String(64))
    external_app_uid = db.Column(db.String(64))
    avatar_url = db.Column(db.TEXT)
    bio = db.Column(db.String(128))

    access_token = db.Column(db.TEXT)
    access_token_secret = db.Column(db.TEXT)

    blocs_platform_id = db.Column(db.Integer,
                                  db.ForeignKey('blocs_platforms.id'))

    @property
    def events_count(self):
        return Event.query.filter_by(created_by_id=self.id).count()

    @property
    def clean_avatar_url(self):
        return self.avatar_url.replace('\\', '')

    @property
    def location(self):
        return self.locations[-1]

    @property
    def blocs(self):
        all_users_blocs = []

        for membership in self.bloc_memberships:
            all_users_blocs.append(membership.bloc)

        return all_users_blocs

    @property
    def has_bloc(self):
        return bool(self.bloc_memberships)

    @property
    def event_interests_count(self):
        return EventInterest.query.filter_by(user_id=self.id).count()

    def as_json(self):
        return {
            'first_name':
            self.first_name,
            'last_name':
            self.last_name,
            'id':
            self.id,
            'external_app_uid':
            self.external_app_uid,
            'access_token':
            self.access_token,
            'username':
            self.username,
            'bio':
            self.bio,
            # 'location': self.location,
            'avatar_url':
            self.clean_avatar_url,
            'profile_link':
            'https://web.facebook.com/{}'.format(self.external_app_uid)
        }
예제 #21
0
class School(BaseModel, HasUID):
    __tablename__ = 'schools'

    name = db.Column(db.String(64))
예제 #22
0
class Tag(TagJsonSerializer, db.Model):
    """Tag model"""
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), nullable=False)
예제 #23
0
class Role(RoleJsonSerializer, db.Model, RoleMixin):
    """Role model"""
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)
    description = db.Column(db.String(255), default='')