feat: Add album management functionality with new data model, repository, service, API, and generation integration.

This commit is contained in:
xds
2026-02-08 23:13:31 +03:00
parent c17c47ccc1
commit 8a89b27624
9 changed files with 354 additions and 6 deletions

View File

@@ -0,0 +1,91 @@
import asyncio
import os
import sys
# Add project root to path
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from motor.motor_asyncio import AsyncIOMotorClient
from repos.dao import DAO
from models.Album import Album
from models.Generation import Generation, GenerationStatus
from models.enums import AspectRatios, Quality
# Mock config
# Use the same host as main.py but different DB
MONGO_HOST = os.getenv("MONGO_HOST", "mongodb://admin:super_secure_password@31.59.58.220:27017")
DB_NAME = "bot_db_test_albums"
async def test_albums():
print(f"🚀 Starting Album Manual Verification using {MONGO_HOST}...")
# Needs to run inside a loop from main
client = AsyncIOMotorClient(MONGO_HOST)
dao = DAO(client, db_name=DB_NAME)
try:
# 1. Clean up
await client[DB_NAME]["albums"].drop()
await client[DB_NAME]["generations"].drop()
print("✅ Cleaned up test database")
# 2. Create Album
album = Album(name="Test Album", description="A test album")
print("Creating album...")
album_id = await dao.albums.create_album(album)
print(f"✅ Created Album: {album_id}")
# 3. Create Generations
gen1 = Generation(prompt="Gen 1", aspect_ratio=AspectRatios.NINESIXTEEN, quality=Quality.ONEK)
gen2 = Generation(prompt="Gen 2", aspect_ratio=AspectRatios.NINESIXTEEN, quality=Quality.ONEK)
print("Creating generations...")
gen1_id = await dao.generations.create_generation(gen1)
gen2_id = await dao.generations.create_generation(gen2)
print(f"✅ Created Generations: {gen1_id}, {gen2_id}")
# 4. Add generations to album
print("Adding generations to album...")
await dao.albums.add_generation(album_id, gen1_id)
await dao.albums.add_generation(album_id, gen2_id)
print("✅ Added generations to album")
# 5. Fetch album and check generation_ids
album_fetched = await dao.albums.get_album(album_id)
assert album_fetched is not None
assert len(album_fetched.generation_ids) == 2
assert gen1_id in album_fetched.generation_ids
assert gen2_id in album_fetched.generation_ids
print("✅ Verified generations in album")
# 6. Fetch generations by IDs via GenerationRepo
generations = await dao.generations.get_generations_by_ids([gen1_id, gen2_id])
assert len(generations) == 2
# Ensure ID type match (str vs ObjectId handling in repo)
gen_ids_fetched = [g.id for g in generations]
assert gen1_id in gen_ids_fetched
assert gen2_id in gen_ids_fetched
print("✅ Verified fetching generations by IDs")
# 7. Remove generation
print("Removing generation...")
await dao.albums.remove_generation(album_id, gen1_id)
album_fetched = await dao.albums.get_album(album_id)
assert len(album_fetched.generation_ids) == 1
assert album_fetched.generation_ids[0] == gen2_id
print("✅ Verified removing generation from album")
print("🎉 Album Verification SUCCESS")
finally:
# Cleanup client
client.close()
if __name__ == "__main__":
from dotenv import load_dotenv
load_dotenv()
try:
asyncio.run(test_albums())
except Exception as e:
print(f"Error: {e}")