Class: DbdocEngine::TableGroupsService

Inherits:
Object
  • Object
show all
Defined in:
app/services/dbdoc_engine/table_groups_service.rb

Instance Method Summary collapse

Constructor Details

#initialize(params) ⇒ TableGroupsService

Returns a new instance of TableGroupsService.



4
5
6
7
# File 'app/services/dbdoc_engine/table_groups_service.rb', line 4

def initialize(params)
  @params = params
  @errors = []
end

Instance Method Details

#create_group ⇒ Object

Create a new table group



23
24
25
26
27
28
29
30
# File 'app/services/dbdoc_engine/table_groups_service.rb', line 23

def create_group
  table_group = DbdocEngine::DbDesignTableGroupQueries.create_table_group(table_group_params)
  if table_group.persisted?
    { success: true, message: I18n.t("dbdoc.group_creation") }
  else
    { success: false, errors: table_group.errors.full_messages, table_group: table_group }
  end
end

#delete_group(table_group) ⇒ Object

Soft delete a table group



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'app/services/dbdoc_engine/table_groups_service.rb', line 42

def delete_group(table_group)
  # Check if the group has any active tables
  if DbdocEngine::DbDesignDynamicTableQueries.group_has_active_tables?(table_group.id, false)
    add_error(I18n.t("dbdoc.group_delete_validation"))
    return failure_result
  end

  # Store original name before changing it
  original_name = table_group.group_name

  # Append ID to the group name for soft deletion
  new_name = "#{original_name}_deleted_#{table_group.id}"

  # Update the group name before soft deletion
  table_group.group_name = new_name

  if table_group.soft_delete
    # Log the soft deletion to changelog
    DbdocEngine::DbDesignChangelogQueries.log_change(
      DbDesignChangelog::ACTION_DELETE,
      DbDesignChangelog::ENTITY_TABLE_GROUP,
      original_name,
      "Soft deleted table group '#{original_name}'",
      table_group.updated_by,
      {
        group_name: original_name,
        group_color: table_group.group_color,
        deleted: true
      },
      nil
    )
    { success: true, message: I18n.t("dbdoc.group_deletion") }
  else
    add_error("Unable to delete table group.")
    failure_result
  end
end

#existing_group_names ⇒ Object

Get existing group names, excluding the current one being edited



153
154
155
# File 'app/services/dbdoc_engine/table_groups_service.rb', line 153

def existing_group_names
  DbdocEngine::DbDesignTableGroupQueries.group_names_except(@params[:id])
end

#fetch_deleted_groups ⇒ Object

Fetch only soft-deleted table groups



17
18
19
20
# File 'app/services/dbdoc_engine/table_groups_service.rb', line 17

def fetch_deleted_groups
  query = DbdocEngine::DbDesignTableGroupQueries.search_deleted_groups(@params[:search])
  query.page(@params[:page]).per(5)
end

#fetch_table_groups ⇒ Object

Fetch table groups with optional search and soft-delete filters



10
11
12
13
14
# File 'app/services/dbdoc_engine/table_groups_service.rb', line 10

def fetch_table_groups
  showing_deleted = @params[:show_deleted] == "true"
  query = DbdocEngine::DbDesignTableGroupQueries.search_all_groups(@params[:search], showing_deleted)
  [ query.page(@params[:page]).per(6), showing_deleted ]
end

#permanent_delete_group(table_group) ⇒ Object

Permanently delete a table group



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'app/services/dbdoc_engine/table_groups_service.rb', line 115

def permanent_delete_group(table_group)
  # Check if the group has any associated tables (including soft-deleted ones)
  if DbdocEngine::DbDesignDynamicTableQueries.group_has_active_tables?(table_group.id, true)
    add_error(I18n.t("dbdoc.group_permanent_delete_validation"))
    return failure_result
  end

  # Extract the original name from the current name
  original_name = extract_original_name(table_group.group_name)

  # Store table group info before destruction for logging
  group_info = {
    group_name: original_name,
    group_color: table_group.group_color,
    permanently_deleted: true
  }

  # Use query class for permanent deletion
  if DbdocEngine::DbDesignTableGroupQueries.permanent_delete(table_group)
    # Use query class for logging
    DbdocEngine::DbDesignChangelogQueries.log_change(
      DbDesignChangelog::ACTION_DELETE,
      DbDesignChangelog::ENTITY_TABLE_GROUP,
      original_name,
      "Permanently deleted table group '#{original_name}'",
      "Super Admin",
      group_info,
      nil
    )
    message = I18n.t("dbdoc.success.table_group_permanently_deleted", original_name: original_name)
    { success: true, message: message }
  else
    add_error("Unable to permanently delete table group '#{original_name}'.")
    failure_result
  end
end

#restore_group(table_group) ⇒ Object

Restore a soft-deleted table group



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'app/services/dbdoc_engine/table_groups_service.rb', line 81

def restore_group(table_group)
  # Extract the original name from the current name
  original_name = extract_original_name(table_group.group_name)

  # Check if another group with the same name exists
  if DbdocEngine::DbDesignTableGroupQueries.group_exists?(original_name)
    add_error(I18n.t("dbdoc.group_restore_validation"))
    return failure_result
  end

  # Restore the original name
  table_group.group_name = original_name

  # Use query class for restoration
  if DbdocEngine::DbDesignTableGroupQueries.restore(table_group)
    # Use query class for logging
    DbdocEngine::DbDesignChangelogQueries.log_change(
      DbDesignChangelog::ACTION_UPDATE,
      DbDesignChangelog::ENTITY_TABLE_GROUP,
      original_name,
      "Restored deleted table group '#{original_name}'",
      "Super Admin",
      { deleted: true, group_name: table_group.group_name },
      { deleted: false, group_name: original_name }
    )
    message = I18n.t("dbdoc.success.group_restored", original_name: original_name)
    { success: true, message: message }
  else
    add_error("Unable to restore group '#{original_name}'.")
    failure_result
  end
end

#update_group(table_group) ⇒ Object

Update an existing table group



33
34
35
36
37
38
39
# File 'app/services/dbdoc_engine/table_groups_service.rb', line 33

def update_group(table_group)
  if DbdocEngine::DbDesignTableGroupQueries.update_table_group(table_group, table_group_params)
    { success: true, message: I18n.t("dbdoc.group_updation") }
  else
    { success: false, errors: table_group.errors.full_messages, table_group: table_group }
  end
end