Skip to content
This repository has been archived by the owner on May 31, 2021. It is now read-only.

Commit

Permalink
Merge pull request #102 from SoyBeansLab/feature/contest_crud
Browse files Browse the repository at this point in the history
contestのCRUDを実装
  • Loading branch information
ucpr authored Sep 14, 2020
2 parents 6048656 + d765a22 commit 420a41d
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 4 deletions.
6 changes: 2 additions & 4 deletions src/domain/Contest/contest.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ def __init__(
description: str,
top_content: str,
problem_number: int,
created_at: Optional[datetime],
updated_at: Optional[datetime],
created_at: Optional[datetime] = None,
updated_at: Optional[datetime] = None,
):
super().__init__(
contest_id=contest_id,
Expand All @@ -41,8 +41,6 @@ def __init__(
description=description,
top_content=top_content,
problem_number=problem_number,
created_at=created_at,
updated_at=updated_at,
)

@staticmethod
Expand Down
62 changes: 62 additions & 0 deletions src/domain/Contest/database/contest_repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,65 @@ def find(self, contest_id: str) -> Contest:
if len(row) == 0:
return None
return Contest(*row)

def store(self, contest: Contest) -> None:
return self.sqlhandler.execute(
"""
INSERT INTO contests (
contest_id,
contest_name,
contest_start_date,
contest_finish_date,
contest_time,
writer,
description,
top_content,
problem_number
)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
""",
contest.contest_id,
contest.contest_name,
contest.contest_start_date,
contest.contest_finish_date,
contest.contest_time,
contest.writer,
contest.description,
contest.top_content,
contest.problem_number,
)

def update(self, contest_id: str, contest: Contest) -> None:
return self.sqlhandler.execute(
"""
UPDATE contests SET
contest_id = %s,
contest_name = %s,
contest_start_date = %s,
contest_finish_date = %s,
contest_time = %s,
writer = %s,
description = %s,
top_content = %s,
problem_number = %s
WHERE contest_id = %s
""",
contest_id,
contest.contest_name,
contest.contest_start_date,
contest.contest_finish_date,
contest.contest_time,
contest.writer,
contest.description,
contest.top_content,
contest.problem_number,
contest_id,
)

def delete(self, contest_id: str) -> None:
return self.sqlhandler.execute(
"""
DELETE FROM contests WHERE contest_id = %s
""",
contest_id,
)
9 changes: 9 additions & 0 deletions src/domain/Contest/usecase/contest_interactor.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,12 @@ def current_contests(self) -> List[Contest]:

def recent_contests(self) -> List[Contest]:
return self.repository.find_recent()

def store(self, contest: Contest) -> None:
return self.repository.store(contest)

def update(self, contest_id: str, contest: Contest) -> None:
return self.repository.update(contest_id, contest)

def delete(self, contest_id: str) -> None:
return self.repository.delete(contest_id)
12 changes: 12 additions & 0 deletions src/domain/Contest/usecase/contest_repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,15 @@ def find_recent(self) -> List[Contest]:
@abstractmethod
def find(self, contest_id: str) -> Contest:
raise NotImplementedError()

@abstractmethod
def store(self, contest: Contest) -> None:
raise NotImplementedError

@abstractmethod
def update(self, contest_id: str, contest: Contest) -> None:
raise NotImplementedError

@abstractmethod
def delete(self, contest_id: str) -> None:
raise NotImplementedError
22 changes: 22 additions & 0 deletions src/infrastructure/waf/fastapi/router.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,34 @@ def set_route_contest(api: FastAPI) -> None:
status_code=200,
tags=["contests"],
)
api.add_api_route(
"/contests",
contest_controller.store,
status_code=201,
methods=["POST"],
tags=["contests"],
)
api.add_api_route(
"/contests/{contest_id}",
contest_controller.contest,
status_code=200,
methods=["GET"],
tags=["contests"],
)
api.add_api_route(
"/contests/{contest_id}",
contest_controller.update,
status_code=200,
methods=["PUT"],
tags=["contests"],
)
api.add_api_route(
"/contests/{contest_id}",
contest_controller.delete,
status_code=200,
methods=["DELETE"],
tags=["contests"],
)


def set_route_problem(api: FastAPI) -> None:
Expand Down
19 changes: 19 additions & 0 deletions src/interface/controllers/contest_controller.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from domain.Contest.contest import Contest
from domain.Contest.database.contest_repository import ContestRepository
from domain.Contest.usecase.contest_interactor import ContestInteractor

Expand Down Expand Up @@ -38,3 +39,21 @@ async def contest(self, contest_id: str):
res_data = contest.as_json()
resp = {"contest": res_data}
return resp

async def store(self, contest: Contest):
self.interactor.store(contest)
resp = {}

return resp

async def update(self, contest_id: str, contest: Contest):
self.interactor.update(contest_id, contest)
resp = {}

return resp

async def delete(self, contest_id: str):
self.interactor.delete(contest_id)
resp = {}

return resp

0 comments on commit 420a41d

Please sign in to comment.