Skip to content

Commit 1d85557

Browse files
committed
프로젝트 전체조회 로직 추가
1 parent b894dd3 commit 1d85557

File tree

6 files changed

+118
-14
lines changed

6 files changed

+118
-14
lines changed

README.md

+26
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,30 @@ docker run --name=postegresql -d \
1010
-e POSTGRES_PASSWORD=password \
1111
-e POSTGRES_DB=jcp \
1212
postgres:12-alpine
13+
```
14+
15+
* kubernetes serviceaccount
16+
```sh
17+
kubectl create ns jcp
18+
```
19+
20+
```yaml
21+
apiVersion: v1
22+
kind: ServiceAccount
23+
metadata:
24+
name: admin
25+
namespace: jcp
26+
---
27+
apiVersion: rbac.authorization.k8s.io/v1
28+
kind: ClusterRoleBinding
29+
metadata:
30+
name: admin
31+
roleRef:
32+
apiGroup: rbac.authorization.k8s.io
33+
kind: ClusterRole
34+
name: cluster-admin
35+
subjects:
36+
- kind: ServiceAccount
37+
name: admin
38+
namespace: jcp
1339
```

app/.env

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
LOCAL_POSTGRESQL_HOST="192.168.10.10:31850"
2-
LOCAL_POSTGRESQL_USER="root"
3-
LOCAL_POSTGRESQL_PASSWORD="password"
1+
LOCAL_POSTGRESQL_HOST="127.0.0.1:31850"
2+
LOCAL_POSTGRESQL_USER="postgresadmin"
3+
LOCAL_POSTGRESQL_PASSWORD="admin123"
44
LOCAL_POSTGRESQL_DB="jcp"
55

66
DEV_POSTGRESQL_HOST="postgres.infra.svc:5432"

app/api/project.py

+26-6
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,35 @@
1111
from logger import log
1212

1313
router = APIRouter(
14-
prefix="/api/v1/project",
14+
prefix="/api/v1",
1515
tags=["project"]
1616
)
1717

18-
@router.get("/")
19-
async def project(
18+
@router.get("/projects")
19+
async def getAll(db: Session = Depends(get_db)):
20+
"""프로젝트 전체조회"""
21+
log.info("============= /project/getALL is called ============= ")
22+
project_manager = ProjectManager()
23+
24+
try:
25+
status_code, detail = project_manager.getProjectALL(db=db)
26+
except Exception as e:
27+
log.error(f"[프로젝트 전체조회 서비스 호출오류] 예기치 못한 오류: {e}")
28+
return JSONResponse(
29+
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
30+
content=""
31+
)
32+
33+
return JSONResponse(
34+
status_code=status_code,
35+
content=detail.dict()
36+
)
37+
38+
@router.get("/project")
39+
async def get(
2040
name: str = None, db: Session = Depends(get_db)
2141
):
22-
"""프로젝트 조회"""
42+
"""프로젝트 단일조회"""
2343
log.info("============= /project/ is called ============= ")
2444
project_manager = ProjectManager()
2545

@@ -45,7 +65,7 @@ async def project(
4565
content=dict(detail)
4666
)
4767

48-
@router.post("/")
68+
@router.post("/project")
4969
async def create(
5070
request: RequestCreateProject, db: Session = Depends(get_db)
5171
):
@@ -66,7 +86,7 @@ async def create(
6686
content=dict(detail)
6787
)
6888

69-
@router.delete("/")
89+
@router.delete("/project")
7090
async def delete(
7191
request: RequestDeleteProject, db: Session = Depends(get_db)
7292
):

app/domain/project/crud.py

+19-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def deleteProject(request: RequestDeleteProject, db: Session):
5151
raise RuntimeError(e)
5252

5353
def getProject(request: RequestGetProject, db: Session):
54-
"""프로젝트 조회"""
54+
"""프로젝트 단일조회"""
5555
try:
5656
statement = text("""
5757
SELECT id, name, description
@@ -71,3 +71,21 @@ def getProject(request: RequestGetProject, db: Session):
7171
raise RuntimeError(e)
7272
else:
7373
return row
74+
75+
def getProjectALL(db: Session):
76+
"""프로젝트 전체조회"""
77+
try:
78+
statement = text("""
79+
SELECT id, name, description
80+
from projects
81+
""")
82+
rows = db.execute(statement, {})
83+
log.info(f"get projectALL success")
84+
except exc.IntegrityError as e:
85+
log.error(f"[-] {e}이 project table에 없습니다.: {e}")
86+
raise RuntimeError(e)
87+
except Exception as e:
88+
log.error(f"[-] other error: {e}")
89+
raise RuntimeError(e)
90+
else:
91+
return rows

app/domain/project/schemas.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from pydantic import BaseModel
2+
from typing import List
23

34

45
class RequestGetProject(BaseModel):
@@ -7,11 +8,20 @@ class RequestGetProject(BaseModel):
78
name: str
89

910
class ResponseGetProject(BaseModel):
10-
"""프로젝트 조회 응답"""
11+
"""프로젝트 단일조회 응답"""
1112
id: str
1213
name: str
1314
error_detail: str
1415

16+
class ProjectInfo(BaseModel):
17+
id: str
18+
name: str
19+
20+
class ResponseGetProjectALL(BaseModel):
21+
"""프로젝트 전체조회 응답"""
22+
results: List[ProjectInfo]
23+
error_detail: str
24+
1525
class RequestCreateProject(BaseModel):
1626
"""프로젝트 생성 요청"""
1727
user_id: int = 1 # 테스트 user_id

app/domain/project/service.py

+33-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
RequestDeleteProject,
77
ResponseDeleteProject,
88
ResponseGetProject,
9-
RequestGetProject
9+
RequestGetProject,
10+
ResponseGetProjectALL,
11+
ProjectInfo
1012
)
1113
import domain.project.crud as project_crud
1214
from logger import log
@@ -101,10 +103,10 @@ def deleteProject(self, request: RequestDeleteProject, db) -> (int, ResponseDele
101103
)
102104

103105
def getProject(self, request: RequestGetProject, db) -> (int, ResponseGetProject):
104-
"""프로젝트 조회"""
106+
"""프로젝트 단일조회"""
105107

106108
try:
107-
result = project_crud.getProject(requset=request, db=db)
109+
result = project_crud.getProject(request=request, db=db)
108110
except Exception as e:
109111
log.error(f"[프로젝트 조회 오류] {request.name} 조회 실패 -> 데이터베이스 오류: {e}")
110112
return status.HTTP_500_INTERNAL_SERVER_ERROR, \
@@ -134,6 +136,34 @@ def getProject(self, request: RequestGetProject, db) -> (int, ResponseGetProject
134136
error_detail=""
135137
)
136138

139+
def getProjectALL(self, db) -> (int, ResponseGetProjectALL):
140+
"""프로젝트 전체조회"""
141+
try:
142+
rows = project_crud.getProjectALL(db=db)
143+
except Exception as e:
144+
log.error(f"[프로젝트 전체 조회 오류] 조회 실패 -> 데이터베이스 오류: {e}")
145+
return status.HTTP_500_INTERNAL_SERVER_ERROR, \
146+
ResponseGetProjectALL(
147+
results=[],
148+
error_detail="프로젝트 조회를 실패했습니다."
149+
)
150+
151+
projects = []
152+
for row in rows:
153+
project = dict(row)
154+
projects.append(
155+
ProjectInfo(
156+
id=project["id"],
157+
name=project["name"]
158+
)
159+
)
160+
161+
return status.HTTP_200_OK, \
162+
ResponseGetProjectALL(
163+
results=projects,
164+
error_detail=""
165+
)
166+
137167
def createProjectValid(self, namespace: str) -> bool:
138168
"""
139169
프로젝트 생성 유효성 검사

0 commit comments

Comments
 (0)