jskim-node #5

Merged
jskim merged 34 commits from jskim-node into main 2026-04-02 09:30:05 +00:00

34 Commits

Author SHA1 Message Date
kjs
1de5c24dc9 Merge branch 'main' of https://g.wace.me/jskim/vexplor_dev into jskim-node 2026-04-02 18:04:07 +09:00
kjs
bf8c351082 Merge branch 'main' of https://g.wace.me/jskim/vexplor_dev into jskim-node 2026-04-02 17:43:30 +09:00
kjs
148f20c7c5 Update menu assignment logic and enhance dynamic search filter rendering
- Modified the menu assignment logic to ensure that screen assignments are only deactivated if the menu URL is either empty or not a valid screen URL, improving the accuracy of screen management.
- Updated the rendering of active filters in the DynamicSearchFilter component to include a key for each filter, enhancing React's rendering performance and preventing potential issues with list updates.

These changes improve the functionality and performance of the admin interface, ensuring a more reliable user experience.
2026-04-02 17:42:45 +09:00
kjs
9749234c30 Refactor password reset logic and update UI components for better user experience
- Removed the minimum password length validation from the backend, simplifying the password reset process.
- Updated the password encryption method to utilize `EncryptUtil`, enhancing security and maintainability.
- Adjusted the `UserPasswordResetModal` component to reset alert states upon closing, improving user feedback.
- Modified the z-index values in the `Popover` and `Select` components for better layering and visibility in the UI.

These changes streamline the password reset functionality and enhance the overall user interface, ensuring a more intuitive experience for administrators.
2026-04-02 17:22:21 +09:00
kjs
ce99001970 Add quote management functionality with API and UI integration
- Introduced a new `quote` module, including routes, controllers, and services for managing quotes.
- Implemented API endpoints for listing, creating, updating, and deleting quotes, ensuring proper company code filtering for data access.
- Developed a comprehensive UI for quote management, allowing users to create, edit, and view quotes seamlessly.
- Enhanced the admin layout to include the new quote management page, improving navigation and accessibility for users.

These additions significantly enhance the application's capabilities in managing quotes, providing users with essential tools for their sales processes.
2026-04-02 15:30:44 +09:00
kjs
d8aaacb8f7 Enhance SUPER_ADMIN middleware and permission utility for improved access control
- Updated the `requireSuperAdmin` middleware to allow users with `userType` as 'SUPER_ADMIN' to access management functionalities, even if their `companyCode` is not '*'.
- Modified the `isSuperAdmin` utility function to recognize users as SUPER_ADMIN based solely on their `userType`, simplifying the access validation logic.
- These changes ensure that SUPER_ADMIN users maintain their management capabilities across company transitions, enhancing the flexibility and security of the application.
2026-04-02 10:05:38 +09:00
kjs
775d698d06 Add new pages for design management, including change management, design requests, my work, project management, task management, equipment info, and material status
- Introduced multiple new pages to enhance design management functionalities, allowing users to manage design requests, track their work, and oversee project and task statuses.
- Implemented UI components such as tables, dialogs, and forms to facilitate user interactions and data management.
- Integrated necessary API calls for fetching and manipulating design-related data, ensuring a seamless user experience across the new pages.

These additions significantly expand the design management capabilities of the application, providing users with comprehensive tools for managing their design workflows.
2026-04-02 09:43:59 +09:00
kjs
4276b33e37 Merge branch 'ycshin-node' of https://g.wace.me/jskim/vexplor_dev into jskim-node 2026-04-01 16:38:36 +09:00
kjs
948ddbe832 Refactor Dashboard Management to Use Tab Store for Navigation
- Removed the useRouter hook and replaced it with the useTabStore for managing tab navigation in the Dashboard List and Dashboard Designer pages.
- Updated button and row click handlers to utilize the openTab function, enhancing the user experience by allowing for tabbed navigation instead of direct routing.
- This change improves the overall structure and maintainability of the dashboard management functionality, aligning with the new tab management system.
2026-04-01 16:37:21 +09:00
kjs
7c402532b4 Update Barcode Label Management Page UI for Consistency
- Changed background color of the main container from white to card style for better visual consistency with the overall design.
- Updated the CardHeader background to a muted style, enhancing the aesthetic appeal and aligning with the new design guidelines.

These changes improve the user interface of the Barcode Label Management page, ensuring a cohesive look and feel across the application.
2026-04-01 16:28:59 +09:00
kjs
540b6290c4 Implement multi-language support in audit log, system notices, collection management, and common code management pages
- Integrated multi-language functionality across the audit log, system notices, collection management, and common code management components, enhancing accessibility for diverse users.
- Updated UI elements to utilize translation keys, ensuring that all text is dynamically translated based on user preferences.
- Improved error handling messages to be localized, providing a better user experience in case of issues.

These changes significantly enhance the usability and internationalization of the management features, making the application more inclusive.
2026-04-01 16:16:40 +09:00
kjs
1d49fc7ac7 Implement multi-language support in user management and system management pages
- Integrated multi-language functionality across various user management components, including user list, roles list, and user authorization pages, enhancing accessibility for diverse users.
- Updated UI elements to utilize translation keys, ensuring that all text is dynamically translated based on user preferences.
- Improved error handling messages to be localized, providing a better user experience in case of issues.

These changes significantly enhance the usability and internationalization of the user management features, making the application more inclusive.
2026-04-01 15:57:12 +09:00
kjs
2ff01456dc Enhance user management with SUPER_ADMIN access control
- Updated the user list retrieval logic to ensure proper filtering based on company codes, enhancing security for user data access.
- Implemented checks to restrict access to company management APIs, allowing only SUPER_ADMIN users to perform actions related to company data.
- Adjusted the user interface to reflect access restrictions for non-SUPER_ADMIN users, providing clear feedback when access is denied.

These changes strengthen the integrity of user management and ensure that sensitive company information is only accessible to authorized personnel.
2026-04-01 15:49:49 +09:00
a085b8149d [RAPID-micro] 메일 작성 다이얼로그에 보내는 사람 계정 선택 추가
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:29:00 +09:00
545b206f4c [RAPID-micro] 메일관리 IMAP 서비스 프리셋 추가 (Gmail, Naver, Outlook 등)
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:28:59 +09:00
8ddb7319ab [RAPID-micro] 메일관리 계정 추가 버튼을 계정 목록 패널로 이동
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:28:59 +09:00
kjs
369a201832 Implement SUPER_ADMIN permission checks in user management
- Added validation to ensure that only existing SUPER_ADMIN users can grant or modify SUPER_ADMIN permissions.
- Updated the user management page to reflect that both SUPER_ADMIN and COMPANY_ADMIN can access the user permissions, while COMPANY_ADMIN cannot grant SUPER_ADMIN rights.
- Enhanced the user authorization modal to prevent COMPANY_ADMIN from changing SUPER_ADMIN permissions, ensuring proper access control.

These changes improve the security and integrity of user role management within the application.
2026-04-01 14:17:43 +09:00
1b92c283fb [RAPID-micro] 메신저 ESC 키로 닫기 기능 추가
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 13:57:11 +09:00
2b237446dd [RAPID-micro] 메신저 입력창 상단 가로선 제거
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 12:28:42 +09:00
a477295afd Merge branch 'jskim-node' of https://g.wace.me/jskim/vexplor_dev into ycshin-node 2026-04-01 12:27:59 +09:00
403e5cae40 [RAPID] 메신저 기능 구현 및 UI/UX 개선
- 사용자 온라인 상태 표시 (온라인/자리비움/오프라인) 디스코드 스타일
- 채팅방별 알림 ON/OFF 토글 (Bell 아이콘, localStorage 저장)
- 파일 업로드 실시간 소켓 브로드캐스트 및 한글 파일명 깨짐 수정
- FAB 읽지않음 배지 버그 수정 (메신저 닫혀있을 때 markAsRead 차단)
- 타이핑 도트 애니메이션, 날짜 오늘/어제 표시
- 입력창 bordered box, DM 편집 버튼 숨김
- 메신저 설정 버튼 제거, 새 대화 시작하기 Empty state CTA
- useMessengerSocket 소켓 중복 생성 방지 (MessengerModal로 이동)

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

[RAPID-micro] 추적 파일 정리 및 메신저 소소한 변경

- .omc/state/ 파일 git 추적 제거 (.gitignore 이미 설정됨)
- db/checkpoints/ gitignore 추가
- globals.css: 메신저 메시지 시간 폰트 스타일 추가
- useMessenger.ts: fileMimeType 필드 및 API_BASE_URL import 추가

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 12:20:43 +09:00
3661b469cd [RAPID-fix] 채팅방 스크롤 점프 제거: useEffect → useLayoutEffect (페인트 전 처리)
[RAPID-fix] 스크롤 sentinel 방식으로 교체: scrollIntoView useLayoutEffect (페인트 전 보장)

[RAPID-fix] 스크롤 근본 원인 수정: isOpen deps 추가로 메신저 열릴 때마다 하단 스크롤

[RAPID-fix] 스크롤 ResizeObserver 추가: 이미지 로드 후 높이 변화 감지해 자동 하단 스크롤
2026-04-01 12:20:43 +09:00
0fa7b792dd [RAPID-fix] 캡처 이미지 크기 수정: CSS 픽셀 기준 scale factor로 정확한 영역 크롭
[RAPID-fix] 캡처 속도/화질 개선 + 드래그 커서 4방향 화살표로 변경

- 오버레이 마운트 시점에 미리 캡처 시작 → mouseup 즉시 크롭
- scale: max(dpr, 2)로 화질 2배 향상
- 캡처 준비 중 wait 커서 표시
- 메신저 헤더 드래그 커서 cursor-grab → cursor-move (4방향 화살표)

[RAPID-micro] 캡처 버튼 헤더 → 입력창 첨부파일 좌측으로 이동

[RAPID-micro] 채팅방 선택 시 스크롤 하단 이동 수정

[RAPID] 메신저 3가지 수정: 스크롤 버튼, DM 상대방 이름, 캡처 속도 개선

[RAPID-fix] 스크롤/캡처 3가지 수정

- 스크롤 하단 이동: useLayoutEffect → useEffect+rAF (이미지 레이아웃 완료 후 스크롤)
- 스크롤 버튼: 리스너 deps를 room.id로 변경 (room 없을 때 미연결 문제 해결)
- 캡처 속도: domToPng(느림) → getDisplayMedia 네이티브 API(즉시 캡처)

[RAPID-fix] 메신저 3가지 수정

- 최신 메시지 버튼: 스크롤 컨테이너 밖으로 이동, 입력창 위 중앙 고정
- 스크롤 하단: rAF + 600ms 지연 2회 (이미지 비동기 로드 대응)
- 캡처: 버튼 클릭 즉시 오버레이 + domToPng 병렬 실행, mouseup에서 await (font:false 최적화)

[RAPID-micro] 채팅방 열 때 스크롤 점프 제거

[RAPID-fix] 캡처 오버레이 렌더 후 domToPng 시작으로 mousedown 딜레이 개선

[RAPID-fix] 캡처 프리캐싱: 메신저 열릴 때 백그라운드 domToPng → 버튼 클릭 즉시 오버레이

[RAPID-fix] 캡처 worker 추가: 리소스 fetch를 Web Worker로 오프로드

[RAPID-fix] 캡처 방식 변경: domToPng 제거 → getDisplayMedia (즉시 캡처, 프리캐싱 제거)

[RAPID-micro] 화면 캡처 버튼 제거 (Cmd+V 붙여넣기로 대체)
2026-04-01 12:20:42 +09:00
b08d337a33 [RAPID] PCC: SCR 2026-04-01 12:20:41 +09:00
20b82dc57b [RAPID] 메신저 화면 캡처 기능 구현
- modern-screenshot 패키지 추가
- ScreenCapture: 전체화면 오버레이 + 드래그 영역 선택 + DOM 캡처
- MessengerModal: 캡처 버튼(Scissors) 추가, 캡처 중 모달 숨김
- MessageInput: forwardRef로 addFiles 메서드 외부 노출
- ChatPanel: messageInputRef prop 추가 및 전달

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 12:20:41 +09:00
6b3e6cce5e [RAPID-micro] 새 대화 모달 z-index 메신저 위로 상향 (10000/10001)
[RAPID-fix] 메신저 사용자 목록 회사 전환 시 캐시 격리

- useRooms/useCompanyUsers queryKey에 companyCode 포함
- 회사 전환 시 다른 회사 사용자가 캐시에서 노출되던 문제 수정

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

[RAPID-fix] 메신저 버그 수정 (8건)

- 방 생성 후 자동 입장 + 커서 포커스
- DM 헤더 상대방 이름, 그룹 "이름1, 이름2 외 N명" 표시
- 채팅방 이름 인라인 수정 기능 추가
- Socket.IO join_rooms 누락 수정 → 실시간 메시지 수신 정상화
- new_message 이벤트 수신 시 React Query 캐시 무효화
- 토스트 알림 stale closure 수정 (ref 패턴 적용)
- 타이핑 이벤트명 백엔드 일치 (user_typing/user_stop_typing)
- 메시지 순서 역전 수정 (.reverse())
- unread queryKey 불일치 수정

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

[RAPID-fix] REST API 메시지 전송 시 Socket.IO broadcast 추가

- socketManager.ts 모듈 생성 (io 전역 공유)
- sendMessage 컨트롤러에서 io.to(room).emit('new_message') broadcast
- 상대방 말풍선 너비 고정 수정 (items-start 추가)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 12:20:41 +09:00
c9d04f3018 [RAPID] PCC 체크리스트 업데이트 (공정 90%)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 12:20:41 +09:00
f558073ef8 [RAPID] feat: 메신저 기능 구현 (Socket.IO 실시간 채팅)
- DB: messenger_rooms/participants/messages/reactions/files 테이블 생성
- Backend: REST API 9개 엔드포인트 + Socket.IO 실시간 핸들러
- Frontend: Gmail 스타일 FAB + 모달, 채팅방 목록, 채팅 패널
- 기능: DM/그룹/채널, 파일 첨부, 이모지 리액션, 멘션, 스레드
- 알림: 토스트 on/off 토글, FAB 읽지 않은 배지

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

[RAPID-fix] 메신저 API snake_case→camelCase 변환 및 Socket.IO URL 수정

- useRooms/useMessages/useCompanyUsers 훅에서 DB 응답 camelCase 변환
- Socket.IO 기본 연결 URL 3001 → 8080 수정
- runMigration.ts 마이그레이션 파일 경로 수정 (../../ → ../../../)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

[RAPID-fix] 방 생성 API camelCase/snake_case 호환 처리

- createRoom 컨트롤러에서 participantIds/type/name (camelCase) fallback 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

[RAPID-fix] 메시지 전송 API 추가 (sendMessage 라우트/컨트롤러 누락)

- POST /api/messenger/rooms/:roomId/messages 라우트 등록
- MessengerController.sendMessage 메서드 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 12:20:40 +09:00
e763249342 [RAPID] PCC: MSN 2026-03-30 17:52:57 +09:00
8169420e61 [RAPID-micro] 메일 관리 타이틀에서 (IMAP) 제거 2026-03-30 17:25:07 +09:00
37e553a460 chore: .omc 캐시 추적 제거 2026-03-30 17:19:18 +09:00
ea20f5b333 docs: user-mail PCC 및 체크리스트 작성 (IMAP 기능 완료 반영)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 17:17:30 +09:00
cbf75ad05a chore: .omc 디렉토리 git 추적 제외
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 17:17:25 +09:00
4c42cc7b53 feat: 사용자 메일 관리 IMAP 구현
- IMAP 계정 등록/수정/삭제/연결테스트
- SSE 스트리밍으로 메일 목록 로드 (폴더별 지원)
- 메일 상세 조회, 읽음 처리, 삭제(휴지통 이동), 폴더 이동
- 첨부파일 다운로드 (ReadableStream 진행바)
- SMTP 발송, 답장, 전달
- imapConnectionPool, mailCache 서비스
- encryptionService Node 22+ 호환 수정
- authMiddleware query token 지원 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 17:17:20 +09:00