From 6652e79768433802736a4ff3bc71e57802b422f2 Mon Sep 17 00:00:00 2001 From: TtiPo Date: Tue, 16 Jun 2026 23:53:39 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=A0=80=EC=9E=A5=EC=86=8C=20=EC=86=8C?= =?UTF-8?q?=EC=9C=A0=EC=9E=90(=EC=A1=B0=EC=A7=81)=EB=A5=BC=20=EB=B0=B1?= =?UTF-8?q?=EC=97=94=EB=93=9C=20=EC=84=A4=EC=A0=95=EA=B0=92=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 생성 폼/목록의 하드코딩된 'marketing-team' 을 실제 설정값으로 교체한다. - 백엔드: GET /repos/owner ({ owner }) — GITEA_ORG(미연동 시 기본 상수) 반환 - 프론트: useRepo.owner() + repo.store owner/fetchOwner(캐시) - RepoCreatePage 소유자 고정 표시, RepoListPage 배너를 실제 조직명으로 Co-Authored-By: Claude Opus 4.8 (1M context) --- backend/src/modules/repo/repo.controller.ts | 8 +++++++ backend/src/modules/repo/repo.service.ts | 6 ++++++ frontend/src/composables/useRepo.ts | 8 ++++++- frontend/src/pages/relay/RepoCreatePage.vue | 15 +++++++++++--- frontend/src/pages/relay/RepoListPage.vue | 5 +++-- frontend/src/stores/repo.store.ts | 23 ++++++++++++++++++++- 6 files changed, 58 insertions(+), 7 deletions(-) diff --git a/backend/src/modules/repo/repo.controller.ts b/backend/src/modules/repo/repo.controller.ts index 6294e20..9830fed 100644 --- a/backend/src/modules/repo/repo.controller.ts +++ b/backend/src/modules/repo/repo.controller.ts @@ -47,6 +47,14 @@ export class RepoController { return this.repoService.create(dto, user.id); } + // ':repoId' 보다 먼저 선언해야 'owner' 가 파라미터로 매칭되지 않음 + @Get('owner') + @ApiOperation({ summary: '현재 조직(소유자) 조회 — 생성 폼 표시용' }) + @ApiResponse({ status: 200, description: '조회 성공' }) + getOwner(): { owner: string } { + return { owner: this.repoService.getOwner() }; + } + @Get(':repoId') @ApiOperation({ summary: '저장소 단건 조회' }) @ApiResponse({ status: 200, description: '조회 성공' }) diff --git a/backend/src/modules/repo/repo.service.ts b/backend/src/modules/repo/repo.service.ts index 6c1b96e..b2b2414 100644 --- a/backend/src/modules/repo/repo.service.ts +++ b/backend/src/modules/repo/repo.service.ts @@ -57,6 +57,12 @@ export class RepoService { private readonly gitea: GiteaService, ) {} + // 현재 저장소 소유자(조직) — Gitea 연동 시 GITEA_ORG, 아니면 기본 상수. + // 프론트 생성 폼의 "소유자 고정" 표시에 사용(저장소 생성 전 미리 노출). + getOwner(): string { + return this.gitea.enabled ? this.gitea.org : DEFAULT_OWNER; + } + // 내가 멤버인 저장소 목록 async findAllForUser(userId: string): Promise { const memberships = await this.memberRepo.find({ diff --git a/frontend/src/composables/useRepo.ts b/frontend/src/composables/useRepo.ts index e166ae9..45fb59f 100644 --- a/frontend/src/composables/useRepo.ts +++ b/frontend/src/composables/useRepo.ts @@ -9,6 +9,12 @@ export function useRepo() { return (await api.get('/repos')) as unknown as ApiRepo[] } + // 현재 조직(소유자) — 생성 폼의 "소유자 고정" 표시용 + async function owner(): Promise { + const res = (await api.get('/repos/owner')) as unknown as { owner: string } + return res.owner + } + async function get(id: string): Promise { return (await api.get(`/repos/${id}`)) as unknown as ApiRepo } @@ -25,5 +31,5 @@ export function useRepo() { await api.delete(`/repos/${id}`) } - return { list, get, create, update, remove } + return { list, owner, get, create, update, remove } } diff --git a/frontend/src/pages/relay/RepoCreatePage.vue b/frontend/src/pages/relay/RepoCreatePage.vue index b20e7b7..133e706 100644 --- a/frontend/src/pages/relay/RepoCreatePage.vue +++ b/frontend/src/pages/relay/RepoCreatePage.vue @@ -1,14 +1,23 @@