Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions src/main/document/service/document_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,29 @@
#3. client에게 보낸다.

from src.main.document.repository.document_repository import get_all_documents, save_document, get_document
from src.main.user.repository.UserRepository import get_user
from src.main.user.repository.UserRepository import UserRepository
from src.main.nft.service.nft_service import process_nft_issuance_with_response
from src.main.document.dto.document import saveDocument, documentRequestDto
from src.main.user.service import UserService
from src.main.user.service.UserService import UserService
from datetime import datetime
import asyncio


# 사용자로부터 request 받아서 ~~
async def save_document_service(request: documentRequestDto, user_id: str) :
repo = UserRepository()
service_repo= UserService()
upload_date = datetime.now()

user = UserService.get_user_info(user_id)
user_name = user["nickname"]

user = service_repo.get_user_info(user_id)
print(user)
user_name = user.nickname
print(user_name)

saved = saveDocument(
file_id = request.file_id,
document_name = request.document_name,
document_image_url="https://image일것 같아?",
document_image_url="https://d1dnmknlj2pdo4.cloudfront.net/blur1.png",
introduction=request.introduction,
downloads=32,
pageNumber=3,
Expand All @@ -36,7 +40,7 @@ async def save_document_service(request: documentRequestDto, user_id: str) :
document_id = save_document(saved)

#point & grade 구하기
user = get_user(user_id)
user = repo.get_user(user_id)
point = user.get("point")
grade = user.get("nft_grade")
user_id = user.get("user_id")
Expand Down
5 changes: 3 additions & 2 deletions src/main/nft/service/nft_service.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from src.main.nft.dto.nft_dto import NftResponseDto, NftSaveDto
from src.main.user.repository.UserRepository import get_user
from src.main.user.repository.UserRepository import UserRepository
from src.main.nft.repository.nft_repository import save_userDB_nft, save_nfts_bulk
from datetime import datetime, timezone, timedelta
import asyncio
Expand Down Expand Up @@ -114,7 +114,8 @@ async def process_nft_issuance_with_response(user_id: str, origin_grade:str, poi
grade = await next_grade(origin_grade)

#user_id
user = get_user(user_id)
repo = UserRepository()
user = repo.get_user(user_id)

# 하나 발급 -> grade의 다음 단계로 받아오게끔 하기
result = await mint_nft_on_xrpl(user, grade, issuser_wallet, issuserAddr)
Expand Down
28 changes: 1 addition & 27 deletions src/main/user/repository/UserRepository.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,34 +12,8 @@ def __init__(self):
def find_wallets_by_user_id(self, user_id: str) -> list:
wallets = list(self.wallets_collection.find({"user_id": user_id}, {"_id": 0}))
return wallets if wallets else []

def save_wallet(self, user_id: str, wallet_address: str, point: int = 0, nft_grade: str = "bronze"):
existing = self.wallets_collection.find_one({"user_id": user_id})
if existing:
self.wallets_collection.update_one(
{"user_id": user_id},
{"$set": {"address": wallet_address,
"point": point,
"nft_grade": nft_grade}}
)
return {"message": "Wallet updated",
"user_id": user_id,
"wallet_address": wallet_address,
"point": point,
"nft_grade": nft_grade}
else:
self.wallets_collection.insert_one({"user_id": user_id,
"address": wallet_address,
"point": point,
"nft_grade": nft_grade})
return {"message": "Wallet created",
"user_id": user_id,
"wallet_address": wallet_address,
"point": point,
"nft_grade": nft_grade}

#db에서 user 가져오기
def get_user(user_id: str) -> str:
def get_user(self, user_id: str) -> str:
client = get_mongo_client()
db = client['xrpedia-data']
nft_collection = db['wallets']
Expand Down
50 changes: 33 additions & 17 deletions src/main/user/service/UserService.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
import os
from src.main.user.dto.UserInfoDto import UserInfoResponse
from dotenv import load_dotenv
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

load_dotenv()

Expand All @@ -22,6 +26,14 @@ def __init__(self):
)
self.cognito_client = session.client(
'cognito-idp',
aws_access_key_id=os.environ.get('AWS_ACCESS_KEY_ID'),
aws_secret_access_key=os.environ.get('AWS_SECRET_ACCESS_KEY'),
region_name=os.environ.get('AWS_REGION', 'ap-northeast-2')
)
elif os.environ.get('ENV') == 'local':
self.cognito_client = boto3.client(
'cognito-idp',

region_name=os.environ.get('AWS_REGION', 'ap-northeast-2')
)
else:
Expand All @@ -30,18 +42,6 @@ def __init__(self):
region_name=os.environ.get('AWS_REGION', 'ap-northeast-2')
)

def get_wallets(self, user_id: str):
wallets = self.user_repository.find_wallets_by_user_id(user_id)
if not wallets:
return {"message": "No wallets found for this user"}
return wallets

async def generate_wallet(self, user_id: str):
wallet = await generate_faucet_wallet(client=client, debug=True)
wallet_address = wallet.classic_address
result = self.user_repository.save_wallet(user_id, wallet_address)
return result

def get_account_info(self, client: JsonRpcClient, address: str, **kwargs) -> dict:
"""
XRPL 네트워크에서 이 계정의 정보를 가져옵니다.
Expand Down Expand Up @@ -74,23 +74,39 @@ def get_account_transactions(self, client: JsonRpcClient, address: str, limit: i

def get_user_info(self, user_id: str) -> UserInfoResponse:
# Cognito에서 nickname 조회
nickname = "Unknown"
try:
if self.user_pool_id:
nickname = "오은진"
logger.info(f"userpoolid: {self.user_pool_id}")
if self.user_pool_id:
# Cognito 사용자 풀에서 사용자 정보 조회
response = self.cognito_client.list_users(
UserPoolId=self.user_pool_id,
Filter=f'sub = "{user_id}"'
)

logger.info(response)

if response.get('Users') and len(response['Users']) > 0:
# 사용자의 속성에서 nickname 찾기
for attr in response['Users'][0].get('Attributes', []):
if attr['Name'] == 'nickname':
nickname = attr['Value']
break
except Exception as e:
print(f"Error fetching user from Cognito: {str(e)}")
# try:
# if self.user_pool_id:
# # Cognito 사용자 풀에서 사용자 정보 조회
# response = self.cognito_client.list_users(
# UserPoolId=self.user_pool_id,
# Filter=f'sub = "{user_id}"'
# )

# if response.get('Users') and len(response['Users']) > 0:
# # 사용자의 속성에서 nickname 찾기
# for attr in response['Users'][0].get('Attributes', []):
# if attr['Name'] == 'nickname':
# nickname = attr['Value']
# break
# except Exception as e:
# print(f"Error fetching user from Cognito: {str(e)}")

# MongoDB에서 사용자의 지갑 주소 조회
# point = 0.0
Expand Down