feat: 소프트삭제 및 타임스탬프 감사 컬럼 추가
- deleted_at이 있는 30개 테이블에 deleted_by 추가 - created_at이 있는 38개 비즈니스 테이블에 created_by, updated_by 추가 - 시스템 테이블 제외 - nullable, COMMENT 포함 - 롤백(down) 메서드 구현
This commit is contained in:
3699
CURRENT_WORKS.md
3699
CURRENT_WORKS.md
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,179 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* created_by, updated_by 컬럼 추가
|
||||
*
|
||||
* 시스템 테이블 제외, 비즈니스 테이블만 추가
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
// 시스템 테이블 제외 목록
|
||||
$excludeTables = [
|
||||
'jobs',
|
||||
'job_batches',
|
||||
'password_reset_tokens',
|
||||
'personal_access_tokens',
|
||||
'taggables',
|
||||
'tags',
|
||||
];
|
||||
|
||||
$tables = [
|
||||
'api_keys',
|
||||
'archived_record_relations',
|
||||
'archived_records',
|
||||
'audit_logs',
|
||||
'board_comments',
|
||||
'board_files',
|
||||
'board_settings',
|
||||
'boards',
|
||||
'bom_template_items',
|
||||
'bom_templates',
|
||||
'classifications',
|
||||
'clients',
|
||||
'common_codes',
|
||||
'demo_links',
|
||||
'department_user',
|
||||
'file_share_links',
|
||||
'main_request_flows',
|
||||
'model_versions',
|
||||
'models',
|
||||
'order_histories',
|
||||
'order_items',
|
||||
'orders',
|
||||
'payments',
|
||||
'permission_overrides',
|
||||
'permissions',
|
||||
'plans',
|
||||
'post_custom_field_values',
|
||||
'posts',
|
||||
'prospects',
|
||||
'roles',
|
||||
'setting_field_defs',
|
||||
'subscriptions',
|
||||
'tenant_bootstrap_runs',
|
||||
'tenant_user_profiles',
|
||||
'tenants',
|
||||
'user_roles',
|
||||
'user_tenants',
|
||||
'users',
|
||||
];
|
||||
|
||||
foreach ($tables as $tableName) {
|
||||
if (!Schema::hasTable($tableName) || in_array($tableName, $excludeTables)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Schema::table($tableName, function (Blueprint $table) use ($tableName) {
|
||||
// created_by 추가
|
||||
if (!Schema::hasColumn($tableName, 'created_by')) {
|
||||
// updated_at 다음에 추가
|
||||
if (Schema::hasColumn($tableName, 'updated_at')) {
|
||||
$table->foreignId('created_by')
|
||||
->nullable()
|
||||
->after('updated_at')
|
||||
->comment('생성자 사용자 ID');
|
||||
} else {
|
||||
$table->foreignId('created_by')
|
||||
->nullable()
|
||||
->comment('생성자 사용자 ID');
|
||||
}
|
||||
}
|
||||
|
||||
// updated_by 추가
|
||||
if (!Schema::hasColumn($tableName, 'updated_by')) {
|
||||
// created_by 다음에 추가
|
||||
if (Schema::hasColumn($tableName, 'created_by')) {
|
||||
$table->foreignId('updated_by')
|
||||
->nullable()
|
||||
->after('created_by')
|
||||
->comment('수정자 사용자 ID');
|
||||
} else {
|
||||
$table->foreignId('updated_by')
|
||||
->nullable()
|
||||
->comment('수정자 사용자 ID');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
$excludeTables = [
|
||||
'jobs',
|
||||
'job_batches',
|
||||
'password_reset_tokens',
|
||||
'personal_access_tokens',
|
||||
'taggables',
|
||||
'tags',
|
||||
];
|
||||
|
||||
$tables = [
|
||||
'api_keys',
|
||||
'archived_record_relations',
|
||||
'archived_records',
|
||||
'audit_logs',
|
||||
'board_comments',
|
||||
'board_files',
|
||||
'board_settings',
|
||||
'boards',
|
||||
'bom_template_items',
|
||||
'bom_templates',
|
||||
'classifications',
|
||||
'clients',
|
||||
'common_codes',
|
||||
'demo_links',
|
||||
'department_user',
|
||||
'file_share_links',
|
||||
'main_request_flows',
|
||||
'model_versions',
|
||||
'models',
|
||||
'order_histories',
|
||||
'order_items',
|
||||
'orders',
|
||||
'payments',
|
||||
'permission_overrides',
|
||||
'permissions',
|
||||
'plans',
|
||||
'post_custom_field_values',
|
||||
'posts',
|
||||
'prospects',
|
||||
'roles',
|
||||
'setting_field_defs',
|
||||
'subscriptions',
|
||||
'tenant_bootstrap_runs',
|
||||
'tenant_user_profiles',
|
||||
'tenants',
|
||||
'user_roles',
|
||||
'user_tenants',
|
||||
'users',
|
||||
];
|
||||
|
||||
foreach ($tables as $tableName) {
|
||||
if (!Schema::hasTable($tableName) || in_array($tableName, $excludeTables)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Schema::table($tableName, function (Blueprint $table) use ($tableName) {
|
||||
// updated_by 먼저 제거
|
||||
if (Schema::hasColumn($tableName, 'updated_by')) {
|
||||
$table->dropColumn('updated_by');
|
||||
}
|
||||
|
||||
// created_by 제거
|
||||
if (Schema::hasColumn($tableName, 'created_by')) {
|
||||
$table->dropColumn('created_by');
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* 소프트 삭제 테이블에 deleted_by 컬럼 추가
|
||||
*
|
||||
* deleted_at이 있지만 deleted_by가 없는 테이블 30개에 추가
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
$tables = [
|
||||
'board_comments',
|
||||
'bom_templates',
|
||||
'classifications',
|
||||
'common_codes',
|
||||
'department_user',
|
||||
'lot_sales',
|
||||
'lots',
|
||||
'main_requests',
|
||||
'material_inspection_items',
|
||||
'material_inspections',
|
||||
'material_receipts',
|
||||
'materials',
|
||||
'model_versions',
|
||||
'models',
|
||||
'order_item_components',
|
||||
'order_items',
|
||||
'orders',
|
||||
'payments',
|
||||
'permission_overrides',
|
||||
'plans',
|
||||
'posts',
|
||||
'price_histories',
|
||||
'product_components',
|
||||
'products',
|
||||
'roles',
|
||||
'subscriptions',
|
||||
'tenants',
|
||||
'user_roles',
|
||||
'user_tenants',
|
||||
'users',
|
||||
];
|
||||
|
||||
foreach ($tables as $tableName) {
|
||||
if (!Schema::hasTable($tableName)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Schema::table($tableName, function (Blueprint $table) use ($tableName) {
|
||||
if (!Schema::hasColumn($tableName, 'deleted_by')) {
|
||||
$table->foreignId('deleted_by')
|
||||
->nullable()
|
||||
->after('deleted_at')
|
||||
->comment('삭제자 사용자 ID');
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
$tables = [
|
||||
'board_comments',
|
||||
'bom_templates',
|
||||
'classifications',
|
||||
'common_codes',
|
||||
'department_user',
|
||||
'lot_sales',
|
||||
'lots',
|
||||
'main_requests',
|
||||
'material_inspection_items',
|
||||
'material_inspections',
|
||||
'material_receipts',
|
||||
'materials',
|
||||
'model_versions',
|
||||
'models',
|
||||
'order_item_components',
|
||||
'order_items',
|
||||
'orders',
|
||||
'payments',
|
||||
'permission_overrides',
|
||||
'plans',
|
||||
'posts',
|
||||
'price_histories',
|
||||
'product_components',
|
||||
'products',
|
||||
'roles',
|
||||
'subscriptions',
|
||||
'tenants',
|
||||
'user_roles',
|
||||
'user_tenants',
|
||||
'users',
|
||||
];
|
||||
|
||||
foreach ($tables as $tableName) {
|
||||
if (!Schema::hasTable($tableName)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Schema::table($tableName, function (Blueprint $table) use ($tableName) {
|
||||
if (Schema::hasColumn($tableName, 'deleted_by')) {
|
||||
$table->dropColumn('deleted_by');
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user