- enhance_files_table: 이중 파일명 시스템 (display_name/stored_name), 폴더 관리, 문서 연결 지원
- create_folders_table: 동적 폴더 관리 시스템 (tenant별 커스터마이징 가능)
- 5개 stub 마이그레이션 생성 (file_share_links, file_deletion_logs, storage_usage_history, add_storage_columns_to_tenants)
- FolderSeeder stub 생성
- CURRENT_WORKS.md에 Phase 1 진행상황 문서화
fix: 파일 공유 및 삭제 기능 버그 수정
- ShareLinkRequest: PATH 파라미터 {id}를 file_id로 자동 병합
- routes/api.php: 공유 링크 다운로드를 auth.apikey 그룹 밖으로 이동 (인증 불필요)
- FileShareLink: File, Tenant 클래스 import 추가
- File 모델: softDeleteFile()에서 SoftDeletes의 delete() 메서드 사용
- FileStorageService: getTrash(), restoreFile(), permanentDelete()에서 onlyTrashed() 사용
- File 모델: Tenant 네임스페이스 수정 (App\Models\Tenants\Tenant)
refactor: Swagger 문서 정리 - File 태그를 Files로 통합
- FileApi.php의 모든 태그를 Files로 변경
- 구 파일 시스템 라우트 삭제 (prefix 'file')
- 구 FileController.php 삭제
- 신규 파일 저장소 시스템으로 완전 통합
fix: 모든 legacy 파일 컬럼 nullable 일괄 처리
- 5개 legacy 컬럼을 한 번에 nullable로 변경
* original_name, file_name, file_name_old (string)
* fileable_id, fileable_type (polymorphic)
- foreach 루프로 반복 작업 자동화
- 신규/기존 시스템 간 완전한 하위 호환성 확보
fix: legacy 파일 컬럼 nullable 처리 완료
- file_name, file_name_old 컬럼도 nullable로 변경
- 기존 시스템과 신규 시스템 간 완전한 하위 호환성 확보
- Legacy: original_name, file_name, file_name_old (nullable)
- New: display_name, stored_name (required)
fix: original_name 컬럼 nullable 처리
- original_name을 nullable로 변경하여 하위 호환성 유지
- 새 시스템에서는 display_name 사용, 기존 시스템은 original_name 사용 가능
fix: 파일 업로드 DB 컬럼 누락 및 메시지 구조 개선
- files 테이블에 감사 컬럼 추가 (created_by, updated_by, uploaded_by)
- ApiResponse::handle() 메시지 로직 개선 (접미사 제거)
- 다국어 지원을 위한 완성된 문장 구조 유지
- FileUploadRequest 파일 검증 규칙 수정
fix: 파일 저장소 버그 수정 및 신규 테넌트 폴더 자동 생성
- FolderSeeder 네임스페이스 수정 (App\Models\Tenant → App\Models\Tenants\Tenant)
- FileStorageController use 문 구문 오류 수정 (/ → \)
- TenantObserver에 신규 테넌트 기본 폴더 자동 생성 로직 추가
- 5개 기본 폴더 (생산관리, 품질관리, 회계, 인사, 일반)
- 에러 처리 및 로깅
- 회원가입 시 자동 실행
9.1 KiB
논리적 데이터베이스 관계 문서
자동 생성: 2025-11-10 21:01:46 소스: Eloquent 모델 관계 분석
📊 모델별 관계 현황
boards
모델: App\Models\Boards\Board
- customFields(): hasMany →
board_settings - posts(): hasMany →
posts
board_comments
모델: App\Models\Boards\BoardComment
- post(): belongsTo →
posts - user(): belongsTo →
users - parent(): belongsTo →
board_comments - children(): hasMany →
board_comments
board_settings
모델: App\Models\Boards\BoardSetting
- board(): belongsTo →
boards
posts
모델: App\Models\Boards\Post
- board(): belongsTo →
boards - comments(): hasMany →
board_comments - files(): morphMany →
files
post_custom_field_values
모델: App\Models\Boards\PostCustomFieldValue
- post(): belongsTo →
posts - field(): belongsTo →
board_settings
categorys
모델: App\Models\Commons\Category
- parent(): belongsTo →
categories - children(): hasMany →
categories - products(): hasMany →
products - categoryFields(): hasMany →
category_fields
category_fields
모델: App\Models\Commons\CategoryField
- category(): belongsTo →
categories
category_logs
모델: App\Models\Commons\CategoryLog
- category(): belongsTo →
categories
category_templates
모델: App\Models\Commons\CategoryTemplate
- category(): belongsTo →
categories
files
모델: App\Models\Commons\File
- folder(): belongsTo →
folders - uploader(): belongsTo →
users - shareLinks(): hasMany →
file_share_links - fileable(): morphTo →
(Polymorphic)
menus
모델: App\Models\Commons\Menu
- parent(): belongsTo →
menus - children(): hasMany →
menus
tags
모델: App\Models\Commons\Tag
- tenant(): belongsTo →
tenants
bom_templates
모델: App\Models\Design\BomTemplate
- modelVersion(): belongsTo →
model_versions - items(): hasMany →
bom_template_items
bom_template_items
모델: App\Models\Design\BomTemplateItem
- template(): belongsTo →
bom_templates
design_models
모델: App\Models\Design\DesignModel
- versions(): hasMany →
model_versions
model_versions
모델: App\Models\Design\ModelVersion
- model(): belongsTo →
models - bomTemplates(): hasMany →
bom_templates
estimates
모델: App\Models\Estimate\Estimate
- modelSet(): belongsTo →
categories - items(): hasMany →
estimate_items
estimate_items
모델: App\Models\Estimate\EstimateItem
- estimate(): belongsTo →
estimates
file_share_links
모델: App\Models\FileShareLink
folders
모델: App\Models\Folder
main_requests
모델: App\Models\MainRequest
- flows(): hasMany →
main_request_flows
main_request_flows
모델: App\Models\MainRequestFlow
- mainRequest(): belongsTo →
main_requests - flowable(): morphTo →
(Polymorphic)
materials
모델: App\Models\Materials\Material
- receipts(): hasMany →
material_receipts - lots(): hasMany →
lots - files(): morphMany →
files
material_inspections
모델: App\Models\Materials\MaterialInspection
- receipt(): belongsTo →
material_receipts - items(): hasMany →
material_inspection_items
material_inspection_items
모델: App\Models\Materials\MaterialInspectionItem
- inspection(): belongsTo →
material_inspections
material_receipts
모델: App\Models\Materials\MaterialReceipt
- material(): belongsTo →
materials - inspections(): hasMany →
material_inspections
users
모델: App\Models\Members\User
- userTenants(): hasMany →
user_tenants - userRoles(): hasMany →
user_roles - userTenant(): hasOne →
user_tenants - userTenantById(): hasOne →
user_tenants - tenantsMembership(): belongsToMany →
tenants - files(): morphMany →
files
user_menu_permissions
모델: App\Models\Members\UserMenuPermission
- user(): belongsTo →
users - menu(): belongsTo →
menus
user_roles
모델: App\Models\Members\UserRole
- user(): belongsTo →
users - tenant(): belongsTo →
tenants - role(): belongsTo →
roles
user_tenants
모델: App\Models\Members\UserTenant
- user(): belongsTo →
users - tenant(): belongsTo →
tenants
clients
모델: App\Models\Orders\Client
- clientGroup(): belongsTo →
client_groups - orders(): hasMany →
orders
client_groups
모델: App\Models\Orders\ClientGroup
- clients(): hasMany →
clients
orders
모델: App\Models\Orders\Order
- items(): hasMany →
order_items - histories(): hasMany →
order_histories - versions(): hasMany →
order_versions
order_historys
모델: App\Models\Orders\OrderHistory
- order(): belongsTo →
orders
order_items
모델: App\Models\Orders\OrderItem
- order(): belongsTo →
orders - components(): hasMany →
order_item_components
order_item_components
모델: App\Models\Orders\OrderItemComponent
- orderItem(): belongsTo →
order_items
order_versions
모델: App\Models\Orders\OrderVersion
- order(): belongsTo →
orders
permissions
모델: App\Models\Permissions\Permission
- tenant(): belongsTo →
tenants
permission_overrides
모델: App\Models\Permissions\PermissionOverride
- permission(): belongsTo →
permissions
roles
모델: App\Models\Permissions\Role
- tenant(): belongsTo →
tenants - menuPermissions(): hasMany →
role_menu_permissions - userRoles(): hasMany →
user_roles
role_menu_permissions
모델: App\Models\Permissions\RoleMenuPermission
- role(): belongsTo →
roles - menu(): belongsTo →
menus
common_codes
모델: App\Models\Products\CommonCode
- parent(): belongsTo →
common_codes - children(): hasMany →
common_codes
parts
모델: App\Models\Products\Part
- category(): belongsTo →
common_codes - partType(): belongsTo →
common_codes
price_historys
모델: App\Models\Products\PriceHistory
- clientGroup(): belongsTo →
client_groups
products
모델: App\Models\Products\Product
- category(): belongsTo →
categories - componentLines(): hasMany →
product_components - parentLines(): hasMany →
product_components - children(): belongsToMany →
products - parents(): belongsToMany →
products - files(): morphMany →
files
product_components
모델: App\Models\Products\ProductComponent
- parentProduct(): belongsTo →
products - product(): belongsTo →
products - material(): belongsTo →
materials
lots
모델: App\Models\Qualitys\Lot
- material(): belongsTo →
materials - sales(): hasMany →
lot_sales
lot_sales
모델: App\Models\Qualitys\LotSale
- lot(): belongsTo →
lots
departments
모델: App\Models\Tenants\Department
- parent(): belongsTo →
departments - children(): hasMany →
departments - departmentUsers(): hasMany →
department_user - users(): belongsToMany →
users - permissionOverrides(): morphMany →
permission_overrides
payments
모델: App\Models\Tenants\Payment
- subscription(): belongsTo →
subscriptions
department_users
모델: App\Models\Tenants\Pivots\DepartmentUser
- department(): belongsTo →
departments - user(): belongsTo →
users
plans
모델: App\Models\Tenants\Plan
- subscriptions(): hasMany →
subscriptions
setting_field_defs
모델: App\Models\Tenants\SettingFieldDef
- tenantSettings(): hasMany →
tenant_field_settings
subscriptions
모델: App\Models\Tenants\Subscription
- tenant(): belongsTo →
tenants - plan(): belongsTo →
plans - payments(): hasMany →
payments
tenants
모델: App\Models\Tenants\Tenant
- plan(): belongsTo →
plans - subscription(): belongsTo →
subscriptions - userTenants(): hasMany →
user_tenants - roles(): hasMany →
roles - userRoles(): hasMany →
user_roles - users(): belongsToMany →
users - files(): morphMany →
files
tenant_field_settings
모델: App\Models\Tenants\TenantFieldSetting
- fieldDef(): belongsTo →
setting_field_defs - optionGroup(): belongsTo →
tenant_option_groups
tenant_option_groups
모델: App\Models\Tenants\TenantOptionGroup
- values(): hasMany →
tenant_option_values
tenant_option_values
모델: App\Models\Tenants\TenantOptionValue
- group(): belongsTo →
tenant_option_groups
tenant_user_profiles
모델: App\Models\Tenants\TenantUserProfile
- user(): belongsTo →
users - department(): belongsTo →
departments