79 lines
2.3 KiB
Python
79 lines
2.3 KiB
Python
__author__ = 'RemiZOffAlex'
|
||
__copyright__ = '(c) RemiZOffAlex'
|
||
__email__ = 'remizoffalex@mail.ru'
|
||
|
||
import datetime
|
||
from sqlalchemy import Column, Integer, ForeignKey, String, DateTime
|
||
from sqlalchemy.orm import relationship
|
||
|
||
from . import Base
|
||
|
||
|
||
class Note(Base):
|
||
"""Заметки
|
||
"""
|
||
__tablename__ = "note"
|
||
|
||
id = Column(Integer, primary_key=True)
|
||
user_id = Column(Integer, ForeignKey('user.id'))
|
||
title = Column(String)
|
||
body = Column(String, default='')
|
||
created = Column(DateTime) # Дата создания
|
||
updated = Column(DateTime) # Дата обновления
|
||
|
||
# Связи
|
||
user = relationship(
|
||
"User",
|
||
primaryjoin="Note.user_id==User.id",
|
||
uselist=False
|
||
)
|
||
tags = relationship("TagNote", primaryjoin="Note.id==TagNote.note_id")
|
||
|
||
def __init__(self, user, title):
|
||
assert type(user).__name__ == 'User', 'Не передан объект User'
|
||
self.user_id = user.id
|
||
self.title = title
|
||
self.created = datetime.datetime.now()
|
||
self.updated = datetime.datetime.now()
|
||
|
||
def __repr__(self):
|
||
return "<Note({}, '{}')>".format(self.id, self.title)
|
||
|
||
def as_dict(self):
|
||
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
|
||
|
||
|
||
class TagNote(Base):
|
||
"""Теги к заметкам"""
|
||
__tablename__ = "tagnote"
|
||
|
||
id = Column(Integer, primary_key=True)
|
||
note_id = Column(Integer, ForeignKey('note.id'))
|
||
tag_id = Column(Integer, ForeignKey('tag.id'))
|
||
created = Column(DateTime) # Дата создания
|
||
|
||
# Связи
|
||
note = relationship(
|
||
"Note",
|
||
primaryjoin="TagNote.note_id==Note.id",
|
||
uselist=False
|
||
)
|
||
tag = relationship(
|
||
"Tag",
|
||
primaryjoin="TagNote.tag_id==Tag.id",
|
||
uselist=False
|
||
)
|
||
|
||
def __init__(self, note, tag):
|
||
assert type(note).__name__ == 'Note', 'Не передан объект Note'
|
||
assert type(tag).__name__ == 'Tag', 'Не передан объект Tag'
|
||
self.note_id = note.id
|
||
self.tag_id = tag.id
|
||
self.created = datetime.datetime.now()
|
||
|
||
def __repr__(self):
|
||
return "<TagNote('%s')>" % (self.id)
|
||
|
||
def as_dict(self):
|
||
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
|