EN · DE · RU · FR · ES

#76: DataTransferAuditDO.kt

plugins/org.projectforge.plugins.datatransfer/src/main/kotlin/org/projectforge/plugins/datatransfer/DataTransferAuditDO.kt Тип: Kotlin · Роль: Регистрация плагина · Источник: plugins/org.projectforge.plugins.datatransfer/src/main/kotlin/org/projectforge/plugins/datatransfer/DataTransferAuditDO.kt 182 строки · 114 кода · 44 комментария · 24 пустых
JPA-сущность (объект данных), представляющая DataTransferAudit в базе данных. Отображается в таблицу с помощью аннотаций Hibernate, JPA-связей и транзиентных вычисляемых свойств.

Структура кода

Аннотации: Indexed, micromata, Table, author, get, NamedQueries, JsonSerialize, Entity

Классы: DataTransferAuditDO, Action

Enum-классы: Action

JPA-сущности: DataTransferAuditDO (таблица: t_plugin_datatransfer_audit)

Функции (2): createdByUserAsString, toString

Свойства (23): id, timestamp, areaId, byUser, byExternalUser, eventType, description, descriptionOld, uploadByUser, filename, filenameOld, notified, timeAgo, eventAsString, byUserAsString, filenameAsString, descriptionAsString, DELETE_OLD_ENTRIES, FIND_BY_AREA_ID, FIND_BY_ID, FIND_DOWNLOADS_BY_AREA_ID, FIND_QUEUED_ENTRIES_SENT_BY_AREA_ID_IGNORE_TYPES, UPDATE_NOTIFICATION_STATUS

Импорты: 11 пакетов

Пакет: org.projectforge.plugins.datatransfer

Исходный код (сокращённый)

package org.projectforge.plugins.datatransfer

import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.annotation.JsonSerialize
import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed
import org.projectforge.Constants
import org.projectforge.framework.i18n.TimeAgo
import org.projectforge.framework.i18n.translate
import org.projectforge.framework.jcr.AttachmentsEventType
import org.projectforge.framework.persistence.user.entities.PFUserDO
import java.util.*
import jakarta.persistence.*
import org.projectforge.framework.json.IdOnlySerializer

/**
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
@Entity
@Indexed
@Table(name = "t_plugin_datatransfer_audit")
@NamedQueries(
  NamedQuery(
    name = DataTransferAuditDO.DELETE_OLD_ENTRIES,
    query = "delete from DataTransferAuditDO where timestamp<=:timestamp"
  ),
  NamedQuery(
    name = DataTransferAuditDO.FIND_DOWNLOADS_BY_AREA_ID,
    query = "from DataTransferAuditDO where areaId=:areaId and eventType in :eventTypes order by timestamp desc"
  ),
  NamedQuery(
    name = DataTransferAuditDO.FIND_BY_AREA_ID,
    query = "from DataTransferAuditDO where areaId=:areaId order by timestamp desc"
  ),
  NamedQuery(
    name = DataTransferAuditDO.FIND_BY_ID,
    query = "from DataTransferAuditDO where id=:id"
  ),
  NamedQuery(
    name = DataTransferAuditDO.FIND_QUEUED_ENTRIES_SENT_BY_AREA_ID_IGNORE_TYPES,
    query = "from DataTransferAuditDO where areaId=:areaId and notified=false and eventType not in :eventTypes order by timestamp desc"
  ),
  NamedQuery(
    name = DataTransferAuditDO.UPDATE_NOTIFICATION_STATUS,
    query = "update DataTransferAuditDO set notified=true where id IN :idList"
  ),
)
open class DataTransferAuditDO {
  enum class Action { DELETE, DOWNLOAD, MODIFIED, UPLOAD }

  @get:Id
  @get:GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "hibernate_sequence")
  @get:Column(name = "pk")
  open var id: Long? = null

  @get:Column
  open var timestamp: Date? = null

  /**
   * Без ограничения (область может быть удалена тем временем).
   */
  @get:Column(name = "area_fk", nullable = false)
  open var areaId: Long? = null

  @get:ManyToOne(fetch = FetchType.LAZY)
  @get:JoinColumn(name = "by_user_fk")
  @JsonSerialize(using = IdOnlySerializer::class)
  open var byUser: PFUserDO? = null

  @get:Column(name = "by_external_user", length = 4000)
  open var byExternalUser: String? = null


  @get:Enumerated(EnumType.STRING)
  @get:Column(name = "event_type", length = 20, nullable = false)
  open var eventType: AttachmentsEventType? = null

  @get:Column(length = Constants.LENGTH_TEXT)
  open var description: String? = null

  /**
   * Старое значение описания (если изменено).
   */
  @get:Column(name = "description_old", length = Constants.LENGTH_TEXT)
  open var descriptionOld: String? = null

  /**
   * Пользователь, загрузивший файл. Сохраняется здесь, так как файл может быть удалён тем временем, чтобы уведомить
   * этого пользователя об удалении и любых других изменениях и загрузках.
   */
  @get:ManyToOne(fetch = FetchType.LAZY)
  @get:JoinColumn(name = "upload_by_user_fk")
  @JsonSerialize(using = IdOnlySerializer::class)
  open var uploadByUser: PFUserDO? = null

  @get:Column(length = 1000)
  open var filename: String? = null

  /**
   * Старое значение описания (если изменено).
   */
  @get:Column(name = "filename_old", length = 1000)
  open var filenameOld: String? = null

  /**
   * Отправлено ли уведомление всем наблюдателям? Также устанавливается в true после обработки, если наблюдатель не зарегистрирован.
   */
  @get:Column(name = "notified")
  open var notified: Boolean = false

  /**
   * Временная метка события в виде удобочитаемого сообщения о времени, прошедшем с момента события.
   */
  @get:Transient
  @get:JsonProperty(access = JsonProperty.Access.READ_ONLY)
  open val timeAgo
    get() = TimeAgo.getMessage(timestamp)

  @get:Transient
  @get:JsonProperty(access = JsonProperty.Access.READ_ONLY)
// ... (сокращено, всего 160 строк)

История Git

868d6abb7 2025 → 2026
63081666f Заголовки исходных файлов: 2024 → 2025.
0237d5eba Рефакторинг JSON-сериализации: введены IdOnlySerializer и IdsOnlySerializer.
ca9851ba0 WIP: gradle...
1ffa5a1ef WIP: gradle...