#!/usr/bin/env python3 """ テストステップ1: 大垣3イベントをコピーして大垣テストイベントを作成し、 テストユーザー、チーム、メンバーを含む完全なテストデータを構築する """ import os import sys import django from datetime import datetime, timedelta # Django設定を読み込み sys.path.append('/app') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') django.setup() from rog.models import NewEvent2, NewCategory, Entry, Team, Member, CustomUser def create_test_event(): """大垣3イベントをベースに大垣テストイベントを作成""" print("=== テストイベント作成開始 ===") # 既存の大垣3イベントを検索 base_event = None for event in NewEvent2.objects.all(): if "大垣3" == event.event_name: base_event = event print(f"ベースイベント発見: {event.event_name} (ID: {event.id})") break if not base_event: print("大垣3イベントが見つかりません") return None # 大垣テストイベントが既に存在するかチェック test_event = NewEvent2.objects.filter(event_name__contains="大垣テスト").first() if test_event: print(f"テストイベントは既に存在します: {test_event.event_name} (ID: {test_event.id})") return test_event # 新しいテストイベントを作成 now = datetime.now() test_event = NewEvent2.objects.create( event_name="大垣テスト", start_datetime=now + timedelta(days=1), end_datetime=now + timedelta(days=2), event_type=base_event.event_type, location=base_event.location, url=base_event.url, active=True, organizer=base_event.organizer ) print(f"テストイベント作成完了: {test_event.event_name} (ID: {test_event.id})") return test_event def create_test_user(): """テストユーザーを作成""" print("\n=== テストユーザー作成開始 ===") email = "test_user@example.com" # 既存ユーザーをチェック test_user = CustomUser.objects.filter(email=email).first() if test_user: print(f"テストユーザーは既に存在します: {test_user.email} (ID: {test_user.id})") return test_user # 新しいテストユーザーを作成 test_user = CustomUser.objects.create( email=email, firstname="テスト", lastname="太郎", date_of_birth=datetime(1990, 1, 1).date(), female=False, is_active=True ) test_user.set_password("testpassword123") test_user.save() print(f"テストユーザー作成完了: {test_user.email} (ID: {test_user.id})") return test_user def create_test_team(test_user, test_event): """テストチームを作成""" print("\n=== テストチーム作成開始 ===") team_name = "テストチーム1" # 既存チームをチェック test_team = Team.objects.filter( team_name=team_name, event=test_event ).first() if test_team: print(f"テストチームは既に存在します: {test_team.team_name} (ID: {test_team.id})") return test_team # デフォルトカテゴリーを取得 default_category = NewCategory.objects.filter(category_name__contains="Default").first() if not default_category: # 適当なカテゴリーを取得 default_category = NewCategory.objects.first() # 新しいテストチームを作成 test_team = Team.objects.create( team_name=team_name, owner=test_user, category=default_category, event=test_event, zekken_number="T001" ) print(f"テストチーム作成完了: {test_team.team_name} (ID: {test_team.id})") return test_team def create_test_member(test_user, test_team): """テストメンバーを作成""" print("\n=== テストメンバー作成開始 ===") # 既存メンバーをチェック test_member = Member.objects.filter( team=test_team, user=test_user ).first() if test_member: print(f"テストメンバーは既に存在します: {test_member.user.email} (ID: {test_member.id})") return test_member # 新しいテストメンバーを作成 test_member = Member.objects.create( team=test_team, user=test_user, firstname=test_user.firstname, lastname=test_user.lastname, date_of_birth=test_user.date_of_birth, female=test_user.female ) print(f"テストメンバー作成完了: {test_member.user.email} (ID: {test_member.id})") return test_member def create_test_entries(test_event, test_team): """利用可能な全カテゴリーでエントリーを作成""" print("\n=== テストエントリー作成開始 ===") # 利用可能なカテゴリーを取得 categories = NewCategory.objects.all() print(f"利用可能なカテゴリー数: {categories.count()}") created_entries = [] for category in categories[:3]: # 最初の3つのカテゴリーのみでテスト # 既存エントリーをチェック existing_entry = Entry.objects.filter( team=test_team, event=test_event, category=category ).first() if existing_entry: print(f"エントリーは既に存在します: {category.category_name}") created_entries.append(existing_entry) continue try: # 新しいエントリーを作成 entry = Entry.objects.create( team=test_team, event=test_event, category=category, date=test_event.start_datetime, owner=test_team.owner, zekken_number=1 ) created_entries.append(entry) print(f"エントリー作成完了: {category.category_name} (ID: {entry.id})") except Exception as e: print(f"エントリー作成エラー ({category.category_name}): {e}") print(f"合計 {len(created_entries)} 個のエントリーを作成/確認しました") return created_entries def main(): """メイン処理""" print("テストデータ作成スクリプト開始") print("=" * 50) try: # 1. テストイベント作成 test_event = create_test_event() if not test_event: print("テストイベント作成に失敗しました") return # 2. テストユーザー作成 test_user = create_test_user() # 3. テストチーム作成 test_team = create_test_team(test_user, test_event) # 4. テストメンバー作成 test_member = create_test_member(test_user, test_team) # 5. テストエントリー作成 test_entries = create_test_entries(test_event, test_team) print("\n" + "=" * 50) print("テストデータ作成完了!") print(f"イベント: {test_event.event_name}") print(f"ユーザー: {test_user.email}") print(f"チーム: {test_team.team_name}") print(f"メンバー: {test_member.user.email}") print(f"エントリー数: {len(test_entries)}") except Exception as e: print(f"エラーが発生しました: {e}") import traceback traceback.print_exc() if __name__ == "__main__": main()