modify db schema

This commit is contained in:
knst-kotov 2021-08-23 11:02:45 +03:00
parent 892c929c35
commit 33a0b1d8be
5 changed files with 16 additions and 21 deletions

View File

@ -2,12 +2,11 @@ from orm.rbac import Organization, Operation, Resource, Permission, Role
from orm.user import User from orm.user import User
from orm.message import Message from orm.message import Message
from orm.topic import Topic from orm.topic import Topic
from orm.rating import Rating
from orm.notification import Notification from orm.notification import Notification
from orm.shout import Shout from orm.shout import Shout
from orm.base import Base, engine from orm.base import Base, engine
__all__ = ["User", "Role", "Operation", "Permission", "Message", "Shout", "Topic", "Rating", "Notification"] __all__ = ["User", "Role", "Operation", "Permission", "Message", "Shout", "Topic", "Notification"]
Base.metadata.create_all(engine) Base.metadata.create_all(engine)
Operation.init_table() Operation.init_table()

View File

@ -7,11 +7,11 @@ from orm.base import Base
class Like(Base): class Like(Base):
__tablename__ = 'like' __tablename__ = 'like'
author_id: str = Column(ForeignKey("user.id"), nullable=False, comment="Author") id: int = None
value: str = Column(String, nullable=False, comment="Value") user_id: str = Column(ForeignKey("user.id"), comment="Author", primary_key = True)
shout: str = Column(String, ForeignKey("shout.slug"), nullable=True, comment="Liked shout slug") shout: str = Column(String, ForeignKey("shout.slug"), comment="Liked shout slug", primary_key = True)
user: str = Column(ForeignKey("user.id"), nullable=True, comment="Liked user") value: int = Column(Integer, nullable=False, comment="Value")
# TODO: add resolvers, debug, etc. # TODO: add resolvers, debug, etc.

View File

@ -1,9 +1,3 @@
from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy import Column, Integer, String, ForeignKey
# from orm import Permission # from orm import Permission
from orm.base import Base from orm.base import Base
class Rating(Base):
__tablename__ = "rating"
createdBy: int = Column(Integer, ForeignKey("user.id"), primary_key = True)
value: int = Column(Integer, nullable=False)

View File

@ -17,6 +17,7 @@ Connection = Table('topic_connections',
class Topic(Base): class Topic(Base):
__tablename__ = 'topic' __tablename__ = 'topic'
id: int = None
slug: str = Column(String, unique = True, nullable = False, primary_key=True) slug: str = Column(String, unique = True, nullable = False, primary_key=True)
org_id: str = Column(ForeignKey("organization.id"), nullable=False) org_id: str = Column(ForeignKey("organization.id"), nullable=False)
createdAt: str = Column(DateTime, nullable=False, default = datetime.now, comment="Created at") createdAt: str = Column(DateTime, nullable=False, default = datetime.now, comment="Created at")

View File

@ -5,7 +5,6 @@ from sqlalchemy.orm import relationship
from orm import Permission from orm import Permission
from orm.base import Base, local_session from orm.base import Base, local_session
from orm.rating import Rating
from orm.rbac import Role from orm.rbac import Role
class UserNotifications(Base): class UserNotifications(Base):
@ -16,11 +15,13 @@ class UserNotifications(Base):
kind: str = Column(String, ForeignKey("notification.kind")) kind: str = Column(String, ForeignKey("notification.kind"))
values: JSONType = Column(JSONType, nullable = True) # [ <var1>, .. ] values: JSONType = Column(JSONType, nullable = True) # [ <var1>, .. ]
UserRatings = Table("user_ratings", class UserRatings(Base):
Base.metadata, __tablename__ = "user_ratings"
Column('user_id', Integer, ForeignKey('user.id')),
Column('rater_id', Integer, ForeignKey('rating.createdBy')) id = None
) rater_id = Column(ForeignKey('user.id'), primary_key = True)
user_id = Column(ForeignKey('user.id'), primary_key = True)
value = Column(Integer)
UserRoles = Table("user_roles", UserRoles = Table("user_roles",
Base.metadata, Base.metadata,
@ -46,7 +47,7 @@ class User(Base):
links: JSONType = Column(JSONType, nullable=True, comment="Links") links: JSONType = Column(JSONType, nullable=True, comment="Links")
oauth: str = Column(String, nullable=True) oauth: str = Column(String, nullable=True)
notifications = relationship(lambda: UserNotifications) notifications = relationship(lambda: UserNotifications)
ratings = relationship(lambda: Rating, secondary=UserRatings) ratings = relationship(UserRatings, foreign_keys=UserRatings.user_id)
roles = relationship(lambda: Role, secondary=UserRoles) roles = relationship(lambda: Role, secondary=UserRoles)
@classmethod @classmethod