From d6e7ade5fde7d4229693ee59bb28de5d35a67dc7 Mon Sep 17 00:00:00 2001 From: ucpr Date: Tue, 15 Sep 2020 00:55:55 +0000 Subject: [PATCH 01/11] =?UTF-8?q?feat:=20created=5Fat=E3=81=A8updated=5Fat?= =?UTF-8?q?=E3=81=AE=E3=83=87=E3=83=95=E3=82=A9=E3=83=AB=E3=83=88=E5=80=A4?= =?UTF-8?q?=E3=82=92None=E3=81=AB=E6=8C=87=E5=AE=9A=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/domain/Contest/contest.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/domain/Contest/contest.py b/src/domain/Contest/contest.py index 113d8d0..7483791 100644 --- a/src/domain/Contest/contest.py +++ b/src/domain/Contest/contest.py @@ -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, @@ -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 From 55d334bd6f3cb2b4b38adfc5789a0c9d952a7247 Mon Sep 17 00:00:00 2001 From: ucpr Date: Tue, 15 Sep 2020 00:56:40 +0000 Subject: [PATCH 02/11] feat: impl database repository for contests --- .../Contest/database/contest_repository.py | 62 +++++++++++++++++++ .../Contest/usecase/contest_repository.py | 12 ++++ 2 files changed, 74 insertions(+) diff --git a/src/domain/Contest/database/contest_repository.py b/src/domain/Contest/database/contest_repository.py index 06210b2..97f0a61 100644 --- a/src/domain/Contest/database/contest_repository.py +++ b/src/domain/Contest/database/contest_repository.py @@ -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, + conetst.writer, + contest.description, + contest.top_content, + contest.problem_number, + ) + + def update(self, 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.contest_id, + contest.contest_name, + contest.contest_start_date, + contest.contest_finish_date, + contest.contest_time, + conetst.writer, + contest.description, + contest.top_content, + contest.problem_number, + contest.contest_id, + ) + + def delete(self, contest_id: str) -> None: + return self.sqlhandler.execute( + """ + DELETE FROM contests WHERE contest_id = %s + """, + contest_id, + ) diff --git a/src/domain/Contest/usecase/contest_repository.py b/src/domain/Contest/usecase/contest_repository.py index 0ffae5c..8a475bf 100644 --- a/src/domain/Contest/usecase/contest_repository.py +++ b/src/domain/Contest/usecase/contest_repository.py @@ -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: Contest) -> None: + raise NotImplementedError + + @abstractmethod + def delete(self, contest_id: str) -> None: + raise NotImplementedError From 0341b7db755dce75bf1bdbc006f04619e920d2c0 Mon Sep 17 00:00:00 2001 From: ucpr Date: Tue, 15 Sep 2020 00:57:04 +0000 Subject: [PATCH 03/11] feat: impl interactor for contests --- src/domain/Contest/usecase/contest_interactor.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/domain/Contest/usecase/contest_interactor.py b/src/domain/Contest/usecase/contest_interactor.py index b1fd289..7f11333 100644 --- a/src/domain/Contest/usecase/contest_interactor.py +++ b/src/domain/Contest/usecase/contest_interactor.py @@ -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: Contest) -> None: + return self.repository.update(contest) + + def delete(self, contest_id: str) -> None: + return self.repository.delete(contest_id) From bd33a00ddf4c649c6876d0a364157be027b2235f Mon Sep 17 00:00:00 2001 From: ucpr Date: Tue, 15 Sep 2020 01:27:00 +0000 Subject: [PATCH 04/11] feat: add routing for contests --- src/infrastructure/waf/fastapi/router.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/infrastructure/waf/fastapi/router.py b/src/infrastructure/waf/fastapi/router.py index 56c5e2b..39c441c 100644 --- a/src/infrastructure/waf/fastapi/router.py +++ b/src/infrastructure/waf/fastapi/router.py @@ -35,9 +35,31 @@ def set_route_contest(api: FastAPI) -> None: 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.store, + status_code=201, + methods=["POST"], + 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: From 7c00874f597a5aaadacc7e53a1e85627927e43eb Mon Sep 17 00:00:00 2001 From: ucpr Date: Tue, 15 Sep 2020 01:27:26 +0000 Subject: [PATCH 05/11] fix: fix typo --- src/domain/Contest/database/contest_repository.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/domain/Contest/database/contest_repository.py b/src/domain/Contest/database/contest_repository.py index 97f0a61..0c6e6a4 100644 --- a/src/domain/Contest/database/contest_repository.py +++ b/src/domain/Contest/database/contest_repository.py @@ -96,7 +96,7 @@ def update(self, contest: Contest) -> None: contest.contest_start_date, contest.contest_finish_date, contest.contest_time, - conetst.writer, + contest.writer, contest.description, contest.top_content, contest.problem_number, From 643526f2ae4ffd28d7116b4ec7a04cfe109e69e7 Mon Sep 17 00:00:00 2001 From: ucpr Date: Tue, 15 Sep 2020 01:28:08 +0000 Subject: [PATCH 06/11] feat: impl controller for contests --- .../controllers/contest_controller.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/interface/controllers/contest_controller.py b/src/interface/controllers/contest_controller.py index 2d6cde8..40ecf00 100644 --- a/src/interface/controllers/contest_controller.py +++ b/src/interface/controllers/contest_controller.py @@ -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 @@ -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_id: str, contest: Contest): + self.interactor.store(contest) + resp = {} + + return resp + + async def update(self, contest_id: str, contest: Contest): + self.interactor.update(contest) + resp = {} + + return resp + + async def delete(self, contest_id: str): + self.interactor.delete(contest_id) + resp = {} + + return resp From 344f1060c69533cf39f8e72b56a9e964eb1ef4ce Mon Sep 17 00:00:00 2001 From: ucpr Date: Tue, 15 Sep 2020 01:35:42 +0000 Subject: [PATCH 07/11] feat: change the endpoint of a POST request --- src/infrastructure/waf/fastapi/router.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/infrastructure/waf/fastapi/router.py b/src/infrastructure/waf/fastapi/router.py index 39c441c..ac41400 100644 --- a/src/infrastructure/waf/fastapi/router.py +++ b/src/infrastructure/waf/fastapi/router.py @@ -33,17 +33,17 @@ def set_route_contest(api: FastAPI) -> None: tags=["contests"], ) api.add_api_route( - "/contests/{contest_id}", - contest_controller.contest, - status_code=200, - methods=["GET"], + "/contests", + contest_controller.store, + status_code=201, + methods=["POST"], tags=["contests"], ) api.add_api_route( "/contests/{contest_id}", - contest_controller.store, - status_code=201, - methods=["POST"], + contest_controller.contest, + status_code=200, + methods=["GET"], tags=["contests"], ) api.add_api_route( From d9e4eca0a1b47679686f4419c79e58449c2aa892 Mon Sep 17 00:00:00 2001 From: ucpr Date: Tue, 15 Sep 2020 01:36:09 +0000 Subject: [PATCH 08/11] fix: fix typo --- src/domain/Contest/database/contest_repository.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/domain/Contest/database/contest_repository.py b/src/domain/Contest/database/contest_repository.py index 0c6e6a4..40fe3fb 100644 --- a/src/domain/Contest/database/contest_repository.py +++ b/src/domain/Contest/database/contest_repository.py @@ -70,7 +70,7 @@ def store(self, contest: Contest) -> None: contest.contest_start_date, contest.contest_finish_date, contest.contest_time, - conetst.writer, + contest.writer, contest.description, contest.top_content, contest.problem_number, From 86c3fba0d2c237258cdce07563e53f676f8670f7 Mon Sep 17 00:00:00 2001 From: ucpr Date: Tue, 15 Sep 2020 01:36:22 +0000 Subject: [PATCH 09/11] feat: remove path params --- src/interface/controllers/contest_controller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interface/controllers/contest_controller.py b/src/interface/controllers/contest_controller.py index 40ecf00..aceae11 100644 --- a/src/interface/controllers/contest_controller.py +++ b/src/interface/controllers/contest_controller.py @@ -40,7 +40,7 @@ async def contest(self, contest_id: str): resp = {"contest": res_data} return resp - async def store(self, contest_id: str, contest: Contest): + async def store(self, contest: Contest): self.interactor.store(contest) resp = {} From 4a9590e65841c76d9273165f23521ae3239a6e1f Mon Sep 17 00:00:00 2001 From: ucpr Date: Tue, 15 Sep 2020 01:42:33 +0000 Subject: [PATCH 10/11] feat: fix the value of where --- src/domain/Contest/database/contest_repository.py | 6 +++--- src/domain/Contest/usecase/contest_interactor.py | 4 ++-- src/domain/Contest/usecase/contest_repository.py | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/domain/Contest/database/contest_repository.py b/src/domain/Contest/database/contest_repository.py index 40fe3fb..84d324a 100644 --- a/src/domain/Contest/database/contest_repository.py +++ b/src/domain/Contest/database/contest_repository.py @@ -76,7 +76,7 @@ def store(self, contest: Contest) -> None: contest.problem_number, ) - def update(self, contest: Contest) -> None: + def update(self, contest_id: str, contest: Contest) -> None: return self.sqlhandler.execute( """ UPDATE contests SET @@ -91,7 +91,7 @@ def update(self, contest: Contest) -> None: problem_number = %s WHERE contest_id = %s """, - contest.contest_id, + contest_id, contest.contest_name, contest.contest_start_date, contest.contest_finish_date, @@ -100,7 +100,7 @@ def update(self, contest: Contest) -> None: contest.description, contest.top_content, contest.problem_number, - contest.contest_id, + contest_id, ) def delete(self, contest_id: str) -> None: diff --git a/src/domain/Contest/usecase/contest_interactor.py b/src/domain/Contest/usecase/contest_interactor.py index 7f11333..72e8387 100644 --- a/src/domain/Contest/usecase/contest_interactor.py +++ b/src/domain/Contest/usecase/contest_interactor.py @@ -26,8 +26,8 @@ def recent_contests(self) -> List[Contest]: def store(self, contest: Contest) -> None: return self.repository.store(contest) - def update(self, contest: Contest) -> None: - return self.repository.update(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) diff --git a/src/domain/Contest/usecase/contest_repository.py b/src/domain/Contest/usecase/contest_repository.py index 8a475bf..a12c321 100644 --- a/src/domain/Contest/usecase/contest_repository.py +++ b/src/domain/Contest/usecase/contest_repository.py @@ -30,7 +30,7 @@ def store(self, contest: Contest) -> None: raise NotImplementedError @abstractmethod - def update(self, contest: Contest) -> None: + def update(self, contest_id: str, contest: Contest) -> None: raise NotImplementedError @abstractmethod From d765a222174150a152afd6a321b0c6fe419e584f Mon Sep 17 00:00:00 2001 From: ucpr Date: Tue, 15 Sep 2020 01:43:41 +0000 Subject: [PATCH 11/11] feat: add a value to interactor --- src/interface/controllers/contest_controller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interface/controllers/contest_controller.py b/src/interface/controllers/contest_controller.py index aceae11..bab0e2a 100644 --- a/src/interface/controllers/contest_controller.py +++ b/src/interface/controllers/contest_controller.py @@ -47,7 +47,7 @@ async def store(self, contest: Contest): return resp async def update(self, contest_id: str, contest: Contest): - self.interactor.update(contest) + self.interactor.update(contest_id, contest) resp = {} return resp