Skip to content

account deletion & minor changes#14

Closed
Camper-CoolDie wants to merge 4 commits intotimas130:masterfrom
Camper-CoolDie:master
Closed

account deletion & minor changes#14
Camper-CoolDie wants to merge 4 commits intotimas130:masterfrom
Camper-CoolDie:master

Conversation

@Camper-CoolDie
Copy link
Contributor

  • Новая функция удаления аккаунта
    • Доступ к ней есть только у протоадминов
    • Опция: можно удалить все публикации пользователя вместе с аккаунтом
    • Требует подтверждения путём ручного ввода ника удаляемого пользователя
    • Я старался делать удаление всего, что связано с деятельностью аккаунта, но такие вещи, как оценки на публикациях удалять нет необходимости, потому что у кого-то их может быть свыше 50 тысяч (и счётчики могут поломаться)
    • Если делать самостоятельное удаление аккаунта, то только через метод ControllerAccounts.delete()
    • Если что-то забыл, то напиши, постараюсь исправить в скорое время
  • Кнопка изменения статуса/описания теперь имеет иконку крестика, если подразумевается удаление админом
  • Некоторые запросы, которые теперь нигде не используются выпилены
  • Добавил парочку переводов в места, где они зарадкожены

(улучшение рейтингов сделаю, но позже)

val imageTitleId: Long = v.next()
val imageTitleGifId: Long = v.next()

RustAuth.delete(accountId)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше не удалять аккаунт прям полностью из базы данных. Лучше "анонимизировать" его, просто переименовав в deleted#[ID]. Таким образом другие упоминания удалённого пользователя не сломают сервер.

Comment on lines +338 to +390
val selectComments = ControllerPublications.instanceSelect(0)
.where(TPublications.publication_type, "=", API.PUBLICATION_TYPE_COMMENT)
.where(TPublications.creator_id, "=", accountId)
val comments = ControllerPublications.parseSelect(Database.select("ControllerAccounts.remove.removeComments", selectComments))

val selectMessages = ControllerPublications.instanceSelect(0)
.where(TPublications.publication_type, "=", API.PUBLICATION_TYPE_CHAT_MESSAGE)
.where(TPublications.creator_id, "=", accountId)
val messages = ControllerPublications.parseSelect(Database.select("ControllerAccounts.remove.removeMessages", selectMessages))

// remove all stickers' resources
val selectStickerPacks = ControllerPublications.instanceSelect(0)
.where(TPublications.publication_type, "=", API.PUBLICATION_TYPE_STICKERS_PACK)
.where(TPublications.creator_id, "=", accountId)
val stickerPacks = ControllerPublications.parseSelect(Database.select("ControllerAccounts.remove.removeStickerPacks", selectStickerPacks))
for (pack in stickerPacks) {
val stickers = ControllerPublications.parseSelect(
Database.select("ControllerAccounts.remove.removeStickerPacks select", ControllerPublications.instanceSelect(0)
.where(TPublications.tag_1, "=", pack.id)
.where(TPublications.publication_type, "=", API.PUBLICATION_TYPE_STICKER))
)
for (sticker in stickers) {
sticker as PublicationSticker
ControllerResources.remove(sticker.imageId)
ControllerResources.remove(sticker.gifId)
}
}

// remove all post pages' resources
val selectPosts = ControllerPublications.instanceSelect(0)
.where(TPublications.publication_type, "=", API.PUBLICATION_TYPE_POST)
.where(TPublications.creator_id, "=", accountId)
val posts = ControllerPublications.parseSelect(Database.select("ControllerAccounts.remove.removePostPages", selectPosts))
for (post in posts) {
post as PublicationPost
for (page in post.pages) ControllerPost.removePage(page)
}

Database.remove("ControllerAccounts.remove.removePublications", SqlQueryRemove(TPublications.NAME)
.where(TPublications.creator_id, "=", accountId))

// some things need to be updated after publications have been removed

for (comment in comments) {
Database.update("ControllerAccounts.remove.removeComments update", SqlQueryUpdate(TPublications.NAME)
.where(TPublications.id, "=", comment.parentPublicationId)
.update(TPublications.subpublications_count, TPublications.subpublications_count + "-1"))
ControllerPublications.recountBestComment(comment.parentPublicationId, comment.id)
}

for (message in messages) {
ControllerChats.onMessagesRemoved((message as PublicationChatMessage).chatTag(), 1)
}
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не, совсем фигово получается. Допустим у человека будет под 20к сообщений (есть такие), тогда при удалении встанет чуть ли не всё. Можно какую-нибудь локальную extension function на Database, которая итерирует над строками, а сама подгружает их по штук 100. Для вещей внизу, которые должны обновиться после удаления публикаций, можно просто хранить нужные данные во вспомогательном списке.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants