Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • master
1 result

Target

Select target project
  • meanspec/meanspec-hwinfo-daemon
1 result
Select Git revision
  • master
1 result
Show changes
......@@ -19,6 +19,8 @@ deploy:
- docker build --cache-from $CI_REGISTRY_IMAGE:latest -t $CI_REGISTRY_IMAGE:latest -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
- docker push $CI_REGISTRY_IMAGE:latest
- >
apk add curl && curl -H "Host: signal-server" http://hub.enak.kr/hwinfo || true
after_script:
- docker logout $CI_REGISTRY
......@@ -73,6 +73,20 @@ RETURNING part_id;""".format(type=_part_type_enum, columns=columns, value_entrie
return None
def check_if_parts_exist(_cursor, _user_id, _part_ids):
sql = """WITH result AS (SELECT combinations.id AS combination_id,
ARRAY(SELECT part_id FROM relations WHERE relations.combination_id = combinations.id ORDER BY relations.part_id) AS parts
FROM combinations WHERE combinations.owner_id = %s) SELECT combination_id FROM result WHERE parts = %s;"""
_cursor.execute(sql, (_user_id, _part_ids))
data = _cursor.fetchall()
if not data:
return None
_existing_combination_id = data[-1][-1]
return _existing_combination_id
def create_combination(_cursor, nickname, _user_id):
_pc_name = "새 PC"
if nickname:
......@@ -140,6 +154,7 @@ def func():
_parts = parse.handle_xml_body(_xml_document)
_part_ids = []
_created_parts = False
print("Matching parts")
......@@ -157,6 +172,7 @@ def func():
_matched_id = match_part_obj_into_db(part, part_type)
if not _matched_id: # DB에 없는 부품이라면
_created_parts = True
print(".. creating new part with", part["name"])
with db_conn.cursor() as cursor:
_matched_id = create_new_one(part, part_type, cursor)
......@@ -167,21 +183,34 @@ def func():
continue
print(f"[WARNING] failed to match part type={part_type}, part:", part, file=sys.stderr)
print("Creating combination")
with db_conn.cursor() as cursor:
_combination_id = create_combination(cursor, None, _user_id)
if not _combination_id:
print("Failed to create combination", file=sys.stderr)
exit(1)
print("Wiring parts", _part_ids, "to combination id", _combination_id)
with db_conn.cursor() as cursor:
wire_part_to_combination(cursor, _combination_id, *_part_ids)
_combination_id = None
# 이미 존재하는 경우
if not _created_parts:
print("Checking combination existance")
with db_conn.cursor() as cursor:
_combination_id = check_if_parts_exist(cursor, _user_id, _part_ids)
print("Committing to DB")
db_conn.commit()
if _combination_id is not None:
print("Combination exist. Using combination id", _combination_id)
# 새로 추가하는 경우
if _combination_id is not None:
print("Creating combination")
with db_conn.cursor() as cursor:
_combination_id = create_combination(cursor, None, _user_id)
if not _combination_id:
print("Failed to create combination", file=sys.stderr)
exit(1)
print("Wiring parts", _part_ids, "to combination id", _combination_id)
with db_conn.cursor() as cursor:
wire_part_to_combination(cursor, _combination_id, *_part_ids)
print("Committing to DB")
db_conn.commit()
print("Finalizing transaction")
with db_conn.cursor() as cursor:
......