2026-06-13 PinPoint 작업일지입니다. 오늘은 2건의 작업을 진행했습니다.
`landing` (`src/app/`)
현상/기능
- 하드코딩된 시공 사례 이미지를 사용자가 관리자에서 업로드한 이미지로 동적 표시하고, 한 페이지에 4×3(12개)씩 페이지화
현상/기능
- 시공 사례 1페이지는 보이나 페이지 전환 시 이미지가 안 보임
현상/기능
- 시공 사례 그리드 이미지 클릭 시 크게 보기
현상/기능
- 시공 사례 위에 네이버 블로그 최근 글 카드와 더보기 링크 추가
현상/기능
- 관리자가 랜딩 블로그 글을 직접 추가·수정·삭제·순서 변경
작업
- 파일
- 내용
- `prisma/migrations/20260613010000_add_landing_portfolio_menu.sql`
- `src/lib/`
- `src/app/api/landing/portfolio/`
- `src/app/api/landing/portfolio/admin/`
- `src/app/landing-portfolio-management/`
- `src/app/landing-portfolio-management/components/`
- `src/components/landing/`
- `src/app/`
- 기존 `media` 테이블을 `entity_type='landing_portfolio'`, `entity_id=1` 기준으로 재사용
- 관리자 메뉴 「시공 사례 관리」 추가 SQL 작성
- 공개 API `GET /api/landing/portfolio`로 12개 단위 이미지 조회
- 관리자 API `GET|POST|PATCH /api/landing/portfolio/admin`으로 서버 업로드·목록 조회·노출 순서 저장
- 관리자 페이지에서 이미지 업로드, 삭제, 위/아래 순서 변경 지원
- 브라우저 R2 직접 PUT이 `confirm`까지 도달하지 않는 문제를 피하기 위해 관리자 업로드는 서버 라우트에서 R2 업로드와 `media` 등록을 함께 처리
- 랜딩 `PortfolioSection`에서 하드코딩 이미지 제거, 4열 그리드와 이전/다음 페이지네이션 적용
- `R2_PUBLIC_URL` 기반 `next/image` remotePatterns 추가
- 배포 필요: 메뉴 마이그레이션 SQL 실행, R2 환경 변수 설정 확인, 관리자 업로드 후 랜딩 표시 테스트
- 완료 여부: 코드 작성 완료 — DB 반영 및 브라우저 동작 확인 필요
- 파일: `src/components/landing/`
- 내용: 그리드에 `key={page}` 적용, `whileInView` → `animate="visible"`로 변경해 페이지마다 stagger 재실행
- 원인: Framer Motion 그리드가 `whileInView` + `once: true`로 1회만 `visible` 처리되어, 2페이지 새 카드가 `opacity: 0` 상태로 남음
- 완료 여부: 코드 수정 완료 — 2페이지 이상 전환 테스트 필요
- 내용: 기존 `useImagePreview` 연동, 카드 클릭/키보드로 확대 다이얼로그 오픈
- 완료 여부: 코드 수정 완료 — 랜딩에서 클릭·확대·닫기 테스트 필요
- 최근 글 4건 카드(제목·날짜·외부 링크), 블로그 홈 더보기 버튼
- `PainPointSection`과 `PortfolioSection` 사이 배치, 네비 `#blog` 앵커 추가
- 완료 여부: ✅ 랜딩 UI 완료
- `prisma/migrations/20260613020000_create_landing_blog_posts.sql`
- `src/app/api/landing/blog/`
- `src/app/api/landing/blog/admin/`
- `src/app/api/landing/blog/admin/[id]/`
- `src/app/landing-blog-management/**`
- `landing_blog_posts` 테이블 + 기존 4건 시드 + 「블로그 관리」 메뉴
- 관리 페이지: 글 추가/수정/삭제, 노출 여부, 순서 변경
- 랜딩 `BlogSection` → DB 활성 글 상위 4건 조회
- 배포 필요: `20260613020000_create_landing_blog_posts.sql` 실행
- 완료 여부: 코드 수정 완료 — PUT/DELETE `executeUpdate` 반환값 처리 버그 수정, 게시일 KST `toISOString` 하루 밀림 수정
`worker-management`, `user-management`
현상/기능
- 사용자관리에서 현장소장으로 변경 후 현장소장 현황에서 공사이력·정보삭제 버튼 비활성 (기존 소장은 정상)
작업
- 파일
- 내용
- 원인: `member.level=1`만 변경되고 `site_managers` 행 미생성 → 목록 `id` null → 버튼 `disabled`
- `prisma/procedures/site_managers.sql` (`ensure_site_manager_for_member`)
- `prisma/procedures/members.sql` (`update_member_role` 연동)
- `prisma/migrations/20260613030000_ensure_site_manager_on_role_change.sql` (프로시저 + level=1 백필)
- `src/app/api/members/[no]/`
- `src/app/worker-management/components/` (삭제 로딩 null 비교 버그)
- 현장소장 역할 저장 시 `site_managers` 자동 생성/복원
- 다른 구분으로 변경 시 `site_managers` soft-delete
- 기존 level=1 회원 site_managers 백필 INSERT
- 배포 필요: `20260613030000_ensure_site_manager_on_role_change.sql` 실행 (또는 프로시저 수동 반영)
- 완료 여부: 코드 수정 완료 — 마이그레이션 후 신규·기존 현장소장 버튼 활성 확인 필요