models.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2016 jianglin
  5. # File Name: models.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2016-12-15 20:52:07 (CST)
  9. # Last Update:星期四 2016-12-22 22:22:46 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import current_app
  14. from flask_maple.models import ModelMixin
  15. from maple.extension import db
  16. from datetime import datetime
  17. from api.user.models import User
  18. from api.board.models import Board
  19. topics_follow_users = db.Table(
  20. 'topics_follow_users',
  21. db.Column('topics_id', db.Integer, db.ForeignKey('topics.id')),
  22. db.Column('follow_users_id', db.Integer, db.ForeignKey('users.id')))
  23. class Topic(db.Model, ModelMixin):
  24. __tablename__ = 'topics'
  25. CONTENT_TYPE_TEXT = '0'
  26. CONTENT_TYPE_MARKDOWN = '1'
  27. CONTENT_TYPE_ORGMODE = '2'
  28. CONTENT_TYPE = (('0', 'text'), ('1', 'markdown'), ('2', 'org-mode'))
  29. id = db.Column(db.Integer, primary_key=True)
  30. title = db.Column(db.String(81), nullable=False)
  31. content = db.Column(db.Text, nullable=False)
  32. content_type = db.Column(
  33. db.String(10), nullable=False, default=CONTENT_TYPE_MARKDOWN)
  34. created_at = db.Column(
  35. db.DateTime, default=datetime.utcnow(), nullable=False)
  36. updated_at = db.Column(
  37. db.DateTime, default=datetime.utcnow(), onupdate=datetime.utcnow())
  38. is_good = db.Column(db.Boolean, default=False)
  39. is_top = db.Column(db.Boolean, default=False)
  40. author_id = db.Column(
  41. db.Integer, db.ForeignKey(
  42. 'users.id', ondelete="CASCADE"))
  43. author = db.relationship(
  44. User,
  45. backref=db.backref(
  46. 'topics', cascade='all,delete-orphan', lazy='dynamic'),
  47. lazy='joined')
  48. board_id = db.Column(
  49. db.Integer, db.ForeignKey(
  50. 'boards.id', ondelete="CASCADE"))
  51. board = db.relationship(
  52. Board,
  53. backref=db.backref(
  54. 'topics', cascade='all,delete-orphan', lazy='dynamic'),
  55. lazy='joined')
  56. followers = db.relationship(
  57. User,
  58. secondary=topics_follow_users,
  59. backref=db.backref(
  60. 'following_topics', lazy='dynamic'),
  61. lazy='dynamic')
  62. def __str__(self):
  63. return self.title
  64. def __repr__(self):
  65. return "<Topic %r>" % self.title
  66. topics_collects = db.Table(
  67. 'topics_collects',
  68. db.Column('topics_id', db.Integer, db.ForeignKey('topics.id')),
  69. db.Column('collects_id', db.Integer, db.ForeignKey('collects.id')))
  70. collect_follow_users = db.Table(
  71. 'collects_follow_users',
  72. db.Column('collects_id', db.Integer, db.ForeignKey('collects.id')),
  73. db.Column('follow_users_id', db.Integer, db.ForeignKey('users.id')))
  74. class Collect(db.Model, ModelMixin):
  75. __tablename__ = 'collects'
  76. id = db.Column(db.Integer, primary_key=True)
  77. name = db.Column(db.String(32), nullable=False)
  78. description = db.Column(db.String(256), nullable=True)
  79. privacy = db.Column(db.Boolean, default=False)
  80. created_at = db.Column(
  81. db.DateTime, default=datetime.utcnow(), nullable=False)
  82. updated_at = db.Column(
  83. db.DateTime, default=datetime.utcnow(), onupdate=datetime.utcnow())
  84. author_id = db.Column(
  85. db.Integer, db.ForeignKey(
  86. 'users.id', ondelete="CASCADE"))
  87. author = db.relationship(
  88. User,
  89. backref=db.backref(
  90. 'collects', cascade='all,delete-orphan', lazy='dynamic'),
  91. lazy='joined')
  92. topics = db.relationship(
  93. Topic,
  94. secondary=topics_collects,
  95. backref=db.backref(
  96. 'collects', lazy='dynamic'),
  97. lazy='dynamic')
  98. followers = db.relationship(
  99. User,
  100. secondary=collect_follow_users,
  101. backref=db.backref(
  102. 'following_collects', lazy='dynamic'),
  103. lazy='dynamic')
  104. def __str__(self):
  105. return self.name
  106. def __repr__(self):
  107. return "<Collect %r>" % self.name