Initial commit
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
from backend.code.enums.errors_enum import ErrorTypeEnum
|
||||
from backend.code.core.controller import Controller
|
||||
from backend.code.enums.errors_enum import ErrorTypeEnum
|
||||
from backend.code.modules.database.database_sqlite import DatabaseSqliteModule
|
||||
from backend.code.modules.settlements.repository import SettlementRepository
|
||||
from backend.code.models.responses.settlement_detail import SettlementDetailResponse
|
||||
|
||||
class SettlementController(Controller):
|
||||
def __init__(self):
|
||||
database = DatabaseSqliteModule()
|
||||
self.repo = SettlementRepository(database)
|
||||
|
||||
def ListSettlements(self, params: str = None):
|
||||
result = []
|
||||
|
||||
if params is not None:
|
||||
params = self._OnProcessParams(params)
|
||||
|
||||
settlements = self.repo.FilterSettlements(params)
|
||||
if len(settlements) == 0:
|
||||
return result
|
||||
|
||||
for _settlement in settlements:
|
||||
settlement = SettlementDetailResponse(
|
||||
Id = _settlement[0],
|
||||
Name = _settlement[1],
|
||||
Address = _settlement[2],
|
||||
LastDone = _settlement[4],
|
||||
LastDoneBy = _settlement[5],
|
||||
Active = _settlement[6]
|
||||
)
|
||||
result.append(settlement)
|
||||
|
||||
return result
|
||||
|
||||
def SelectSettlement(self, id: int):
|
||||
settlement = self.repo.SelectSettlementById(id)
|
||||
if settlement is None:
|
||||
return
|
||||
|
||||
return SettlementDetailResponse(
|
||||
Id = settlement[0],
|
||||
Name = settlement[1],
|
||||
Address = settlement[2],
|
||||
LastDone = settlement[4],
|
||||
LastDoneBy = settlement[5],
|
||||
Active = settlement[6]
|
||||
)
|
||||
|
||||
def RegisterSettlement(self, name: str, address: str, active: bool = True):
|
||||
exists = self.repo.FilterSettlements({'name': name, 'address': address})
|
||||
if len(exists) > 0:
|
||||
return ErrorTypeEnum.SETTLEMENT_EXISTS
|
||||
|
||||
settlement_id = self.repo.InsertSettlement(name, address, active)
|
||||
if settlement_id is None:
|
||||
return
|
||||
|
||||
return SettlementDetailResponse(
|
||||
Id = settlement_id,
|
||||
Name = name,
|
||||
Address = address,
|
||||
LastDone = None,
|
||||
LastDoneBy = None,
|
||||
Active = active
|
||||
)
|
||||
|
||||
def EditSettlement(self, id: int, name: str, address: str, active: bool = True):
|
||||
exists = self.repo.SelectSettlementById(id)
|
||||
if exists is None:
|
||||
return ErrorTypeEnum.SETTLEMENT_ID_NOT_EXISTS
|
||||
|
||||
edited = self.repo.UpdateSettlement(id, name, address, active)
|
||||
if edited == 0:
|
||||
return
|
||||
|
||||
return True
|
||||
|
||||
def RegisterSettlementDone(self, id: int, doneAt: datetime, doneBy: int):
|
||||
pass
|
||||
|
||||
def DeleteSettlement(self, id: int):
|
||||
exists = self.repo.SelectSettlementById(id)
|
||||
if exists is None:
|
||||
return ErrorTypeEnum.SETTLEMENT_ID_NOT_EXISTS
|
||||
|
||||
deleted = self.repo.DeleteSettlement(id)
|
||||
if deleted == 0:
|
||||
return
|
||||
|
||||
return True
|
||||
@@ -0,0 +1,87 @@
|
||||
from backend.code.modules.database.database import DatabaseModule
|
||||
from datetime import datetime
|
||||
|
||||
class SettlementRepository():
|
||||
def __init__(self, repo: DatabaseModule):
|
||||
self.conn = repo.conn
|
||||
self.cursor = repo.cursor
|
||||
|
||||
def FilterSettlements(self, filters: dict = None):
|
||||
params = list()
|
||||
|
||||
sql = '''
|
||||
SELECT *
|
||||
FROM settlements
|
||||
WHERE 1=1
|
||||
'''
|
||||
|
||||
if filters is not None:
|
||||
if 'name' in filters:
|
||||
sql = sql + ' AND name LIKE ?'
|
||||
params.append(filters['name'])
|
||||
|
||||
if 'address' in filters:
|
||||
sql = sql + ' AND address LIKE ?'
|
||||
params.append(filters['address'])
|
||||
|
||||
if 'last_done_by' in filters:
|
||||
sql = sql + ' AND last_done_by LIKE ?'
|
||||
params.append(filters['last_done_by'])
|
||||
|
||||
if 'last_done' in filters:
|
||||
sql = sql + ' AND last_done = ?'
|
||||
params.append(filters['last_done'])
|
||||
|
||||
# print(sql)
|
||||
|
||||
self.cursor.execute(sql, params)
|
||||
return self.cursor.fetchall()
|
||||
|
||||
def SelectSettlementById(self, id: int):
|
||||
sql = '''
|
||||
SELECT *
|
||||
FROM settlements
|
||||
WHERE id = ?
|
||||
AND active
|
||||
'''
|
||||
self.cursor.execute(sql, [id])
|
||||
return self.cursor.fetchone()
|
||||
|
||||
def InsertSettlement(self, name: str, address: str, active: bool = True):
|
||||
sql = '''
|
||||
INSERT INTO settlements(name, address, active)
|
||||
VALUES(?, ?, ?)
|
||||
'''
|
||||
self.cursor.execute(sql, [name, address, active])
|
||||
self.conn.commit()
|
||||
return self.cursor.lastrowid
|
||||
|
||||
def UpdateSettlement(self, id: int, name: str, address: str, active: bool = True):
|
||||
sql = '''
|
||||
UPDATE settlements
|
||||
set name = ?, address = ?, active = ?
|
||||
WHERE id = ?
|
||||
'''
|
||||
self.cursor.execute(sql, [name, address, active, id])
|
||||
self.conn.commit()
|
||||
return self.cursor.rowcount
|
||||
|
||||
def RegisterSettlementDone(self, id: int, user_done: int, done_at: datetime = datetime.now()):
|
||||
sql = '''
|
||||
UPDATE settlements
|
||||
SET last_done_by = ?, last_done = ?
|
||||
WHERE id = ?
|
||||
'''
|
||||
self.cursor.execute(sql, [done_at, user_done, id])
|
||||
self.conn.commit()
|
||||
return self.cursor.rowcount
|
||||
|
||||
def DeleteSettlement(self, id: int):
|
||||
sql = '''
|
||||
UPDATE settlements
|
||||
SET active = false
|
||||
WHERE id = ?
|
||||
'''
|
||||
self.cursor.execute(sql, [id])
|
||||
self.conn.commit()
|
||||
return self.cursor.rowcount
|
||||
@@ -0,0 +1,62 @@
|
||||
from fastapi import APIRouter, Query, status, Depends, Response, HTTPException
|
||||
|
||||
from backend.code.modules.settlements.controller import SettlementController
|
||||
from backend.code.models.responses.settlement_detail import SettlementDetailResponse
|
||||
from backend.code.models.requests.settlement_register import SettlementRegisterRequest
|
||||
from backend.code.models.requests.settlement_edit import SettlementEditRequest
|
||||
from backend.code.models.requests.settlement_register_done import SettlementRegisterDoneRequest
|
||||
|
||||
routes = APIRouter(prefix="/settlements", tags=['Settlement'])
|
||||
controller = SettlementController()
|
||||
|
||||
@routes.get("", status_code = status.HTTP_200_OK, response_model = list[SettlementDetailResponse])
|
||||
def ListSettlements(params: str | None = Query(default = None, alias = 'query')):
|
||||
settlements = controller.ListSettlements(params)
|
||||
if settlements is None:
|
||||
raise HTTPException(status_code = status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
if len(settlements) == 0:
|
||||
return Response(status_code = status.HTTP_204_NO_CONTENT)
|
||||
|
||||
return settlements
|
||||
|
||||
@routes.get("/{id}", status_code = status.HTTP_200_OK, response_model = SettlementDetailResponse)
|
||||
def GetSettlement(id: int):
|
||||
settlement = controller.SelectSettlement(id)
|
||||
if settlement is None:
|
||||
raise HTTPException(status_code = status.HTTP_404_NOT_FOUND)
|
||||
|
||||
return settlement
|
||||
|
||||
@routes.post('', status_code = status.HTTP_201_CREATED, response_model = SettlementDetailResponse)
|
||||
def RegisterSettlement(data: SettlementRegisterRequest):
|
||||
created = controller.RegisterSettlement(data.Name, data.Address, data.Active)
|
||||
if created is None:
|
||||
raise HTTPException(status_code = status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
if created == -9:
|
||||
raise HTTPException(status_code = status.HTTP_409_CONFLICT, detail = 'Settlement name or address exists')
|
||||
|
||||
return created
|
||||
|
||||
@routes.put("/{id}", status_code = status.HTTP_204_NO_CONTENT)
|
||||
def EditSettlement(id: str, data: SettlementEditRequest):
|
||||
edited = controller.EditSettlement(id, data.Name, data.Address, data.Active)
|
||||
if edited is None:
|
||||
raise HTTPException(status_code = status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
if deleted == -10:
|
||||
raise HTTPException(status_code = status.HTTP_404_NOT_FOUND)
|
||||
|
||||
@routes.post('/done', status_code = status.HTTP_200_OK)
|
||||
def RegisterSettlementDone(data: SettlementRegisterDoneRequest):
|
||||
registered = controller.
|
||||
|
||||
@routes.delete("/{id}", status_code = status.HTTP_204_NO_CONTENT)
|
||||
def DisableSettlement(id: str):
|
||||
deleted = controller.DeleteSettlement(id)
|
||||
if deleted is None:
|
||||
raise HTTPException(status_code = status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
if deleted == -10:
|
||||
raise HTTPException(status_code = status.HTTP_404_NOT_FOUND)
|
||||
Reference in New Issue
Block a user