summary refs log tree commit diff
path: root/models.py
blob: 08e6f620b02d9664faa9cfe69536d035a80ae24d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from peewee import Model, CharField, TextField, DateTimeField, SqliteDatabase, BlobField
from peewee import IntegerField, ForeignKeyField
from flask_login import UserMixin
from werkzeug.security import check_password_hash, generate_password_hash
from datetime import datetime
from config import dbloc

# from app import db
db = SqliteDatabase(dbloc)


class BaseModel(Model):
    class Meta:
        database = db


class User(UserMixin, BaseModel):
    id = IntegerField(primary_key=True)
    username = CharField(max_length=64, index=True, unique=True)
    default_faccet = TextField(null=False)
    password_hash = CharField(max_length=128)

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

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


class Faccet(BaseModel):
    user_belongs = ForeignKeyField(User, backref="parts")
    name = TextField(unique=True)
    picture = BlobField(null=True)
    bio = TextField()
    birth = DateTimeField(default=datetime.now)


class Post(BaseModel):
    id = IntegerField(primary_key=True)
    authour = ForeignKeyField(Faccet, backref="creator")
    parent = IntegerField(default=0)
    title = CharField()
    content = TextField()
    created_at = DateTimeField(default=datetime.now)


def get_replies(post_id):
    return Post.select().where(Post.parent == post_id).order_by(Post.created_at.desc())


def get_previous(post_id):
    tlist = []
    lp = Post.get(Post.id == post_id)
    while True:
        if lp.parent == 0:
            break
        if lp.id != post_id:
            tlist.append(lp)
        lp = Post.get(Post.id == lp.parent)
    return tlist


def get_attribed_posts(uid):
    return Post.select().where(Post.authour == uid).order_by(Post.created_at.asc())


def get_tview(post_id):
    return (
        Post.select()
        .where((Post.parent == post_id) | (Post.id == post_id))
        .order_by(Post.id.asc())
    )


db.create_tables([User, Post, Faccet])