An open API service indexing awesome lists of open source software.

https://github.com/winverse/anonymous-board


https://github.com/winverse/anonymous-board

Last synced: 7 days ago
JSON representation

Awesome Lists containing this project

README

        

# 댓글 기능이 있는 익명 게시판 및 키워드 알림 API

Node.js(TypeScript, NestJS) 기반의 익명 게시판 및 키워드 알림 기능 API 서버입니다.

## 주요 기능

**게시판**

* 익명 게시글 작성, 조회, 수정, 삭제 (CRUD)
* 게시글 작성 시 비밀번호 입력 및 수정/삭제 시 비밀번호 검증
* 제목, 작성자 기반 게시글 검색
* 게시글 목록 페이징
* 댓글 작성 (대댓글 지원, 최대 깊이 제한)
* 댓글 목록 조회 (페이징)

**키워드 알림**

* 특정 키워드가 포함된 게시글 또는 댓글 작성 시 해당 키워드를 등록한 사용자에게 알림 발송 (실제 발송 로직 제외, 알림 데이터 생성)
* 키워드 알림 테이블 관리 (작성자, 키워드)

## 기술 스택

* **언어:** TypeScript
* **프레임워크:** Node.js, NestJS
* **데이터베이스:** MySQL
* **ORM:** Prisma
* **비밀번호 해싱:** Argon2
* **유효성 검사:** class-validator, class-transformer
* **설정 관리:** @nestjs/config, Zod
* **API 문서:** Swagger (개발 환경)
* **Build:** swc
* **Module:** esm

## 사전 준비 사항

* Node.js (권장 버전: 20.x 이상)
- 22.14(O), 20.11(O), 18.16(X)
* pnpm
* MySQL 데이터베이스 서버

## 설치 및 실행

1. **저장소 복제:**
```bash
git clone https://github.com/winverse/anonymous-board.git
cd anonymous-board
```

2. **의존성 설치:**
```bash
pnpm install
```

3. **환경 변수 설정:**
* mysql에 접속 후 `CREATE DATABASE {데이터베이스명};` 을 실행 시켜 DB를 생성 해주세요.
* 프로젝트 루트에 `env` 디렉토리를 생성합니다.
* `env` 디렉토리 내부에 `.env.development` 파일을 생성하고 아래 내용을 작성합니다.

```env
# .env.development
PORT=8000
DATABASE_URL="mysql://user:password@localhost:3306/mydatabase"
# 예시: mysql://사용자명:비밀번호@호스트:포트/데이터베이스명
```

* `DATABASE_URL`을 실제 데이터베이스 환경에 맞게 수정하세요.

4. **데이터베이스 마이그레이션:**
```bash
pnpm prisma:db:push
```
* Prisma를 사용하여 데이터베이스 스키마를 생성하고 동기화합니다.
* 위 명령어는 `prisma/schema.prisma` 파일을 기반으로 SQL 마이그레이션 파일을 생성하고 데이터베이스에 적용합니다.

```bash
pnpm prisma:generate
```
* 위 명령어는 `prisma/schema.prisma` 파일을 기반으로 타입스크립트에서 사용할 Prisma Client 코드를 생성/업데이트합니다.

5. **애플리케이션 실행:**
```bash
pnpm dev
```
* 개발 모드 실행

6. **Swagger API 문서 확인**
* 애플리케이션 실행 후, 웹 브라우저에서 `http://localhost:{PORT}/api/documentation` 주소로 접속합니다. (PORT는 `.env` 파일에 설정한 값)
* development 환경에서만 동작 합니다.

## 테스트 실행

```bash
pnpm test
```

## TO-DO

- [x] DB 스키마 생성 스크립트
- [x] 게시글 목록 API
- [x] 게시글 작성 API
- [x] 게시글 수정 API
- [x] 게시글 삭제 API
- [x] 댓글 목록 API
- [x] 댓글 작성 API
- [x] 게시물 또는 댓글 등록 시 알림 기능 구현