Homepage 모듈
학원 테넌트별 공개 랜딩 홈페이지 설정(섹션 구성, 템플릿 선택)을 저장·조회·공개 전환하는 모듈입니다.
모듈 개요
| 항목 | 내용 |
|---|---|
| Gradle 서브프로젝트 | modules/homepage |
| 베이스 패키지 | com.lumie.homepage |
| 데이터베이스 | PostgreSQL (멀티테넌트 RLS, homepage_config 테이블) |
| 내부 의존 | TenantService (public 조회 시 테넌트 슬러그 검증) |
주요 책임
- 테넌트별 홈페이지 설정(템플릿 ID, 섹션 JSON) 저장·수정 (OWNER 전용)
- 미저장 테넌트에는 기본 설정(transient default)을 반환 —
GET /v1/homepage가 항상 200을 반환 published플래그를 통한 공개/비공개 전환- 커스텀 ID 기반 익명 공개 조회 (
/public/by-custom-id/{customId}, published=true인 경우만)
도메인 모델
HomepageConfig 엔티티
@Entity
@Table(name = "homepage_config")
public class HomepageConfig extends TenantScopedEntity {
Long id; @Version Long version;
TemplateId templateId; // SOLO_INSTRUCTOR 등 템플릿 유형
int templateVersion; // 현재 CURRENT_TEMPLATE_VERSION = 3
boolean published;
String sections; // 섹션별 설정 JSON (JSONB)
}
기본 설정 (defaultConfig)
테넌트가 한 번도 저장하지 않은 경우 HomepageConfig.defaultConfig()가 반환됩니다. 이 객체는 DB에 저장되지 않으며 (id == null), 프런트엔드가 항상 유효한 구조를 렌더링할 수 있도록 합니다.
{
"hero": {
"enabled": true,
"welcomeMessage": "",
"kakaoChannelUrl": "",
"backgroundImageId": null,
"backgroundImageUrl": null
}
}
TemplateId
현재 지원 템플릿: SOLO_INSTRUCTOR (단일 강사형)
REST API
기본 경로: /v1/homepage
| 메서드 | 경로 | 인증 | 설명 |
|---|---|---|---|
GET | /v1/homepage | 인증 필요 | 현재 테넌트 홈페이지 설정 조회 (미설정 시 기본값 반환) |
PUT | /v1/homepage | OWNER | 홈페이지 설정 저장·수정 (upsert) |
POST | /v1/homepage/publish | OWNER | 공개(published=true) 또는 비공개 전환 |
GET | /v1/homepage/public/by-custom-id/\{customId\} | 익명 | 커스텀 ID 기준 공개 홈페이지 조회 (published=false이면 404) |