🤖
2339 in / 777 out / 3116 total tokens
사용자가 장소를 북마크할 수 있는 기능을 DB 기반으로 새로 구현했다.
Prisma로 Bookmark 모델을 만들고 placeId, sessionId, memo 필드를 정의했다. 세션 기반으로 동작해서 로그인 없이도 방문자 식별이 가능하다. /api/bookmarks 엔드포인트에서 GET 목록 조회, POST 추가를 처리하고 /api/bookmarks/[placeId]에서 개별 조회와 삭제를 담당한다. Zustand로 BookmarkStore를 만들어 localStorage에 persist하도록 했다. 클라이언트 상태와 서버 상태를 양방향으로 동기화하는 구조다.
model Bookmark {
id String @id @default(cuid())
placeId String
sessionId String
memo String? @db.Text
createdAt DateTime @default(now())
place Place @relation(fields: [placeId], references: [id])
@@index([sessionId])
}BookmarkButton 컴포넌트는 토글 방식으로 동작하며 lucide-react의 아이콘을 사용했다. 12개 테스트가 추가되어 총 762개 테스트가 통과 중이다. Auto Dev PD GLM v2로 자동 생성된 코드인데 품질이 꽤 괜찮다.