Skip to content

Commit 06ca61f

Browse files
committed
✨ feat: Implemented the deletion of the service
1 parent 00bf83f commit 06ca61f

8 files changed

Lines changed: 128 additions & 8 deletions

File tree

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from loguru import logger
2+
from ..management.models import DeleteService as delete_service_model
3+
from .models import Services
4+
5+
from sqlalchemy.orm import sessionmaker
6+
from sqlalchemy import create_engine
7+
from ..Config import Config
8+
9+
10+
class DeleteService():
11+
12+
def __init__(self, db_url: str) -> None:
13+
Session: sessionmaker = sessionmaker(
14+
bind=create_engine(db_url))
15+
self.__session = Session()
16+
17+
def delete_service(self, delete_service_model: delete_service_model) -> bool:
18+
19+
# Добавить проверку существование сервиса [Error Code 1]
20+
21+
try:
22+
# service: Services = Services(
23+
# domain=str(add_service_model.domain),
24+
# port=add_service_model.port,
25+
# name=add_service_model.name_service
26+
# )
27+
28+
service = self.__session.query(Services).filter_by(id=delete_service_model.id_service).first()
29+
# print(delete_service_model.id_service)
30+
self.__session.delete(service)
31+
self.__session.commit()
32+
33+
self.__session.close()
34+
return True
35+
except Exception as e:
36+
logger.debug(f"Ошибка: {str(e)}")
37+
return False
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from loguru import logger
2+
from ..management.models import DeleteService as delete_service_model
3+
from .models import Services
4+
5+
from sqlalchemy.orm import sessionmaker
6+
from sqlalchemy import create_engine
7+
from ..Config import Config
8+
9+
10+
class SetMarkDeleteService():
11+
12+
def __init__(self, db_url: str) -> None:
13+
Session: sessionmaker = sessionmaker(
14+
bind=create_engine(db_url))
15+
self.__session = Session()
16+
17+
def set_mark_delete_service(self, delete_service_model: delete_service_model) -> bool:
18+
19+
# Добавить проверку существование сервиса [Error Code 1]
20+
21+
try:
22+
# service: Services = Services(
23+
# domain=str(add_service_model.domain),
24+
# port=add_service_model.port,
25+
# name=add_service_model.name_service
26+
# )
27+
28+
service = self.__session.query(Services).filter_by(id=delete_service_model.id_service).first()
29+
service.delete = True
30+
# print(delete_service_model.id_service)
31+
# self.__session.delete(service)
32+
self.__session.commit()
33+
34+
self.__session.close()
35+
return True
36+
except Exception as e:
37+
logger.debug(f"Ошибка: {str(e)}")
38+
return False

fastapi_gateway_auto_generate/database/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44
from .GetAllServices import GetAllServices
55
from .StatusService import StatusService
66
from .UrlService import UrlService
7+
from .DeleteService import DeleteService
8+
from .SetMarkDeleteSerivce import SetMarkDeleteService
79

810
__all__: list[str] = [
911
"AddService",
1012
"GetAllServices",
1113
"StatusService",
12-
"UrlService"
14+
"UrlService",
15+
"DeleteService",
16+
"SetMarkDeleteService"
1317
]

fastapi_gateway_auto_generate/database/models/Services.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from dataclasses import dataclass
22
from ..SQLAlchemy.declarative_base import Base
33

4-
from sqlalchemy import Column, INTEGER, TEXT
4+
from sqlalchemy import Column, INTEGER, TEXT, BOOLEAN
55
from sqlalchemy.orm import relationship, backref
66
from typing import Any
77
from loguru import logger
@@ -14,12 +14,13 @@ class Services(Base):
1414
domain: Column = Column(TEXT, nullable=False)
1515
port: Column = Column(INTEGER, nullable=False)
1616
name: Column = Column(TEXT, nullable=False, unique=True)
17+
delete: Column = Column(BOOLEAN, nullable=False, default=False)
1718

1819
urls: Any = relationship(
19-
"UrlServices", backref=backref("services"))
20+
"UrlServices", cascade='all,delete', backref=backref("services"))
2021

2122
status: Any = relationship(
22-
"StatusServices", backref=backref("services"))
23+
"StatusServices", cascade='all,delete', backref=backref("services"))
2324

2425
def obj_to_dict(self) -> dict[str, Column]:
2526

@@ -40,5 +41,6 @@ def obj_to_dict(self) -> dict[str, Column]:
4041
"port": self.port,
4142
"name": self.name,
4243
"urls": urls,
43-
"status-code": status_code
44+
"status-code": status_code,
45+
"delete": self.delete
4446
}

fastapi_gateway_auto_generate/domain/usecases/BuildRoutesUsecase.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def execute(self, services_result: list[dict[str, Any]], fast_api_app: FastAPI)
5050
dependencies=route_model.dependencies,
5151
)(f=func)
5252

53-
UpdateOpenApiSchemaUsecase().execute(fast_api_app=fast_api_app)
53+
UpdateOpenApiSchemaUsecase().execute(fast_api_app=fast_api_app)
5454

5555
DeleteTmpModelsFilesUsecase().execute()
5656

fastapi_gateway_auto_generate/domain/usecases/RefreshServicesUsecase.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
from fastapi_gateway_auto_generate.database import StatusService, UrlService, GetAllServices
1+
from fastapi_gateway_auto_generate.database import StatusService, UrlService, GetAllServices, DeleteService
22
from . import *
33
from ...Config import Config
44
from loguru import logger
55
from ..models import RouteModel
66
from fastapi_gateway_auto_generate.management.models import GetAllInfoServices
7+
from fastapi_gateway_auto_generate.management.models import DeleteService as delete_service_model
78

89

910
class RefreshServicesUsecase:
@@ -15,6 +16,7 @@ def execute(self, config: Config) -> None:
1516
get_all_info_services_model: GetAllInfoServices = GetAllInfoServices(
1617
page=1)
1718

19+
1820
services, err = GetAllServices(db_url=config.db_url).get_all_services(
1921
get_all_info_services_model=get_all_info_services_model)
2022

@@ -33,6 +35,12 @@ def execute(self, config: Config) -> None:
3335
del config.fast_api_app.routes[i]
3436
logger.debug(r)
3537

38+
if service['delete']:
39+
# print(service['id'])
40+
DeleteService(db_url=config.db_url).delete_service(
41+
delete_service_model=delete_service_model(id_service=service['id'])
42+
)
43+
3644
services_result = BuildRouteModelsUsecase().execute(
3745
config=config
3846
)

fastapi_gateway_auto_generate/management/routes/DeleteServiceRoute.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from fastapi_gateway_auto_generate.database import SetMarkDeleteService as set_mark_delete_service_database
12
from fastapi import APIRouter, Depends
23
from ..models import DeleteService
34
from ...Config import Config
@@ -10,4 +11,6 @@ def __init__(self, config: Config) -> None:
1011

1112
@self.route.delete("/service", tags=["Service management"])
1213
async def delete_service(delete_service: DeleteService = Depends()) -> dict[str, str]:
13-
return {"data": "Hello World"}
14+
result = set_mark_delete_service_database(db_url=self.__config.db_url).set_mark_delete_service(
15+
delete_service_model=delete_service)
16+
return result
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
"""initial
2+
3+
Revision ID: 239ac7daedc7
4+
Revises: b462f70d947f
5+
Create Date: 2023-02-28 01:56:31.995973
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
11+
12+
# revision identifiers, used by Alembic.
13+
revision = '239ac7daedc7'
14+
down_revision = 'b462f70d947f'
15+
branch_labels = None
16+
depends_on = None
17+
18+
19+
def upgrade() -> None:
20+
# ### commands auto generated by Alembic - please adjust! ###
21+
op.add_column('services', sa.Column('delete', sa.BOOLEAN(), nullable=False))
22+
# ### end Alembic commands ###
23+
24+
25+
def downgrade() -> None:
26+
# ### commands auto generated by Alembic - please adjust! ###
27+
op.drop_column('services', 'delete')
28+
# ### end Alembic commands ###

0 commit comments

Comments
 (0)