db: Add in beginnings of model.

This commit is contained in:
Stuart Longland 2018-01-06 13:57:04 +10:00
parent 48e7ec74c5
commit 4009de4329
Signed by: stuartl
GPG Key ID: F954BBBB7948D546
2 changed files with 115 additions and 0 deletions

0
hadsh/db/__init__.py Normal file
View File

115
hadsh/db/model.py Normal file
View 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)