Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d4eacf1

Browse files
asset manager CRUD operation implemented
1 parent fea8813 commit d4eacf1

File tree

11 files changed

+272
-3
lines changed

11 files changed

+272
-3
lines changed

‎asset_mgr/.idea/asset_mgr.iml

Lines changed: 5 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎asset_mgr/.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
File renamed without changes.

‎asset_mgr/app/src/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# uvicorn app_assetmgr:app_v1 --reload

‎asset_mgr/app/src/app_assetmgr.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from fastapi import FastAPI
2+
from logzero import logger as log
3+
from app_services import AssetInfoService
4+
from app_models import AssetInfo, AssetInfoReq
5+
6+
app_v1 = FastAPI()
7+
8+
assetservice = AssetInfoService()
9+
10+
11+
@app_v1.get("/v1/assetmgr/{assetid}")
12+
def get_asset_info(assetid: str):
13+
log.info(f"get_asset_info {assetid}")
14+
result = assetservice.get_asset_info(assetid)
15+
return {"asset_info": result}
16+
17+
18+
@app_v1.post("/v1/assetmgr")
19+
def add_asset_info(asset_info: AssetInfoReq):
20+
log.info(f"add_asset_info {AssetInfoReq}")
21+
result = assetservice.add_asset_info(asset_info)
22+
return {"asset_info": result}
23+
24+
25+
@app_v1.put("/v1/assetmgr/{assetid}")
26+
def update_asset_info(assetid: str, asset_info: AssetInfoReq):
27+
log.info(f"update_asset_info {AssetInfoReq}")
28+
result = assetservice.update_asset_info(assetid, asset_info)
29+
return {"asset_info": result}
30+
31+
32+
@app_v1.delete("/v1/assetmgr/{assetid}")
33+
def del_asset_info(assetid: str):
34+
log.info(f"del_asset_info {assetid}")
35+
result = assetservice.del_asset_info(assetid)
36+
return {"message": result}

‎asset_mgr/app/src/app_config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
db_connect_str = "postgres://postgres:ABC_abc1@localhost:5432/postgres"

‎asset_mgr/app/src/app_database.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from logzero import logger as log
2+
from sqlalchemy import create_engine
3+
from sqlalchemy.orm import sessionmaker
4+
from sqlalchemy.ext.declarative import declarative_base
5+
from app_config import *
6+
7+
Base = declarative_base()
8+
9+
global_db_obj = None
10+
11+
db_connection = None
12+
13+
db_session = None
14+
15+
16+
class DBInit:
17+
def __init__(self):
18+
log.info(f"__init__ BEGINS")
19+
try:
20+
self.engine = create_engine(db_connect_str, echo=True)
21+
self.connection = None # TODO
22+
23+
Session = sessionmaker(bind=self.engine)
24+
self.session = Session()
25+
26+
Base.metadata.create_all(self.engine)
27+
except Exception as e:
28+
log.exception(f"DB init failed ", e)
29+
log.info(f"__init__ ENDS")
30+
31+
def get_connection(self):
32+
return self.connectin
33+
34+
def get_session(self):
35+
return self.session
36+
37+
38+
class DataBaseObj:
39+
@staticmethod
40+
def init_db_obj():
41+
global global_db_obj
42+
if global_db_obj is None:
43+
global_db_obj = DBInit()
44+
log.info(f"global_db_obj created")
45+
return global_db_obj
46+
47+
@staticmethod
48+
def get_db_connection():
49+
DataBaseObj.init_db_obj()
50+
global db_connection
51+
if db_connection is None:
52+
db_connection = global_db_obj.get_connection()
53+
log.info(f"db_connection created")
54+
return db_connection
55+
56+
@staticmethod
57+
def get_db_session():
58+
DataBaseObj.init_db_obj()
59+
global db_session
60+
if db_session is None:
61+
db_session = global_db_obj.get_session()
62+
log.info(f"db_session created")
63+
return db_session

‎asset_mgr/app/src/app_models.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from pydantic import BaseModel
2+
from sqlalchemy import Column, Numeric, String
3+
from app_database import Base
4+
5+
6+
class AssetInfo(Base):
7+
8+
__tablename__ = "T_ASSET_INFO"
9+
10+
asset_id = Column(String, primary_key=True, nullable=False)
11+
asset_name = Column(String, nullable=False)
12+
asset_owner = Column(String)
13+
asset_catagory = Column(String, nullable=False)
14+
asset_count = Column(Numeric)
15+
16+
def __repr__(self):
17+
return "AssetInfo(%s, %s, %s, %s, %d)" % (
18+
self.asset_id,
19+
self.asset_name,
20+
self.asset_owner,
21+
self.asset_catagory,
22+
self.asset_count,
23+
)
24+
25+
26+
class AssetInfoReq(BaseModel):
27+
asset_id: str
28+
asset_name: str
29+
asset_owner: str = None
30+
asset_catagory: str
31+
asset_count: int = None

‎asset_mgr/app/src/app_repo.py

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
from logzero import logger as log
2+
from app_database import DataBaseObj
3+
from app_models import AssetInfo, AssetInfoReq
4+
5+
db_obj = DataBaseObj()
6+
7+
8+
class AssetInfoDao(object):
9+
@staticmethod
10+
def query_asset_info(asset_id=-1):
11+
session = db_obj.get_db_session()
12+
try:
13+
query_result = session.query(AssetInfo)
14+
if asset_id == -1:
15+
result = query_result.all()
16+
else:
17+
result = query_result.filter(AssetInfo.asset_id == asset_id).all()
18+
session.commit()
19+
log.debug(result)
20+
except Exception as e:
21+
session.rollback
22+
log.exception(f"query_asset_info operation failed {e}")
23+
finally:
24+
if session is not None:
25+
session.close()
26+
log.debug(f"session closed")
27+
return result
28+
29+
@staticmethod
30+
def add_asset_info(asset_info: AssetInfoReq):
31+
session = db_obj.get_db_session()
32+
try:
33+
count_result = (
34+
session.query(AssetInfo)
35+
.filter(AssetInfo.asset_id == asset_info.asset_id)
36+
.count()
37+
)
38+
if count_result > 0:
39+
log.error(f" user already exists {asset_info.asset_id}")
40+
else:
41+
new_asset = AssetInfo(
42+
asset_id=asset_info.asset_id,
43+
asset_name=asset_info.asset_name,
44+
asset_owner=asset_info.asset_owner,
45+
asset_catagory=asset_info.asset_catagory,
46+
asset_count=asset_info.asset_count,
47+
)
48+
log.debug(f"add_asset_info {new_asset}")
49+
session.add(new_asset)
50+
session.commit()
51+
except Exception as e:
52+
session.rollback
53+
log.exception(f"add_asset_info operation failed {e}")
54+
finally:
55+
if session is not None:
56+
session.close()
57+
log.debug(f"session closed")
58+
59+
@staticmethod
60+
def update_asset_info(asset_id: int, asset_info: AssetInfoReq):
61+
session = db_obj.get_db_session()
62+
try:
63+
query_result = session.query(AssetInfo).filter(AssetInfo.asset_id == asset_id)
64+
if query_result.count() == 0:
65+
log.error(f" user not found", asset_info.asset_id)
66+
else:
67+
query_result.update(
68+
{
69+
AssetInfo.asset_name: asset_info.asset_name,
70+
AssetInfo.asset_owner: asset_info.asset_owner,
71+
AssetInfo.asset_catagory: asset_info.asset_catagory,
72+
AssetInfo.asset_count: asset_info.asset_count,
73+
}
74+
)
75+
session.commit()
76+
except Exception as e:
77+
session.rollback
78+
log.exception(f"update_asset_info operation failed {e}")
79+
finally:
80+
if session is not None:
81+
session.close()
82+
log.debug(f"session closed")
83+
84+
@staticmethod
85+
def delete_asset_info(asset_id=-1):
86+
session = db_obj.get_db_session()
87+
try:
88+
query_result = session.query(AssetInfo)
89+
if asset_id == -1:
90+
query_result.delete()
91+
else:
92+
query_result.filter(AssetInfo.asset_id == asset_id).delete()
93+
session.commit()
94+
except Exception as e:
95+
session.rollback
96+
log.exception(f"delete_asset_info operation failed {e}")
97+
finally:
98+
if session is not None:
99+
session.close()
100+
log.debug(f"session closed")

‎asset_mgr/app/src/app_services.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from logzero import logger
2+
from app_repo import AssetInfoDao
3+
from app_models import AssetInfo, AssetInfoReq
4+
5+
6+
assetdao = AssetInfoDao()
7+
8+
9+
class AssetInfoService(object):
10+
@staticmethod
11+
def get_asset_info(asset_id: str):
12+
logger.debug(f"get_asset_info")
13+
result = assetdao.query_asset_info(asset_id)
14+
return result
15+
16+
@staticmethod
17+
def add_asset_info(asset_info: AssetInfoReq):
18+
logger.debug(f"add_asset_info")
19+
assetdao.add_asset_info(asset_info)
20+
result = assetdao.query_asset_info(asset_info.asset_id)
21+
return result
22+
23+
@staticmethod
24+
def update_asset_info(asset_id: str, asset_info: AssetInfoReq):
25+
logger.debug(f"update_asset_info")
26+
assetdao.update_asset_info(asset_id, asset_info)
27+
result = assetdao.query_asset_info(asset_id)
28+
return result
29+
30+
@staticmethod
31+
def del_asset_info(asset_id: str):
32+
logger.debug(f"del_asset_info")
33+
result = assetdao.delete_asset_info(asset_id)
34+
return result

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /