class TaskList(BaseModel): name = db.StringField(required=True) dead_line = db.DateTimeField(required=False) tasks = db.ListField( db.ReferenceField('Task', reverse_delete_rule=db.CASCADE)) created_by = db.ReferenceField('User')
class Card(db.Document): STATUS_CHOICES = ( ('todo', 'Todo'), ('in_progress', 'In progress'), ('in_review', 'In review'), ('done', 'Done'), ) title = db.StringField(required=True, unique_with='board') content = db.StringField(required=True) created_at = db.DateTimeField(default=now()) created_by = db.ReferenceField('User') completed_at = db.DateTimeField(required=False) planned_start_time = db.DateTimeField(required=False) planned_end_time = db.DateTimeField(required=False) status = db.StringField(choices=STATUS_CHOICES, default='todo') comments = db.ListField(db.ReferenceField('Comment')) board = db.ReferenceField('Board') def save(self, *args, **kwargs): instance = super(Card, self).save(*args, **kwargs) if self.planned_start_time and self.planned_start_time.replace(tzinfo=utc) > now(): from app import schedule_card_start_time schedule_card_start_time.apply_async(kwargs={'card_id': str(self.id)}, eta=self.planned_start_time) if self.planned_end_time and self.planned_end_time.replace(tzinfo=utc) > now(): from app import schedule_card_end_time schedule_card_end_time.apply_async(kwargs={'card_id': str(self.id)}, eta=self.planned_end_time) if self.completed_at: self.completed_at = now() instance.save() return instance
class Board(db.Document): STATUS_CHOICES = ( ('active', 'Active'), ('archived', 'Archived'), ) name = db.StringField(required=True, unique=True) status = db.StringField(choices=STATUS_CHOICES, default='active') created_at = db.DateTimeField(default=now()) created_by = db.ReferenceField('User') cards = db.ListField(db.ReferenceField('Card'))
class User(db.Document): email = db.EmailField(required=True, unique=True) password = db.StringField(required=True, min_length=6) movies = db.ListField(db.ReferenceField('Movie', reverse_delete_rule=db.PULL)) def hash_password(self): self.password = generate_password_hash(self.password).decode('utf8') def check_password(self, password): return check_password_hash(self.password, password)
class User(BaseModel): name = db.StringField(required=True, unique=True) email = db.EmailField(requred=True, unique=True) password = db.StringField(required=True, min_length=6) task_lists = db.ListField( db.ReferenceField('TaskList', revese_delete_rule=db.CASCADE), required=False ) def hash_password(self): self.password = generate_password_hash(self.password).decode('utf8') def check_password(self, password): return check_password_hash(self.password, password)
class Movie(db.Document): name = db.StringField(required=True, unique=True) casts = db.ListField(db.StringField(), required=True) genres = db.ListField(db.StringField(), required=True) added_by = db.ReferenceField('User')
class Comment(db.Document): content = db.StringField(required=True) created_at = db.DateTimeField(default=now()) created_by = db.ReferenceField('User') card = db.ReferenceField('Card')
class Movie(db.DynamicDocument): name = db.StringField(required=True, unique=True) casts = db.ListField(db.StringField(), required=True) genres = db.ListField(db.StringField(), required=True) director = db.ReferenceField(Director)
class Article(db.DynamicDocument): title = db.StringField(required=True, max_length=200) text = db.StringField(required=True) author = db.ReferenceField(Author)