ucharles / gachatory

https://www.gachatory.com
0 stars 0 forks source link

fix: en 페이지에 번역이 적용되지 않음 #145

Closed ucharles closed 3 months ago

ucharles commented 3 months ago

원인

capsule_bulk_update.append( UpdateOne( {"_id": capsule_toy.id}, { "$set": { "localization": [new_kor.id, new_eng.capsuleId], } }, ) )



## 추후 대응
1. 컬렉션 `capsule-toy`에서 요소 `localization`에 자신의 도큐먼트 id가 있는 경우 삭제
2. 삭제 후 요소 `capsule-toy.localization`의 길이가 1인 캡슐 토이만 수집
3. 컬렉션 `localization` 에서 `capsule-toy._id == localization.capsuleId`이고 요소 `localization.lng == en`인 `localization._id`를 해당 `capsule-toy.localization`에 추가
ucharles commented 3 months ago

아래 코드로 해결

def delete_capsuleId_from_localization():

    # connect to db
    try:
        connect(database_name, host=database_url)
        logging.info("DB Connection Success")
    except Exception as e:
        logging.error(f"DB Connection Error: {e}")
        return

    capsules = CapsuleToy.objects(Q(localization__exists=True))

    match_id_localization = []

    for capsule in capsules:
        if capsule.id in capsule.localization:
            localization = Localization.objects(
                Q(capsuleId=capsule.id) & Q(lng="en")
            ).first()
            logging.info(f"name: {capsule.name}, id: {capsule.id}")
            logging.info(f"localization: {localization.name}, id: {localization.id}")
            capsule.localization.remove(capsule.id)
            capsule.localization.append(localization.id)
            logging.info(
                f"name: {capsule.name}, id: {capsule.id}, localization: {capsule.localization}"
            )
            capsule.save()

    print(len(match_id_localization))