db: Add in beginnings of model.
This commit is contained in:
parent
48e7ec74c5
commit
4009de4329
0
hadsh/db/__init__.py
Normal file
0
hadsh/db/__init__.py
Normal file
115
hadsh/db/model.py
Normal file
115
hadsh/db/model.py
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
from sqlalchemy import Column, BigInteger, String, ForeignKey, \
|
||||||
|
Boolean, LargeBinary, Text
|
||||||
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
|
|
||||||
|
Base = declarative_base()
|
||||||
|
|
||||||
|
class User(Base):
|
||||||
|
"""
|
||||||
|
All recognised Hackaday.io users, including legitmate ones.
|
||||||
|
"""
|
||||||
|
|
||||||
|
__tablename__ = 'user'
|
||||||
|
|
||||||
|
user_id = Column(BigInteger, primary_key=True)
|
||||||
|
screen_name = Column(String)
|
||||||
|
url = Column(String)
|
||||||
|
avatar_id = Column(BigInteger, ForeignKey('avatar.avatar_id'))
|
||||||
|
last_update = Column(DateTime(timezone=True))
|
||||||
|
|
||||||
|
|
||||||
|
class Group(Base):
|
||||||
|
"""
|
||||||
|
Groups used for classifying users.
|
||||||
|
"""
|
||||||
|
|
||||||
|
__tablename__ = 'group'
|
||||||
|
|
||||||
|
group_id = Column(BigInteger, primary_key=True)
|
||||||
|
name = Column(String, unique=True)
|
||||||
|
|
||||||
|
|
||||||
|
class GroupMember(Base):
|
||||||
|
"""
|
||||||
|
Group membership links.
|
||||||
|
"""
|
||||||
|
__tablename__ = 'group_member'
|
||||||
|
|
||||||
|
group_id = Column(BigInteger, ForeignKey('group.group_id'),
|
||||||
|
primary_key=True, index=True)
|
||||||
|
user_id = Column(BigInteger, ForeignKey('user.user_id'),
|
||||||
|
primary_key=True, index=True)
|
||||||
|
|
||||||
|
|
||||||
|
class Session(Base):
|
||||||
|
"""
|
||||||
|
Session token storage. The session ID will be emitted to the user, so
|
||||||
|
we use a UUID field to make the value unguessable.
|
||||||
|
"""
|
||||||
|
__tablename__ = 'session'
|
||||||
|
|
||||||
|
session_id = Column(UUID, primary_key=True)
|
||||||
|
user_id = Column(BigInteger, ForeignKey('user.user_id'))
|
||||||
|
token = Column(String)
|
||||||
|
|
||||||
|
|
||||||
|
class UserDetail(Base):
|
||||||
|
"""
|
||||||
|
Detail on 'suspect' users. Only users that have been identified as
|
||||||
|
possibly spammy by the search algorithm, or users that have been flagged
|
||||||
|
as spammy by logged-in users, appear here.
|
||||||
|
"""
|
||||||
|
__tablename__ = 'user_detail'
|
||||||
|
|
||||||
|
user_id = Column(BigInteger, ForeignKey('user.user_id'),
|
||||||
|
primary_key=True)
|
||||||
|
about_me = Column(Text)
|
||||||
|
who_am_i = Column(Text)
|
||||||
|
|
||||||
|
|
||||||
|
class UserLink(Base):
|
||||||
|
"""
|
||||||
|
Links attached to 'suspect' users.
|
||||||
|
"""
|
||||||
|
__tablename__ = 'user_link'
|
||||||
|
|
||||||
|
user_id = Column(BigInteger, ForeignKey('user.user_id'),
|
||||||
|
primary_key=True)
|
||||||
|
title = Column(Text)
|
||||||
|
location = Column(String)
|
||||||
|
url = Column(String)
|
||||||
|
|
||||||
|
|
||||||
|
class Avatar(Base):
|
||||||
|
"""
|
||||||
|
A cache of users' avatars, as some share the same image.
|
||||||
|
"""
|
||||||
|
__tablename__ = 'avatar'
|
||||||
|
|
||||||
|
avatar_id = Column(BigInteger, primary_key=True)
|
||||||
|
url = Column(String, unique=True, index=True)
|
||||||
|
avatar = Column(LargeBinary)
|
||||||
|
avatar_type = Column(String)
|
||||||
|
|
||||||
|
|
||||||
|
class Tag(Base):
|
||||||
|
"""
|
||||||
|
A list of tags seen applied to users' accounts.
|
||||||
|
"""
|
||||||
|
__tablename__ = 'tag'
|
||||||
|
|
||||||
|
tag_id = Column(BigInteger, primary_key=True)
|
||||||
|
tag = Column(String, unique=True, index=True)
|
||||||
|
|
||||||
|
|
||||||
|
class UserTag(Base):
|
||||||
|
"""
|
||||||
|
A list of tags applied to a user's account.
|
||||||
|
"""
|
||||||
|
__tablename__ = 'user_tag'
|
||||||
|
|
||||||
|
user_id = Column(BigInteger, ForeignKey('user.user_id'),
|
||||||
|
primary_key=True)
|
||||||
|
tag_id = Column(BigInteger, ForeignKey('tag.tag_id'),
|
||||||
|
primary_key=True)
|
Reference in New Issue
Block a user