Update tag
This commit is contained in:
@@ -1,365 +0,0 @@
|
|||||||
__author__ = 'RemiZOffAlex'
|
|
||||||
__copyright__ = '(c) RemiZOffAlex'
|
|
||||||
__license__ = 'MIT'
|
|
||||||
__email__ = 'remizoffalex@mail.ru'
|
|
||||||
__url__ = 'https://remizoffalex.ru'
|
|
||||||
|
|
||||||
from . import jsonrpc, login_required
|
|
||||||
from .. import app, lib, models
|
|
||||||
|
|
||||||
|
|
||||||
@jsonrpc.method('tag.add(name=str)')
|
|
||||||
@login_required
|
|
||||||
def tag_add(name):
|
|
||||||
"""
|
|
||||||
Добавить новый тег
|
|
||||||
"""
|
|
||||||
exist = models.db_session.query(
|
|
||||||
models.Tag
|
|
||||||
).filter(
|
|
||||||
models.Tag.name == name
|
|
||||||
).first()
|
|
||||||
if exist:
|
|
||||||
raise ValueError
|
|
||||||
|
|
||||||
newTag = models.Tag(name)
|
|
||||||
models.db_session.add(newTag)
|
|
||||||
models.db_session.commit()
|
|
||||||
return newTag.as_dict()
|
|
||||||
|
|
||||||
|
|
||||||
@jsonrpc.method('tag.delete(id=int)')
|
|
||||||
@login_required
|
|
||||||
def tag_delete(id):
|
|
||||||
"""
|
|
||||||
Удалить тег
|
|
||||||
"""
|
|
||||||
exist = models.db_session.query(
|
|
||||||
models.Tag
|
|
||||||
).filter(
|
|
||||||
models.Tag.id==id
|
|
||||||
).first()
|
|
||||||
if exist is None:
|
|
||||||
raise ValueError
|
|
||||||
|
|
||||||
models.db_session.delete(exist)
|
|
||||||
models.db_session.commit()
|
|
||||||
return 'OK'
|
|
||||||
|
|
||||||
|
|
||||||
@jsonrpc.method('tag.exist(name=str)')
|
|
||||||
def tag_exist(name):
|
|
||||||
"""
|
|
||||||
Проверить существует ли тег и вернуть информацию о нём
|
|
||||||
"""
|
|
||||||
text = name.lower().strip()
|
|
||||||
tagRow = models.db_session.query(
|
|
||||||
models.Tag
|
|
||||||
).filter(
|
|
||||||
models.Tag.name==text
|
|
||||||
).first()
|
|
||||||
if tagRow is None:
|
|
||||||
raise ValueError
|
|
||||||
result = {
|
|
||||||
'id': tagRow.id,
|
|
||||||
'name': tagRow.name
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
@jsonrpc.method('tag.pages(id=int, page=int)')
|
|
||||||
def tag_pages_list(id, page):
|
|
||||||
"""
|
|
||||||
Список статей
|
|
||||||
"""
|
|
||||||
tag = models.db_session.query(
|
|
||||||
models.Tag
|
|
||||||
).filter(
|
|
||||||
models.Tag.id==id
|
|
||||||
).first()
|
|
||||||
if tag is None:
|
|
||||||
raise ValueError
|
|
||||||
indexes = models.db_session.query(
|
|
||||||
models.TagPage.page_id
|
|
||||||
).filter(
|
|
||||||
models.TagPage.tag_id==id
|
|
||||||
)
|
|
||||||
pages = models.db_session.query(
|
|
||||||
models.Page
|
|
||||||
).filter(
|
|
||||||
models.Page.id.in_(indexes)
|
|
||||||
).order_by(
|
|
||||||
models.Page.title.asc()
|
|
||||||
)
|
|
||||||
pages = lib.getpage(
|
|
||||||
pages,
|
|
||||||
page,
|
|
||||||
app.config['ITEMS_ON_PAGE']
|
|
||||||
).all()
|
|
||||||
|
|
||||||
result = []
|
|
||||||
for page in pages:
|
|
||||||
newRow = page.as_dict()
|
|
||||||
newRow['user'] = page.user.as_dict()
|
|
||||||
newRow['tags'] = []
|
|
||||||
for tagLink in page.tags:
|
|
||||||
newRow['tags'].append(tagLink.tag.as_dict())
|
|
||||||
result.append(newRow)
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
@jsonrpc.method('tag.pages.count(id=int)')
|
|
||||||
def tag_pages_count(id):
|
|
||||||
"""Общее количество статей
|
|
||||||
"""
|
|
||||||
tag = models.db_session.query(
|
|
||||||
models.Tag
|
|
||||||
).filter(
|
|
||||||
models.Tag.id==id
|
|
||||||
).first()
|
|
||||||
if tag is None:
|
|
||||||
raise ValueError
|
|
||||||
indexes = models.db_session.query(
|
|
||||||
models.TagPage.page_id
|
|
||||||
).filter(
|
|
||||||
models.TagPage.tag_id==id
|
|
||||||
)
|
|
||||||
result = models.db_session.query(
|
|
||||||
models.Page
|
|
||||||
).filter(
|
|
||||||
models.Page.id.in_(indexes)
|
|
||||||
).count()
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
@jsonrpc.method('tag.notes(id=int, page=int)')
|
|
||||||
@login_required
|
|
||||||
def tag_notes_list(id, page):
|
|
||||||
"""Список заметок
|
|
||||||
"""
|
|
||||||
tag = models.db_session.query(
|
|
||||||
models.Tag
|
|
||||||
).filter(
|
|
||||||
models.Tag.id==id
|
|
||||||
).first()
|
|
||||||
if tag is None:
|
|
||||||
raise ValueError
|
|
||||||
indexes = models.db_session.query(
|
|
||||||
models.TagNote.note_id
|
|
||||||
).filter(
|
|
||||||
models.TagNote.tag_id==id
|
|
||||||
)
|
|
||||||
notes = models.db_session.query(
|
|
||||||
models.Note
|
|
||||||
).filter(
|
|
||||||
models.Note.user_id==lib.get_user().id,
|
|
||||||
models.Note.id.in_(indexes)
|
|
||||||
).order_by(
|
|
||||||
models.Note.title.asc()
|
|
||||||
)
|
|
||||||
notes = lib.getpage(
|
|
||||||
notes,
|
|
||||||
page,
|
|
||||||
app.config['ITEMS_ON_PAGE']
|
|
||||||
).all()
|
|
||||||
|
|
||||||
result = []
|
|
||||||
for note in notes:
|
|
||||||
newRow = note.as_dict()
|
|
||||||
newRow['tags'] = []
|
|
||||||
for tagLink in note.tags:
|
|
||||||
newRow['tags'].append(tagLink.tag.as_dict())
|
|
||||||
result.append(newRow)
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
@jsonrpc.method('tag.notes.count(id=int)')
|
|
||||||
@login_required
|
|
||||||
def tag_notes_count(id):
|
|
||||||
"""Общее количество заметок
|
|
||||||
"""
|
|
||||||
tag = models.db_session.query(
|
|
||||||
models.Tag
|
|
||||||
).filter(
|
|
||||||
models.Tag.id==id
|
|
||||||
).first()
|
|
||||||
if tag is None:
|
|
||||||
raise ValueError
|
|
||||||
indexes = models.db_session.query(
|
|
||||||
models.TagNote.note_id
|
|
||||||
).filter(
|
|
||||||
models.TagNote.tag_id==id
|
|
||||||
)
|
|
||||||
result = models.db_session.query(
|
|
||||||
models.Note
|
|
||||||
).filter(
|
|
||||||
models.Note.user_id==lib.get_user().id,
|
|
||||||
models.Note.id.in_(indexes)
|
|
||||||
).count()
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
@jsonrpc.method('tags()')
|
|
||||||
def tags_list():
|
|
||||||
"""
|
|
||||||
Список тегов
|
|
||||||
"""
|
|
||||||
tags = models.db_session.query(
|
|
||||||
models.Tag
|
|
||||||
).all()
|
|
||||||
|
|
||||||
result = []
|
|
||||||
for tag in tags:
|
|
||||||
newRow = tag.as_dict()
|
|
||||||
result.append(newRow)
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
@jsonrpc.method('tag.addToPage')
|
|
||||||
@login_required
|
|
||||||
def tag_addToPage(tag, id):
|
|
||||||
"""
|
|
||||||
Добавление тега на страницы
|
|
||||||
"""
|
|
||||||
tagRow = models.db_session.query(
|
|
||||||
models.Tag
|
|
||||||
).filter(
|
|
||||||
models.Tag.id==tag
|
|
||||||
).first()
|
|
||||||
if tagRow is None:
|
|
||||||
raise ValueError
|
|
||||||
page = models.db_session.query(
|
|
||||||
models.Page
|
|
||||||
).filter(
|
|
||||||
models.Page.id==id
|
|
||||||
).first()
|
|
||||||
if page is None:
|
|
||||||
raise ValueError
|
|
||||||
exist = models.db_session.query(
|
|
||||||
models.TagPage
|
|
||||||
).filter(
|
|
||||||
models.TagPage.tag_id==tagRow.id,
|
|
||||||
models.TagPage.page_id==page.id
|
|
||||||
).first()
|
|
||||||
if exist:
|
|
||||||
raise ValueError
|
|
||||||
newtagpage = models.TagPage(
|
|
||||||
page,
|
|
||||||
tagRow
|
|
||||||
)
|
|
||||||
models.db_session.add(newtagpage)
|
|
||||||
models.db_session.commit()
|
|
||||||
result = tagRow.as_dict()
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
@jsonrpc.method('tag.deleteFromPage')
|
|
||||||
@login_required
|
|
||||||
def tag_deleteFromPage(tag, id):
|
|
||||||
"""
|
|
||||||
Удаление тега со страницы
|
|
||||||
"""
|
|
||||||
exist = models.db_session.query(
|
|
||||||
models.TagPage
|
|
||||||
).filter(
|
|
||||||
models.TagPage.tag_id==tag,
|
|
||||||
models.TagPage.page_id==id
|
|
||||||
).first()
|
|
||||||
if exist is None:
|
|
||||||
raise ValueError
|
|
||||||
models.db_session.delete(exist)
|
|
||||||
models.db_session.commit()
|
|
||||||
return 'Тег {} удален'.format(id)
|
|
||||||
|
|
||||||
|
|
||||||
@jsonrpc.method('tag.addToNote(tag=int, id=int)')
|
|
||||||
@login_required
|
|
||||||
def tag_addToNote(tag, id):
|
|
||||||
"""
|
|
||||||
Добавление тега в заметку
|
|
||||||
"""
|
|
||||||
noteRow = models.db_session.query(
|
|
||||||
models.Note
|
|
||||||
).filter(
|
|
||||||
models.Note.id==id,
|
|
||||||
models.Note.user_id==lib.get_user().id
|
|
||||||
).first()
|
|
||||||
if noteRow is None:
|
|
||||||
raise ValueError
|
|
||||||
tagRow = models.db_session.query(
|
|
||||||
models.Tag
|
|
||||||
).filter(
|
|
||||||
models.Tag.id==tag
|
|
||||||
).first()
|
|
||||||
if tagRow is None:
|
|
||||||
raise ValueError
|
|
||||||
exist = models.db_session.query(
|
|
||||||
models.TagNote
|
|
||||||
).filter(
|
|
||||||
models.TagNote.tag_id==tagRow.id,
|
|
||||||
models.TagNote.note_id==noteRow.id
|
|
||||||
).first()
|
|
||||||
if exist:
|
|
||||||
raise ValueError
|
|
||||||
newtagNote = models.TagNote(
|
|
||||||
noteRow,
|
|
||||||
tagRow
|
|
||||||
)
|
|
||||||
models.db_session.add(newtagNote)
|
|
||||||
models.db_session.commit()
|
|
||||||
result = tagRow.as_dict()
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
@jsonrpc.method('tag.deleteFromNote(tag=int, id=int)')
|
|
||||||
@login_required
|
|
||||||
def tag_deleteFromNote(tag, id):
|
|
||||||
"""
|
|
||||||
Удаление тега из заметки
|
|
||||||
"""
|
|
||||||
noteRow = models.db_session.query(
|
|
||||||
models.Note
|
|
||||||
).filter(
|
|
||||||
models.Note.id==id,
|
|
||||||
models.Note.user_id==lib.get_user().id
|
|
||||||
).first()
|
|
||||||
if noteRow is None:
|
|
||||||
raise ValueError
|
|
||||||
tagRow = models.db_session.query(
|
|
||||||
models.Tag
|
|
||||||
).filter(
|
|
||||||
models.Tag.id==tag
|
|
||||||
).first()
|
|
||||||
if tagRow is None:
|
|
||||||
raise ValueError
|
|
||||||
exist = models.db_session.query(
|
|
||||||
models.TagNote
|
|
||||||
).filter(
|
|
||||||
models.TagNote.tag_id==tag,
|
|
||||||
models.TagNote.note_id==id
|
|
||||||
).first()
|
|
||||||
if exist is None:
|
|
||||||
raise ValueError
|
|
||||||
models.db_session.delete(exist)
|
|
||||||
models.db_session.commit()
|
|
||||||
return 'ok'
|
|
||||||
|
|
||||||
|
|
||||||
@jsonrpc.method('tags.groups')
|
|
||||||
def tags_groups():
|
|
||||||
"""
|
|
||||||
Облако тегов
|
|
||||||
"""
|
|
||||||
tags = models.db_session.query(
|
|
||||||
models.Tag
|
|
||||||
).order_by(
|
|
||||||
models.Tag.name
|
|
||||||
).all()
|
|
||||||
result = {}
|
|
||||||
for tag in tags:
|
|
||||||
tag_json = tag.as_dict()
|
|
||||||
if tag.name[0] in result:
|
|
||||||
result[tag.name[0]].append(tag_json)
|
|
||||||
else:
|
|
||||||
result[tag.name[0]] = [tag_json]
|
|
||||||
return result
|
|
||||||
12
myapp/ns_api/tag/__init__.py
Normal file
12
myapp/ns_api/tag/__init__.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
__author__ = 'RemiZOffAlex'
|
||||||
|
__copyright__ = '(c) RemiZOffAlex'
|
||||||
|
__license__ = 'MIT'
|
||||||
|
__email__ = 'remizoffalex@mail.ru'
|
||||||
|
__url__ = 'https://remizoffalex.ru'
|
||||||
|
|
||||||
|
|
||||||
|
from . import (
|
||||||
|
note,
|
||||||
|
page,
|
||||||
|
tag
|
||||||
|
)
|
||||||
148
myapp/ns_api/tag/note.py
Normal file
148
myapp/ns_api/tag/note.py
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
__author__ = 'RemiZOffAlex'
|
||||||
|
__copyright__ = '(c) RemiZOffAlex'
|
||||||
|
__license__ = 'MIT'
|
||||||
|
__email__ = 'remizoffalex@mail.ru'
|
||||||
|
__url__ = 'https://remizoffalex.ru'
|
||||||
|
|
||||||
|
from .. import jsonrpc, login_required
|
||||||
|
from ... import app, lib, models
|
||||||
|
|
||||||
|
|
||||||
|
@jsonrpc.method('tag.note.add(tag=int, id=int)')
|
||||||
|
@login_required
|
||||||
|
def tag_note_add(tag, id):
|
||||||
|
"""
|
||||||
|
Добавление тега в заметку
|
||||||
|
"""
|
||||||
|
noteRow = models.db_session.query(
|
||||||
|
models.Note
|
||||||
|
).filter(
|
||||||
|
models.Note.id==id,
|
||||||
|
models.Note.user_id==lib.get_user().id
|
||||||
|
).first()
|
||||||
|
if noteRow is None:
|
||||||
|
raise ValueError
|
||||||
|
tagRow = models.db_session.query(
|
||||||
|
models.Tag
|
||||||
|
).filter(
|
||||||
|
models.Tag.id==tag
|
||||||
|
).first()
|
||||||
|
if tagRow is None:
|
||||||
|
raise ValueError
|
||||||
|
exist = models.db_session.query(
|
||||||
|
models.TagNote
|
||||||
|
).filter(
|
||||||
|
models.TagNote.tag_id==tagRow.id,
|
||||||
|
models.TagNote.note_id==noteRow.id
|
||||||
|
).first()
|
||||||
|
if exist:
|
||||||
|
raise ValueError
|
||||||
|
newtagNote = models.TagNote(
|
||||||
|
noteRow,
|
||||||
|
tagRow
|
||||||
|
)
|
||||||
|
models.db_session.add(newtagNote)
|
||||||
|
models.db_session.commit()
|
||||||
|
result = tagRow.as_dict()
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
@jsonrpc.method('tag.note.delete(tag=int, id=int)')
|
||||||
|
@login_required
|
||||||
|
def tag_note_delete(tag, id):
|
||||||
|
"""
|
||||||
|
Удаление тега из заметки
|
||||||
|
"""
|
||||||
|
noteRow = models.db_session.query(
|
||||||
|
models.Note
|
||||||
|
).filter(
|
||||||
|
models.Note.id==id,
|
||||||
|
models.Note.user_id==lib.get_user().id
|
||||||
|
).first()
|
||||||
|
if noteRow is None:
|
||||||
|
raise ValueError
|
||||||
|
tagRow = models.db_session.query(
|
||||||
|
models.Tag
|
||||||
|
).filter(
|
||||||
|
models.Tag.id==tag
|
||||||
|
).first()
|
||||||
|
if tagRow is None:
|
||||||
|
raise ValueError
|
||||||
|
exist = models.db_session.query(
|
||||||
|
models.TagNote
|
||||||
|
).filter(
|
||||||
|
models.TagNote.tag_id==tag,
|
||||||
|
models.TagNote.note_id==id
|
||||||
|
).first()
|
||||||
|
if exist is None:
|
||||||
|
raise ValueError
|
||||||
|
models.db_session.delete(exist)
|
||||||
|
models.db_session.commit()
|
||||||
|
return 'ok'
|
||||||
|
|
||||||
|
|
||||||
|
@jsonrpc.method('tag.notes(id=int, page=int)')
|
||||||
|
@login_required
|
||||||
|
def tag_notes_list(id, page):
|
||||||
|
"""Список заметок
|
||||||
|
"""
|
||||||
|
tag = models.db_session.query(
|
||||||
|
models.Tag
|
||||||
|
).filter(
|
||||||
|
models.Tag.id==id
|
||||||
|
).first()
|
||||||
|
if tag is None:
|
||||||
|
raise ValueError
|
||||||
|
indexes = models.db_session.query(
|
||||||
|
models.TagNote.note_id
|
||||||
|
).filter(
|
||||||
|
models.TagNote.tag_id==id
|
||||||
|
)
|
||||||
|
notes = models.db_session.query(
|
||||||
|
models.Note
|
||||||
|
).filter(
|
||||||
|
models.Note.user_id==lib.get_user().id,
|
||||||
|
models.Note.id.in_(indexes)
|
||||||
|
).order_by(
|
||||||
|
models.Note.title.asc()
|
||||||
|
)
|
||||||
|
notes = lib.getpage(
|
||||||
|
notes,
|
||||||
|
page,
|
||||||
|
app.config['ITEMS_ON_PAGE']
|
||||||
|
).all()
|
||||||
|
|
||||||
|
result = []
|
||||||
|
for note in notes:
|
||||||
|
newRow = note.as_dict()
|
||||||
|
newRow['tags'] = []
|
||||||
|
for tagLink in note.tags:
|
||||||
|
newRow['tags'].append(tagLink.tag.as_dict())
|
||||||
|
result.append(newRow)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
@jsonrpc.method('tag.notes.count(id=int)')
|
||||||
|
@login_required
|
||||||
|
def tag_notes_count(id):
|
||||||
|
"""Общее количество заметок
|
||||||
|
"""
|
||||||
|
tag = models.db_session.query(
|
||||||
|
models.Tag
|
||||||
|
).filter(
|
||||||
|
models.Tag.id==id
|
||||||
|
).first()
|
||||||
|
if tag is None:
|
||||||
|
raise ValueError
|
||||||
|
indexes = models.db_session.query(
|
||||||
|
models.TagNote.note_id
|
||||||
|
).filter(
|
||||||
|
models.TagNote.tag_id==id
|
||||||
|
)
|
||||||
|
result = models.db_session.query(
|
||||||
|
models.Note
|
||||||
|
).filter(
|
||||||
|
models.Note.user_id==lib.get_user().id,
|
||||||
|
models.Note.id.in_(indexes)
|
||||||
|
).count()
|
||||||
|
return result
|
||||||
130
myapp/ns_api/tag/page.py
Normal file
130
myapp/ns_api/tag/page.py
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
__author__ = 'RemiZOffAlex'
|
||||||
|
__copyright__ = '(c) RemiZOffAlex'
|
||||||
|
__license__ = 'MIT'
|
||||||
|
__email__ = 'remizoffalex@mail.ru'
|
||||||
|
__url__ = 'https://remizoffalex.ru'
|
||||||
|
|
||||||
|
from .. import jsonrpc, login_required
|
||||||
|
from ... import app, lib, models
|
||||||
|
|
||||||
|
|
||||||
|
@jsonrpc.method('tag.page.add(id=int, tag=int)')
|
||||||
|
@login_required
|
||||||
|
def tag_page_add(tag, id):
|
||||||
|
"""
|
||||||
|
Добавление тега на страницы
|
||||||
|
"""
|
||||||
|
tagRow = models.db_session.query(
|
||||||
|
models.Tag
|
||||||
|
).filter(
|
||||||
|
models.Tag.id==tag
|
||||||
|
).first()
|
||||||
|
if tagRow is None:
|
||||||
|
raise ValueError
|
||||||
|
page = models.db_session.query(
|
||||||
|
models.Page
|
||||||
|
).filter(
|
||||||
|
models.Page.id==id
|
||||||
|
).first()
|
||||||
|
if page is None:
|
||||||
|
raise ValueError
|
||||||
|
exist = models.db_session.query(
|
||||||
|
models.TagPage
|
||||||
|
).filter(
|
||||||
|
models.TagPage.tag_id==tagRow.id,
|
||||||
|
models.TagPage.page_id==page.id
|
||||||
|
).first()
|
||||||
|
if exist:
|
||||||
|
raise ValueError
|
||||||
|
newtagpage = models.TagPage(
|
||||||
|
page,
|
||||||
|
tagRow
|
||||||
|
)
|
||||||
|
models.db_session.add(newtagpage)
|
||||||
|
models.db_session.commit()
|
||||||
|
result = tagRow.as_dict()
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
@jsonrpc.method('tag.page.delete(id=int, tag=int)')
|
||||||
|
@login_required
|
||||||
|
def tag_page_delete(tag, id):
|
||||||
|
"""
|
||||||
|
Удаление тега со страницы
|
||||||
|
"""
|
||||||
|
exist = models.db_session.query(
|
||||||
|
models.TagPage
|
||||||
|
).filter(
|
||||||
|
models.TagPage.tag_id==tag,
|
||||||
|
models.TagPage.page_id==id
|
||||||
|
).first()
|
||||||
|
if exist is None:
|
||||||
|
raise ValueError
|
||||||
|
models.db_session.delete(exist)
|
||||||
|
models.db_session.commit()
|
||||||
|
return 'Тег {} удален'.format(id)
|
||||||
|
|
||||||
|
|
||||||
|
@jsonrpc.method('tag.pages(id=int, page=int)')
|
||||||
|
def tag_pages_list(id, page):
|
||||||
|
"""
|
||||||
|
Список статей
|
||||||
|
"""
|
||||||
|
tag = models.db_session.query(
|
||||||
|
models.Tag
|
||||||
|
).filter(
|
||||||
|
models.Tag.id==id
|
||||||
|
).first()
|
||||||
|
if tag is None:
|
||||||
|
raise ValueError
|
||||||
|
indexes = models.db_session.query(
|
||||||
|
models.TagPage.page_id
|
||||||
|
).filter(
|
||||||
|
models.TagPage.tag_id==id
|
||||||
|
)
|
||||||
|
pages = models.db_session.query(
|
||||||
|
models.Page
|
||||||
|
).filter(
|
||||||
|
models.Page.id.in_(indexes)
|
||||||
|
).order_by(
|
||||||
|
models.Page.title.asc()
|
||||||
|
)
|
||||||
|
pages = lib.getpage(
|
||||||
|
pages,
|
||||||
|
page,
|
||||||
|
app.config['ITEMS_ON_PAGE']
|
||||||
|
).all()
|
||||||
|
|
||||||
|
result = []
|
||||||
|
for page in pages:
|
||||||
|
newRow = page.as_dict()
|
||||||
|
newRow['user'] = page.user.as_dict()
|
||||||
|
newRow['tags'] = []
|
||||||
|
for tagLink in page.tags:
|
||||||
|
newRow['tags'].append(tagLink.tag.as_dict())
|
||||||
|
result.append(newRow)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
@jsonrpc.method('tag.pages.count(id=int)')
|
||||||
|
def tag_pages_count(id):
|
||||||
|
"""Общее количество статей
|
||||||
|
"""
|
||||||
|
tag = models.db_session.query(
|
||||||
|
models.Tag
|
||||||
|
).filter(
|
||||||
|
models.Tag.id==id
|
||||||
|
).first()
|
||||||
|
if tag is None:
|
||||||
|
raise ValueError
|
||||||
|
indexes = models.db_session.query(
|
||||||
|
models.TagPage.page_id
|
||||||
|
).filter(
|
||||||
|
models.TagPage.tag_id==id
|
||||||
|
)
|
||||||
|
result = models.db_session.query(
|
||||||
|
models.Page
|
||||||
|
).filter(
|
||||||
|
models.Page.id.in_(indexes)
|
||||||
|
).count()
|
||||||
|
return result
|
||||||
103
myapp/ns_api/tag/tag.py
Normal file
103
myapp/ns_api/tag/tag.py
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
__author__ = 'RemiZOffAlex'
|
||||||
|
__copyright__ = '(c) RemiZOffAlex'
|
||||||
|
__license__ = 'MIT'
|
||||||
|
__email__ = 'remizoffalex@mail.ru'
|
||||||
|
__url__ = 'https://remizoffalex.ru'
|
||||||
|
|
||||||
|
from .. import jsonrpc, login_required
|
||||||
|
from ... import app, lib, models
|
||||||
|
|
||||||
|
|
||||||
|
@jsonrpc.method('tag.add(name=str)')
|
||||||
|
@login_required
|
||||||
|
def tag_add(name):
|
||||||
|
"""
|
||||||
|
Добавить новый тег
|
||||||
|
"""
|
||||||
|
exist = models.db_session.query(
|
||||||
|
models.Tag
|
||||||
|
).filter(
|
||||||
|
models.Tag.name == name
|
||||||
|
).first()
|
||||||
|
if exist:
|
||||||
|
raise ValueError
|
||||||
|
|
||||||
|
newTag = models.Tag(name)
|
||||||
|
models.db_session.add(newTag)
|
||||||
|
models.db_session.commit()
|
||||||
|
return newTag.as_dict()
|
||||||
|
|
||||||
|
|
||||||
|
@jsonrpc.method('tag.delete(id=int)')
|
||||||
|
@login_required
|
||||||
|
def tag_delete(id):
|
||||||
|
"""
|
||||||
|
Удалить тег
|
||||||
|
"""
|
||||||
|
exist = models.db_session.query(
|
||||||
|
models.Tag
|
||||||
|
).filter(
|
||||||
|
models.Tag.id==id
|
||||||
|
).first()
|
||||||
|
if exist is None:
|
||||||
|
raise ValueError
|
||||||
|
|
||||||
|
models.db_session.delete(exist)
|
||||||
|
models.db_session.commit()
|
||||||
|
return 'OK'
|
||||||
|
|
||||||
|
|
||||||
|
@jsonrpc.method('tag.exist(name=str)')
|
||||||
|
def tag_exist(name):
|
||||||
|
"""
|
||||||
|
Проверить существует ли тег и вернуть информацию о нём
|
||||||
|
"""
|
||||||
|
text = name.lower().strip()
|
||||||
|
tagRow = models.db_session.query(
|
||||||
|
models.Tag
|
||||||
|
).filter(
|
||||||
|
models.Tag.name==text
|
||||||
|
).first()
|
||||||
|
if tagRow is None:
|
||||||
|
raise ValueError
|
||||||
|
result = {
|
||||||
|
'id': tagRow.id,
|
||||||
|
'name': tagRow.name
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
@jsonrpc.method('tags()')
|
||||||
|
def tags_list():
|
||||||
|
"""
|
||||||
|
Список тегов
|
||||||
|
"""
|
||||||
|
tags = models.db_session.query(
|
||||||
|
models.Tag
|
||||||
|
).all()
|
||||||
|
|
||||||
|
result = []
|
||||||
|
for tag in tags:
|
||||||
|
newRow = tag.as_dict()
|
||||||
|
result.append(newRow)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
@jsonrpc.method('tags.groups')
|
||||||
|
def tags_groups():
|
||||||
|
"""
|
||||||
|
Облако тегов
|
||||||
|
"""
|
||||||
|
tags = models.db_session.query(
|
||||||
|
models.Tag
|
||||||
|
).order_by(
|
||||||
|
models.Tag.name
|
||||||
|
).all()
|
||||||
|
result = {}
|
||||||
|
for tag in tags:
|
||||||
|
tag_json = tag.as_dict()
|
||||||
|
if tag.name[0] in result:
|
||||||
|
result[tag.name[0]].append(tag_json)
|
||||||
|
else:
|
||||||
|
result[tag.name[0]] = [tag_json]
|
||||||
|
return result
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
{{ note.title }}
|
{{ note.title }}
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<tags-component v-bind:tags="note.tags" v-bind:node="note.id" v-bind:url="'Note'"></tags-component>
|
<tags-component v-bind:tags="note.tags" v-bind:resource="{id: note.id, name: 'note'}"></tags-component>
|
||||||
|
|
||||||
<span v-html="note.body"></span>
|
<span v-html="note.body"></span>
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
{{ page.title }}
|
{{ page.title }}
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<tags-component v-bind:tags="page.tags" v-bind:node="page.id" v-bind:url="'Page'"></tags-component>
|
<tags-component v-bind:tags="page.tags" v-bind:resource="{id: page.id, name: 'page'}"></tags-component>
|
||||||
|
|
||||||
<span v-html="page.body"></span>
|
<span v-html="page.body"></span>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
/*
|
||||||
|
<tags-component v-bind:tags="document.tags" v-bind:resource="{id: document.id, name: 'document'}"></tags-component>
|
||||||
|
<script type="text/javascript" src="/static/components/tags.js"></script>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
var tagsTemplate = `
|
var tagsTemplate = `
|
||||||
<div>
|
<div>
|
||||||
<!-- Начало: Теги -->
|
<!-- Начало: Теги -->
|
||||||
@@ -7,9 +13,9 @@ var tagsTemplate = `
|
|||||||
|
|
||||||
<div class="btn btn-outline-success mb-1" v-on:click="showPanel(panels.standart)"><i class="fa fa-plus"></i></div>
|
<div class="btn btn-outline-success mb-1" v-on:click="showPanel(panels.standart)"><i class="fa fa-plus"></i></div>
|
||||||
|
|
||||||
<div class="btn-group mr-2 mb-1" v-for="(tag, index) in sortedTags">
|
<div class="btn-group mr-2 mb-1" v-for="(tag, tagIdx) in sortedTags">
|
||||||
<a class="btn btn-outline-secondary text-monospace" :href="'/tag/' + tag.id">{{ tag.name }}</a>
|
<a class="btn btn-outline-secondary text-monospace" :href="'/tag/' + tag.id">{{ tag.name }}</a>
|
||||||
<div class="btn btn-outline-danger" v-on:click="removeTag(tag.id)"><i class="fa fa-remove"></i></div>
|
<div class="btn btn-outline-danger" v-on:click="removeTag(tag)"><i class="fa fa-remove"></i></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -25,8 +31,8 @@ var tagsTemplate = `
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row mt-3">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col py-2">
|
||||||
<template v-for="(tags, key, index) in groups">
|
<template v-for="(tags, key, index) in groups">
|
||||||
|
|
||||||
<a class="btn btn-outline-secondary mt-2 mr-2" v-if="(index % 2)===0" :href="'#' + index">{{ key }}</a>
|
<a class="btn btn-outline-secondary mt-2 mr-2" v-if="(index % 2)===0" :href="'#' + index">{{ key }}</a>
|
||||||
@@ -56,8 +62,8 @@ var tagsTemplate = `
|
|||||||
<div class="col pr-0">
|
<div class="col pr-0">
|
||||||
<a :name="index" class="btn btn-outline-danger mr-2 mb-1">{{ key }}</a>
|
<a :name="index" class="btn btn-outline-danger mr-2 mb-1">{{ key }}</a>
|
||||||
<template v-for="(tag, tagIdx) in tags">
|
<template v-for="(tag, tagIdx) in tags">
|
||||||
<div class="btn btn-outline-secondary mr-2 mb-1" v-if="!tag_ids.includes(tag.id)" v-on:click="tag_add_to_node(tag)">{{ tag.name }}</div>
|
<button type="button" class="btn btn-primary mr-2 mb-1" v-if="tag_includes(tag)" v-on:click="removeTag(tag)">{{ tag.name }}</button>
|
||||||
<div class="btn btn-primary mr-2 mb-1" v-else v-on:click="removeTag(tag.id)">{{ tag.name }}</div>
|
<button type="button" class="btn btn-outline-secondary mr-2 mb-1" v-else v-on:click="tag_add_to_node(tag)">{{ tag.name }}</button>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -72,10 +78,6 @@ Vue.component('tags-component', {
|
|||||||
return {
|
return {
|
||||||
newtag: '',
|
newtag: '',
|
||||||
groups: {},
|
groups: {},
|
||||||
forms: {
|
|
||||||
modal: false,
|
|
||||||
panel: false
|
|
||||||
},
|
|
||||||
panels: {
|
panels: {
|
||||||
standart: {
|
standart: {
|
||||||
visible: false
|
visible: false
|
||||||
@@ -86,7 +88,7 @@ Vue.component('tags-component', {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
props: ['tags', 'node', 'url'],
|
props: ['tags', 'resource'],
|
||||||
template: tagsTemplate,
|
template: tagsTemplate,
|
||||||
methods: {
|
methods: {
|
||||||
arrayRemove: function(arr, value) {
|
arrayRemove: function(arr, value) {
|
||||||
@@ -95,31 +97,24 @@ Vue.component('tags-component', {
|
|||||||
return ele != value;
|
return ele != value;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
removeTag: function (id) {
|
removeTag: function (tag) {
|
||||||
/* Удаление тега из ресурса */
|
/* Удаление тега из ресурса */
|
||||||
let vm = this;
|
let vm = this;
|
||||||
var tag = null;
|
|
||||||
for (var i = 0; i < vm.tags.length; i++) {
|
|
||||||
if (id == vm.tags[i].id) {
|
|
||||||
tag = vm.tags[i]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!tag) {return;}
|
|
||||||
axios.post(
|
axios.post(
|
||||||
'/api',
|
'/api',
|
||||||
{
|
{
|
||||||
"jsonrpc": "2.0",
|
"jsonrpc": "2.0",
|
||||||
"method": 'tag.deleteFrom' + vm.url,
|
"method": 'tag.' + vm.resource.name + '.delete',
|
||||||
"params": {
|
"params": {
|
||||||
"id": vm.node,
|
"tag": tag.id,
|
||||||
"tag": tag.id
|
"id": vm.resource.id
|
||||||
},
|
},
|
||||||
"id": 1
|
"id": 1
|
||||||
}
|
}
|
||||||
).then(
|
).then(
|
||||||
function(response) {
|
function(response) {
|
||||||
if ('result' in response.data) {
|
if ('result' in response.data) {
|
||||||
vm.tags = vm.arrayRemove(vm.tags, tag);
|
vm.tags = vm.arrayRemove(vm.tags, vm.tag_includes(tag));
|
||||||
} else if ('error' in response.data) {
|
} else if ('error' in response.data) {
|
||||||
console.log(response.data);
|
console.log(response.data);
|
||||||
}
|
}
|
||||||
@@ -190,9 +185,9 @@ Vue.component('tags-component', {
|
|||||||
'/api',
|
'/api',
|
||||||
{
|
{
|
||||||
"jsonrpc": "2.0",
|
"jsonrpc": "2.0",
|
||||||
"method": 'tag.addTo' + this.url,
|
"method": 'tag.' + vm.resource.name + '.add',
|
||||||
"params": {
|
"params": {
|
||||||
"id": vm.node,
|
"id": vm.resource.id,
|
||||||
"tag": tag.id
|
"tag": tag.id
|
||||||
},
|
},
|
||||||
"id": 1
|
"id": 1
|
||||||
@@ -234,20 +229,19 @@ Vue.component('tags-component', {
|
|||||||
/* Показать/скрыть панель */
|
/* Показать/скрыть панель */
|
||||||
panel.visible = !panel.visible;
|
panel.visible = !panel.visible;
|
||||||
},
|
},
|
||||||
|
tag_includes: function(tag) {
|
||||||
|
let vm = this;
|
||||||
|
let result = vm.tags.find(function(element, index, array) {
|
||||||
|
return element.id===tag.id;
|
||||||
|
}, tag);
|
||||||
|
return result;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
mounted: function() {
|
mounted: function() {
|
||||||
let vm = this;
|
let vm = this;
|
||||||
vm.getTags();
|
vm.getTags();
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
tag_ids: function() {
|
|
||||||
let vm = this;
|
|
||||||
var result = [];
|
|
||||||
for (var i = 0; i < vm.tags.length; i++) {
|
|
||||||
result.push(vm.tags[i].id);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
sortedTags: function() {
|
sortedTags: function() {
|
||||||
let vm = this;
|
let vm = this;
|
||||||
if (vm.tags === undefined) {return [];}
|
if (vm.tags === undefined) {return [];}
|
||||||
|
|||||||
Reference in New Issue
Block a user