Пример #1
0
class Collection(db.Model):
    __tablename__ = "collections"
    id = db.Column(db.Integer, nullable=False, primary_key=True)
    name = db.Column(db.String(80))

    links = db.relationship("Link", back_populates="collection")

    owner_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)
Пример #2
0
class Hit(db.Model):
    __tablename__ = "hits"
    id = db.Column(db.Integer, nullable=False, primary_key=True)
    date = db.Column(db.String,
                     nullable=False,
                     default=datetime.datetime.utcnow().isoformat())
    ip = db.Column(db.String, nullable=False, default='')

    link_id = db.Column(db.Integer, db.ForeignKey("links.id"), nullable=False)

    def __str__(self) -> str:
        return f"Hit: date({self.date}), link=(name: {self.link.name} - base: {self.link.base} - owner: {self.link.owner.name})"

    def __repr__(self) -> str:
        return str(self)
Пример #3
0
class Link(db.Model):
    __tablename__ = "links"
    id = db.Column(db.Integer, nullable=False, primary_key=True)
    base = db.Column(db.String, nullable=False)
    shorten = db.Column(db.String(80), nullable=False)
    name = db.Column(db.String(80))
    date = db.Column(db.String,
                     nullable=False,
                     default=datetime.datetime.utcnow().isoformat())

    owner_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)

    hits = db.relationship("Hit", backref="link", lazy=True)

    collection_id = db.Column(db.Integer, db.ForeignKey("collections.id"))
    collection = db.relationship("Collection", back_populates="links")

    def __str__(self) -> str:
        return f"Link: name({self.name}), base({self.base}), owner({self.owner.name}), shorten({self.shorten}), collection_id({self.collection.id})."

    def __repr__(self) -> str:
        return str(self)

    def print_date(self):
        return datetime.datetime.fromisoformat(self.date).strftime("%d %b, %Y")

    @property
    def hits_frame(self):
        hits = Counter([hit.date for hit in self.hits])
        result = OrderedDict(sorted(hits.items()))
        return dict(result)
Пример #4
0
class User(db.Model, UserMixin):
    __tablename__ = "users"
    id = db.Column(db.Integer, nullable=False, primary_key=True)
    name = db.Column(db.String(80), nullable=False)
    email = db.Column(db.String(255), nullable=False)
    password = db.Column(db.String(255), nullable=False)
    active = db.Column(db.Boolean(), default=True)
    confirmed_at = db.Column(db.DateTime())

    links = db.relationship("Link", backref="owner", lazy=True)

    collections = db.relationship("Collection", backref="owner", lazy=True)

    roles = db.relationship("Role",
                            secondary="roles_users",
                            backref=db.backref("users", lazy="dynamic"))

    def __str__(self) -> str:
        return f"User: name({self.name}), linksnumber=({len(self.links)}), role=({self.roles})"

    def __repr__(self) -> str:
        return str(self)

    def get_id(self):
        return self.id

    def __init__(self, name, password, email, roles):
        self.name = name
        self.email = email
        self.password = generate_password_hash(password).decode("UTF-8")
        self.roles = roles
        self.active = True
        col = Collection(name="Default")
        self.collections.append(col)
Пример #5
0
class Role(db.Model, RoleMixin):
    __tablename__ = "roles"
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True, nullable=False)
    description = db.Column(db.String(255))
Пример #6
0
class RolesUsers(db.Model):
    __tablename__ = "roles_users"
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer(), db.ForeignKey("users.id"))
    role_id = db.Column(db.Integer(), db.ForeignKey("roles.id"))