from pymongo import MongoClient, ASCENDING from werkzeug.security import generate_password_hash from datetime import datetime, timedelta # MongoDB 접속 client = MongoClient('mongodb://root:1234@qcy2.duckdns.org:27017/') db = client['taobao_project'] # 사용할 데이터베이스 지정 # 이메일 필드에 대한 고유 인덱스 생성 db.users.create_index([("email", ASCENDING)], unique=True) # 현재 날짜와 시간 now = datetime.now() # 사용자 데이터 샘플 users_data = [ { "email": "testMaster1@gmail.com", "username": "테스트마스터1", "password": "1234", "userType": "master", "userGrade": 1, # 사용자 등급 "joinDate": now.strftime('%Y-%m-%d %H:%M:%S'), # 가입일자 "planStartDate": (now + timedelta(days=1)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 시작일자 "planEndDate": (now + timedelta(days=91)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 종료일자 "planDurationDays": 90, # 유료 플랜 기간 "lastLoginTime": None, # 마지막 로그인 시간 "lastLogoutTime": None, # 마지막 로그아웃 시간 "totalWorkload": 100, # 총 작업량 "weeklyPerformance": { # 주별 성과 "2023-01": 20, # 예시: 2023년 1주차의 작업량 "2023-02": 30, # 예시: 2023년 2주차의 작업량 }, "monthlyPerformance": { # 월별 성과 "2023-01": 50, # 예시: 2023년 1월의 작업량 "2023-02": 50, # 예시: 2023년 2월의 작업량 } }, # 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조) { "email": "T1slave1@gmail.com", "username": "테스트1슬레이브1", "password": "1234", "userType": "slave", "master": "testMaster1@gmail.com", # 마스터 사용자 참조 "lastLoginTime": None, # 마지막 로그인 시간 "lastLogoutTime": None, # 마지막 로그아웃 시간 "totalWorkload": 100, # 총 작업량 "weeklyPerformance": { # 주별 성과 "2023-01": 20, # 예시: 2023년 1주차의 작업량 "2023-02": 30, # 예시: 2023년 2주차의 작업량 }, "monthlyPerformance": { # 월별 성과 "2023-01": 50, # 예시: 2023년 1월의 작업량 "2023-02": 50, # 예시: 2023년 2월의 작업량 } }, # 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조) { "email": "T1slave2@gmail.com", "username": "테스트1슬레이브2", "password": "1234", "userType": "slave", "master": "testMaster1@gmail.com", # 마스터 사용자 참조 "lastLoginTime": None, # 마지막 로그인 시간 "lastLogoutTime": None, # 마지막 로그아웃 시간 "totalWorkload": 100, # 총 작업량 "weeklyPerformance": { # 주별 성과 "2023-01": 20, # 예시: 2023년 1주차의 작업량 "2023-02": 30, # 예시: 2023년 2주차의 작업량 }, "monthlyPerformance": { # 월별 성과 "2023-01": 50, # 예시: 2023년 1월의 작업량 "2023-02": 50, # 예시: 2023년 2월의 작업량 } }, # 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조) { "email": "T1Manager@gmail.com", "username": "테스트1매니저", "password": "1234", "userType": "manager", "master": "testMaster1@gmail.com", # 마스터 사용자 참조 "lastLoginTime": None, # 마지막 로그인 시간 "lastLogoutTime": None, # 마지막 로그아웃 시간 "totalWorkload": 100, # 총 작업량 "weeklyPerformance": { # 주별 성과 "2023-01": 20, # 예시: 2023년 1주차의 작업량 "2023-02": 30, # 예시: 2023년 2주차의 작업량 }, "monthlyPerformance": { # 월별 성과 "2023-01": 50, # 예시: 2023년 1월의 작업량 "2023-02": 50, # 예시: 2023년 2월의 작업량 } }, { "email": "testMaster2@gmail.com", "username": "테스트마스터2", "password": "1234", "userType": "master", "userGrade": 2, # 사용자 등급 "joinDate": now.strftime('%Y-%m-%d %H:%M:%S'), # 가입일자 "planStartDate": (now + timedelta(days=1)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 시작일자 "planEndDate": (now + timedelta(days=31)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 종료일자 "planDurationDays": 30, # 유료 플랜 기간 "lastLoginTime": None, # 마지막 로그인 시간 "lastLogoutTime": None, # 마지막 로그아웃 시간 "totalWorkload": 100, # 총 작업량 "weeklyPerformance": { # 주별 성과 "2023-01": 20, # 예시: 2023년 1주차의 작업량 "2023-02": 30, # 예시: 2023년 2주차의 작업량 }, "monthlyPerformance": { # 월별 성과 "2023-01": 50, # 예시: 2023년 1월의 작업량 "2023-02": 50, # 예시: 2023년 2월의 작업량 } }, # 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조) { "email": "T2slave1@gmail.com", "username": "테스트2슬레이브1", "password": "1234", "userType": "slave", "master": "testMaster2@gmail.com", # 마스터 사용자 참조 "lastLoginTime": None, # 마지막 로그인 시간 "lastLogoutTime": None, # 마지막 로그아웃 시간 "totalWorkload": 100, # 총 작업량 "weeklyPerformance": { # 주별 성과 "2023-01": 20, # 예시: 2023년 1주차의 작업량 "2023-02": 30, # 예시: 2023년 2주차의 작업량 }, "monthlyPerformance": { # 월별 성과 "2023-01": 50, # 예시: 2023년 1월의 작업량 "2023-02": 50, # 예시: 2023년 2월의 작업량 } }, # 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조) { "email": "T2slave2@gmail.com", "username": "테스트2슬레이브2", "password": "1234", "userType": "slave", "master": "testMaster2@gmail.com", # 마스터 사용자 참조 "lastLoginTime": None, # 마지막 로그인 시간 "lastLogoutTime": None, # 마지막 로그아웃 시간 "totalWorkload": 100, # 총 작업량 "weeklyPerformance": { # 주별 성과 "2023-01": 20, # 예시: 2023년 1주차의 작업량 "2023-02": 30, # 예시: 2023년 2주차의 작업량 }, "monthlyPerformance": { # 월별 성과 "2023-01": 50, # 예시: 2023년 1월의 작업량 "2023-02": 50, # 예시: 2023년 2월의 작업량 } }, # 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조) { "email": "T2Manager@gmail.com", "username": "테스트2매니저", "password": "1234", "userType": "manager", "master": "testMaster2@gmail.com", # 마스터 사용자 참조 "lastLoginTime": None, # 마지막 로그인 시간 "lastLogoutTime": None, # 마지막 로그아웃 시간 "totalWorkload": 100, # 총 작업량 "weeklyPerformance": { # 주별 성과 "2023-01": 20, # 예시: 2023년 1주차의 작업량 "2023-02": 30, # 예시: 2023년 2주차의 작업량 }, "monthlyPerformance": { # 월별 성과 "2023-01": 50, # 예시: 2023년 1월의 작업량 "2023-02": 50, # 예시: 2023년 2월의 작업량 } }, { "email": "testMaster3@gmail.com", "username": "테스트마스터3", "password": "1234", "userType": "master", "userGrade": 3, # 사용자 등급 "joinDate": now.strftime('%Y-%m-%d %H:%M:%S'), # 가입일자 "planStartDate": (now + timedelta(days=1)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 시작일자 "planEndDate": (now + timedelta(days=8)).strftime('%Y-%m-%d 00:00'), # 유료 플랜 종료일자 "planDurationDays": 7, # 유료 플랜 기간 "lastLoginTime": None, # 마지막 로그인 시간 "lastLogoutTime": None, # 마지막 로그아웃 시간 "totalWorkload": 100, # 총 작업량 "weeklyPerformance": { # 주별 성과 "2023-01": 20, # 예시: 2023년 1주차의 작업량 "2023-02": 30, # 예시: 2023년 2주차의 작업량 }, "monthlyPerformance": { # 월별 성과 "2023-01": 50, # 예시: 2023년 1월의 작업량 "2023-02": 50, # 예시: 2023년 2월의 작업량 } }, # 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조) { "email": "T3slave1@gmail.com", "username": "테스트3슬레이브1", "password": "1234", "userType": "slave", "master": "testMaster3@gmail.com", # 마스터 사용자 참조 "lastLoginTime": None, # 마지막 로그인 시간 "lastLogoutTime": None, # 마지막 로그아웃 시간 "totalWorkload": 100, # 총 작업량 "weeklyPerformance": { # 주별 성과 "2023-01": 20, # 예시: 2023년 1주차의 작업량 "2023-02": 30, # 예시: 2023년 2주차의 작업량 }, "monthlyPerformance": { # 월별 성과 "2023-01": 50, # 예시: 2023년 1월의 작업량 "2023-02": 50, # 예시: 2023년 2월의 작업량 } }, # 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조) { "email": "T3slave2@gmail.com", "username": "테스트3슬레이브2", "password": "1234", "userType": "slave", "master": "testMaster3@gmail.com", # 마스터 사용자 참조 "lastLoginTime": None, # 마지막 로그인 시간 "lastLogoutTime": None, # 마지막 로그아웃 시간 "totalWorkload": 100, # 총 작업량 "weeklyPerformance": { # 주별 성과 "2023-01": 20, # 예시: 2023년 1주차의 작업량 "2023-02": 30, # 예시: 2023년 2주차의 작업량 }, "monthlyPerformance": { # 월별 성과 "2023-01": 50, # 예시: 2023년 1월의 작업량 "2023-02": 50, # 예시: 2023년 2월의 작업량 } }, # 슬레이브 사용자 데이터 예시 (마스터 사용자 정보 참조) { "email": "T3Manager@gmail.com", "username": "테스트3매니저", "password": "1234", "userType": "manager", "master": "testMaster3@gmail.com", # 마스터 사용자 참조 "lastLoginTime": None, # 마지막 로그인 시간 "lastLogoutTime": None, # 마지막 로그아웃 시간 "totalWorkload": 100, # 총 작업량 "weeklyPerformance": { # 주별 성과 "2023-01": 20, # 예시: 2023년 1주차의 작업량 "2023-02": 30, # 예시: 2023년 2주차의 작업량 }, "monthlyPerformance": { # 월별 성과 "2023-01": 50, # 예시: 2023년 1월의 작업량 "2023-02": 50, # 예시: 2023년 2월의 작업량 } } ] # # 사용자 정보 저장 # for user in users_data: # user['password'] = generate_password_hash(user['password']) # 비밀번호 해싱 # db.users.insert_one(user) # 사용자 정보 업데이트 또는 추가 for user in users_data: user['password'] = generate_password_hash(user['password']) # 비밀번호 해싱 # upsert=True 옵션을 사용하여, 문서가 없으면 추가하고, 있으면 업데이트 db.users.update_one( {"email": user['email']}, {"$set": user}, upsert=True )