Commit Graph

243 Commits

Author SHA1 Message Date
40ca8b8697 feat: [quote] 견적 API Phase 2-3 완료 (Service + Controller Layer)
Phase 2 - Service Layer:
- QuoteService: 견적 CRUD + 상태관리 (확정/전환)
- QuoteNumberService: 견적번호 채번 (KD-{PREFIX}-YYMMDD-SEQ)
- FormulaEvaluatorService: 수식 평가 엔진 (SUM, IF, ROUND 등)
- QuoteCalculationService: 자동산출 (스크린/철재 제품)
- QuoteDocumentService: PDF 생성 및 이메일/카카오 발송

Phase 3 - Controller Layer:
- QuoteController: 16개 엔드포인트
- FormRequest 7개: Index, Store, Update, BulkDelete, Calculate, SendEmail, SendKakao
- QuoteApi.php: Swagger 문서 (12개 스키마, 16개 엔드포인트)
- routes/api.php: 16개 라우트 등록

i18n 키 추가:
- error.php: quote_not_found, formula_* 등
- message.php: quote.* 성공 메시지
2025-12-04 22:03:40 +09:00
d164bb4c4a feat: [client] 거래처 API 2차 필드 추가 및 견적 계획 업데이트
- 거래처 유형(client_type), 연락처(mobile, fax), 담당자 정보 필드 추가
- 발주처 설정(account_id/password, payment_day) 필드 추가
- 약정 세금(tax_agreement, tax_amount, tax_start/end_date) 필드 추가
- 악성채권(bad_debt 관련 5개 필드) 정보 필드 추가
- Model, Service, FormRequest, Swagger 문서 업데이트
- 견적 API 계획에 문서 발송 API(email/fax/kakao) 요구사항 추가
2025-12-04 21:13:58 +09:00
96e9a0ba18 feat: [quote] 견적관리 API 기반 구축 (Phase 1)
- 마이그레이션 생성: quotes, quote_items, quote_revisions 테이블
- Model 생성: Quote, QuoteItem, QuoteRevision
- BelongsToTenant, SoftDeletes 트레이트 적용
- 상태 관리 메서드 및 스코프 구현
- 개발 계획서 작성 및 진행 상황 문서화
2025-12-04 17:17:05 +09:00
ccd8b6f81d feat: [quote] 수식 시더 품목/매핑 데이터 추가
- QuoteFormulaSeeder: CONTROLLER_TYPE input 수식 추가
- QuoteFormulaItemSeeder: 14개 품목 마스터 (GR, CASE, MOTOR, CTRL, EDGE, INSP)
- QuoteFormulaMappingSeeder: CTRL_AUTO_SELECT 매핑 3건 (매립형/노출형/일체형)
2025-12-04 16:23:39 +09:00
165512e121 feat: [client] Client API 사업자 정보 필드 및 toggle 버그 수정
- business_no, business_type, business_item 필드 추가
- toggle 로직 수정: boolean 캐스팅 호환 (is_active === 'Y' → !is_active)
2025-12-04 15:58:08 +09:00
f48ac54fe4 [fix] 미정의 변수 사용 수식 12개 비활성화
- QuoteFormulaSeeder: is_active 플래그 추가 (기본 true)
- 미정의 변수 사용 수식 비활성화:
  - GR_QTY_WALL, GR_QTY_SIDE, GR_QTY_MIXED (BASE_QTY 미정의)
  - EDGE_QTY (EDGE_WING_SIZE 미정의)
  - PRICE_GR, PRICE_CASE, PRICE_MOTOR, PRICE_CTRL, PRICE_EDGE (QTY, UNIT_PRICE 미정의)
  - PRICE_INSP (INSPECTION_FEE 미정의)
  - PRICE_AREA_SCREEN, PRICE_AREA_STEEL (AREA, UNIT_PRICE_PER_M2 미정의)
2025-12-04 15:24:10 +09:00
7967082f8b refactor: BOM API ref_id 통합 및 응답 개선
- child_product_id, material_id를 ref_id 단일 컬럼으로 통합
- splitRef() 메서드 제거
- bulkUpsert() 응답에 created_ids, updated_ids 추가
2025-12-04 13:45:41 +09:00
fbaf2720d8 fix: 품목 삭제 시 BOM 참조 무결성 체크 추가
- 삭제 전 product_components 테이블에서 사용 여부 확인
- BOM 구성품으로 사용 중인 품목 삭제 차단 (400 에러)
- 일괄 삭제에도 동일한 참조 체크 적용
- 품목 관련 에러 메시지 추가 (error.item.*)
- 품목 삭제 API 테스트 플로우 JSON 추가
2025-12-03 22:35:38 +09:00
695afb8a86 chore: flow_runs 테이블 failed_step 컬럼 변경 및 문서 업데이트 2025-12-03 16:49:33 +09:00
b8e96be56c refactor: 회원가입 메뉴 복사 로직을 global_menus 테이블 기반으로 변경
- MenuBootstrapService: menus → global_menus 테이블에서 조회
- MenusStep: 신규 테넌트 부트스트랩 시 global_menus 사용
- GlobalMenuTemplateSeeder: GlobalMenu 모델 사용으로 변경
2025-12-02 22:55:10 +09:00
6b4f02e96e docs: 작업 현황 및 관계 문서 업데이트 2025-12-02 22:11:25 +09:00
198ba8688c feat: PM 이슈에 팀/담당자/고객사 필드 추가
- department_id, team: 부서 (하이브리드 FK + 문자열)
- assignee_id, assignee_name: 담당자 (하이브리드)
- client: 고객사명 (문자열)
2025-12-02 22:11:15 +09:00
a72a744612 feat: 글로벌 메뉴 분리 및 테넌트 메뉴 동기화 시스템 구현
- global_menus 테이블 분리를 위한 menus 컬럼 추가 (global_menu_id, is_customized)
- GlobalMenuController: 글로벌 메뉴 CRUD API
- GlobalMenuService: 글로벌 메뉴 비즈니스 로직
- MenuSyncService: 테넌트 메뉴 동기화 서비스
- MenuBootstrapService: 테넌트 초기 메뉴 생성 로직 개선
- MenuController: 메뉴 재동기화 엔드포인트 추가
2025-12-02 22:11:08 +09:00
84eb4f5ab4 fix: global_menus 마이그레이션에 테이블 존재 체크 추가
- 개발 서버에서 테이블 이미 존재 시 에러 발생 방지
- Schema::hasTable() 체크로 중복 생성 스킵
2025-12-02 22:08:49 +09:00
d9348c0714 feat: global_menus 테이블 분리 및 모델 구현
- global_menus 테이블 생성 (ID 1번부터 시작)
- 기존 menus(tenant_id IS NULL) → global_menus 데이터 이전
- GlobalMenu 모델 생성
- Menu.globalMenu() 관계를 GlobalMenu 모델로 변경
2025-12-02 20:43:29 +09:00
686a979127 fix: Items API 품목 생성 시 타입별 테이블 분기 저장
- FG, PT 타입 → Products 테이블 저장
- SM, RM, CS 타입 → Materials 테이블 저장
- createMaterial() 메서드 추가
- resolveUniqueMaterialCode() 메서드 추가
2025-12-02 17:22:00 +09:00
2605d06f91 fix: products 테이블 category_id nullable로 변경
- 외래 키 제약조건으로 인한 INSERT 오류 해결
- category_id 기본값 null 설정
- ON DELETE SET NULL로 외래 키 제약조건 변경
2025-12-02 16:35:19 +09:00
a4a0248a83 fix: products 테이블 category_id 기본값 0 설정
- category_id 필드에 기본값이 없어 INSERT 오류 발생하던 문제 해결
2025-12-02 16:31:34 +09:00
88794c3ce4 feat: [pm] 이슈 일정 필드 추가 마이그레이션
- admin_pm_issues 테이블에 start_date, due_date, estimated_hours 컬럼 추가
- due_date 인덱스 추가
2025-12-02 16:06:18 +09:00
2f2999bb39 chore: archived_records record_type을 varchar로 변경
- enum('tenant','user') → varchar(50)
- 확장성 확보 (department, menu, role 등 추가 가능)
2025-12-02 15:49:31 +09:00
aabd791336 docs: 메뉴 동기화 시스템 상세 설계 추가
- 동기화 상태 분류 (new, up_to_date, updatable, customized, deleted)
- 동기화 액션 유형 (개별, 신규 가져오기, 기존 업데이트, 선택 동기화)
- 커스터마이징 메뉴 보호 정책 (force 옵션)
- 동기화 전용 API 스펙 4개 엔드포인트
- MenuSyncService 메서드 설계
- MNG 동기화 센터 UI 와이어프레임
2025-12-02 09:38:15 +09:00
95ae0234c8 feat: 사용자 must_change_password 컬럼 추가
- users 테이블에 must_change_password 컬럼 추가 (boolean, default: false)
- 신규 사용자 생성/비밀번호 초기화 시 강제 비밀번호 변경 기능 지원

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 23:44:45 +09:00
e73141faf5 docs: CURRENT_WORKS.md 업데이트 - 메뉴 통합관리 시스템 설계 작업 추가 2025-12-01 16:17:13 +09:00
d7fdfa841e docs: 메뉴 통합관리 시스템 설계서 및 SQL 쿼리 추가
- MENU_INTEGRATION_SYSTEM_DESIGN.md: 글로벌-테넌트 메뉴 연결 시스템 설계
  - global_menu_id, is_customized 컬럼 추가 계획
  - API 엔드포인트 설계 (글로벌/테넌트 메뉴 관리)
  - MNG 화면 설계 (복제, 동기화 기능)
  - 구현 Phase 1~4 계획

- MENU_INSERT_QUERIES.sql: PDF 기획서 기반 신규 메뉴 23개 INSERT 쿼리
  - 인사관리 (근태/휴가/급여)
  - 전자결재 (기안함/결재함/참조함)
  - 게시판, 보고서, 계정정보, 회사정보, 구독관리, 결제내역, 고객센터
  - 기준정보 관리 하위 8개 메뉴
2025-12-01 16:16:07 +09:00
0ea8c719d7 feat: [items] 품목 생성/조회 개선
- 중복 코드 자동 증가 기능 추가 (P-001 → P-002, ABC → ABC-001)
- soft delete 항목 조회 파라미터 추가 (include_deleted)
- ValidationException 응답 포맷 수정 (공통 에러 형식)
- batch delete 라우트 순서 수정 (/{id} 보다 /batch 먼저)
- is_active 기본값 true 설정
2025-12-01 14:22:50 +09:00
aa93c19da1 feat: [daily-logs] 일일 스크럼 테이블 마이그레이션 추가
테이블:
- admin_pm_daily_logs: 일일 로그 (날짜, 프로젝트, 요약)
- admin_pm_daily_log_entries: 로그 항목 (담당자, 내용, 상태)

관계:
- tenant_id → tenants (multi-tenant)
- project_id → admin_pm_projects (선택적)
- created_by, updated_by, deleted_by → users
2025-12-01 14:22:04 +09:00
47a6facb6b feat: [archived-records] archived_records 테이블에 tenant_id 컬럼 추가
- 테넌트별 아카이브 필터링을 위한 tenant_id 컬럼 추가
- FK 제약조건 없음 (삭제된 테넌트 참조 가능)
- 기존 테넌트 레코드에 main_data.id로 tenant_id 업데이트

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 00:43:44 +09:00
d60a29fb10 chore: 문서 및 설정 파일 업데이트
- LOGICAL_RELATIONSHIPS.md 업데이트
- 한국어 메시지 파일 업데이트
- API 라우트 정비
- CURRENT_WORKS.md 업데이트
2025-11-30 21:06:22 +09:00
3c9ba94784 chore: 불필요한 claudedocs 문서 정리
- 오래된 분석 문서 삭제
- Swagger 감사 문서 삭제
- MES 관련 임시 문서 삭제
2025-11-30 21:06:11 +09:00
7c40c2395a feat: 마이그레이션 추가
- tenant_type 필드 추가 마이그레이션
- 프로젝트 관리 테이블 생성 마이그레이션
2025-11-30 21:05:55 +09:00
f09fa3791c feat: [items] 아이템 API 기능 개선
- ItemsController, ItemsBomController, ItemsFileController 수정
- ItemBatchDeleteRequest 추가
- ItemsService 개선
- ItemsApi Swagger 문서 업데이트
2025-11-30 21:05:44 +09:00
d27e47108d feat: [boards] 게시판 API 시스템 구현
- BoardController, PostController 추가
- Board, BoardSetting 모델 수정
- BoardService 추가
- FormRequest 클래스 추가
- Swagger 문서 추가 (BoardApi, PostApi)
- 게시판 시스템 필드 마이그레이션 추가
2025-11-30 21:05:33 +09:00
d9192045da feat: [pm] is_urgent 필드 마이그레이션 추가
- admin_pm_tasks, admin_pm_issues 테이블에 is_urgent boolean 필드 추가
- 작업/이슈 긴급 토글 기능 지원
2025-11-28 18:08:44 +09:00
aa2962314f feat: item_fields에 field_key, is_locked 컬럼 추가
- field_key: {ID}_{key} 형식으로 고유키 생성
- is_locked, locked_by, locked_at 잠금 컬럼 추가
- ItemFieldService: store/update/clone 로직 수정
- FormRequest: field_key 검증 규칙 추가
- Swagger 스키마 업데이트
2025-11-28 17:39:14 +09:00
d3fb00ae26 fix: 섹션 복제 시 필드/BOM 링크만 생성하도록 수정
- 섹션 복제 시 필드를 새로 CREATE하던 로직 제거
- 섹션 복제 시 BOM을 새로 CREATE하던 로직 제거
- 기존 필드/BOM ID로 EntityRelationship 링크만 생성
- 독립 엔티티 아키텍처 원칙 준수 (복제 = 자신만 복제 + 관계 링크만 복제)
- 불필요한 use 문 제거 (ItemField, ItemBomItem)
2025-11-27 22:01:55 +09:00
b70d79a8d5 feat: API Flow Tester 테이블 마이그레이션 추가
- admin_api_flows: 플로우 정의 저장 테이블
- admin_api_flow_runs: 실행 이력 및 로그 테이블
2025-11-27 18:49:09 +09:00
ebd59f220f feat: init API 응답에 fields 목록 추가
- ItemMasterService: 모든 독립 필드 목록 반환 추가
- Swagger: ItemMasterInitResponse 스키마에 fields 속성 추가
2025-11-27 17:33:23 +09:00
c5eee5561f fix(item-master): EntityRelationship::link() 파라미터 순서 및 관계 로드 오류 수정
- EntityRelationship::link() 호출 파라미터 순서 수정 (3개 파일)
  - ItemSectionService: tenantId를 첫 번째 파라미터로 변경
  - ItemBomItemService: tenantId를 첫 번째 파라미터로 변경
  - ItemFieldService: tenantId를 첫 번째 파라미터로 변경

- ItemSection 모델의 fields()/bomItems() 관계 메서드 문제 해결
  - 쿼리빌더 반환으로 인한 addEagerConstraints() 에러 수정
  - loadRelatedEntities() 메서드 신규 추가
  - with()/load() 대신 setRelation()으로 데이터 설정

- 영향받은 서비스 파일 전체 수정
  - ItemSectionService, SectionTemplateService, ItemMasterService
2025-11-27 16:49:36 +09:00
29dd554bbb fix(item-master): ItemPageService에서 삭제된 sections 관계 참조 제거
- store(): 신규 페이지에 빈 sections 배열 설정
- update(): 섹션 로딩 제거 (수정 시 섹션 변경 없음)
- index(): FK 기반 eager loading 제거
- 섹션 포함 전체 데이터는 init API 사용
2025-11-27 16:20:55 +09:00
efa2a84d2c feat(item-master): 잠금 기능 추가 및 FK 레거시 코드 정리
## 잠금 기능 (Lock Feature)
- entity_relationships 테이블에 is_locked, locked_by, locked_at 컬럼 추가
- EntityRelationship 모델에 잠금 관련 헬퍼 메서드 추가
- LockCheckTrait 생성 (destroy 시 잠금 체크 공통 로직)
- 각 Service의 destroy() 메서드에 잠금 체크 적용
- API 응답에 is_locked 필드 포함
- 한국어 에러 메시지 추가

## FK 레거시 코드 정리
- ItemMasterSeeder: entity_relationships 기반으로 전환
- ItemPage 모델: FK 기반 sections() 관계 제거
- ItemSectionService: clone() 메서드 FK 제거
- SectionTemplateService: page_id 컬럼 참조 제거
- EntityRelationship::link() 파라미터 순서 통일

## 기타
- Swagger 스키마에 is_locked 속성 추가
- 프론트엔드 가이드 문서 추가
2025-11-27 15:51:00 +09:00
29fe1415e5 docs: CURRENT_WORKS.md 작업 현황 업데이트 2025-11-27 10:29:01 +09:00
9588945922 refactor(item-master): 독립 엔티티 아키텍처 적용 및 Swagger 보완
- FK 컬럼 제거: item_sections.page_id, item_fields.section_id, item_bom_items.section_id
- entity_relationships 테이블로 전환하여 독립 엔티티 구조 확립
- ItemMasterField 관련 파일 삭제 (Controller, Service, Model, Requests)
- destroy 메서드 독립 엔티티 아키텍처 적용 (관계 링크만 삭제)
- Swagger 스키마에서 FK 참조 제거
- FormRequest 및 Swagger에 group_id(계층번호) 필드 추가
2025-11-27 10:28:51 +09:00
1d2dadc7da feat(api): item_master_fields 속성을 item_fields로 이관
- item_fields에 category, description, is_common 컬럼 추가
- section_id를 nullable로 변경 (독립 필드 지원)
- item_master_fields 데이터를 item_fields로 이관 (section_id = NULL)
- 기존 item_master_fields 테이블 유지 (하위 호환성)
2025-11-27 09:09:18 +09:00
68260e89e4 feat(api): archived_records 테이블에 batch 필드 추가
- batch_id (uuid): 일괄 삭제 작업 그룹 식별자
- batch_description (string): 작업 설명 (예: 테넌트 ABC 삭제)
- batch_id 인덱스 추가
2025-11-26 23:16:39 +09:00
a1604b6189 refactor: 섹션 관리를 entity_relationships 참조 방식으로 전환
- SectionTemplateService: 독립 섹션 생성, page_id 있으면 링크 연결
- ItemMasterService: init API가 linkedSections 기반으로 조회
- SectionTemplateStoreRequest: page_id nullable로 변경
- Swagger: 스키마 업데이트 (sectionTemplates → sections)
2025-11-26 18:08:03 +09:00
628d902b0c fix: item_sections.page_id nullable 변경
- 섹션 템플릿(is_template=true)은 특정 페이지에 속하지 않으므로 page_id가 null 허용
- section-templates API 500 에러 해결
2025-11-26 17:07:05 +09:00
bccfa19791 feat: Item Master 하이브리드 구조 전환 및 독립 API 추가
- CASCADE FK → 독립 엔티티 + entity_relationships 링크 테이블
- 독립 API 10개 추가 (섹션/필드/BOM CRUD, clone, usage)
- SectionTemplate 모델 제거 → ItemSection.is_template 통합
- 페이지-섹션, 섹션-필드, 섹션-BOM 링크/언링크 API 14개 추가
- Swagger 문서 업데이트
2025-11-26 14:09:31 +09:00
3fefb8ce26 fix: API 인증 에러 처리 개선 및 요청 로그 강화
- Handler.php: API 라우트는 Accept 헤더 없어도 JSON 응답 반환
- ApiKeyMiddleware: 요청 로그에 헤더 정보 추가 (X-API-KEY, Authorization 마스킹)
- Route [login] not defined 에러 해결
- 인증 실패 시 401 JSON 응답으로 일관성 확보
2025-11-25 09:14:33 +09:00
757c5d901c docs: API 문서 구조화 및 분석 문서 추가
- docs/INDEX.md: 문서 인덱스 추가
- docs/analysis/: Item DB/API 분석 문서 3종 추가
- docs/swagger/: Swagger 문서화 가이드 4종 추가
- LOGICAL_RELATIONSHIPS.md: 논리적 관계 문서 업데이트
- 이전 버전 문서 정리 (BP-MES, CHECKPOINT 등)
2025-11-24 22:38:38 +09:00
80ca551026 feat: 소프트삭제 및 타임스탬프 감사 컬럼 추가
- deleted_at이 있는 30개 테이블에 deleted_by 추가
- created_at이 있는 38개 비즈니스 테이블에 created_by, updated_by 추가
- 시스템 테이블 제외
- nullable, COMMENT 포함
- 롤백(down) 메서드 구현
2025-11-24 19:30:23 +09:00