| 
1 | 1 | import random  | 
2 | 2 | import uuid  | 
3 | 3 | 
 
  | 
 | 4 | +from faker import Faker  | 
4 | 5 | from sqlalchemy.ext.asyncio import AsyncSession  | 
5 | 6 | 
 
  | 
6 | 7 | from app.core.users import cruds_users  | 
7 | 8 | from app.core.users.factory_users import CoreUsersFactory  | 
8 | 9 | from app.core.utils.config import Settings  | 
9 |  | -from app.modules.phonebook import cruds_phonebook, models_phonebook  | 
10 |  | -from app.modules.phonebook.types_phonebook import Kinds, RoleTags  | 
 | 10 | +from app.modules.phonebook import cruds_phonebook, schemas_phonebook  | 
 | 11 | +from app.modules.phonebook.types_phonebook import RoleTags  | 
11 | 12 | from app.types.factory import Factory  | 
12 | 13 | 
 
  | 
 | 14 | +faker = Faker("fr_FR")  | 
 | 15 | + | 
13 | 16 | 
 
  | 
14 | 17 | class PhonebookFactory(Factory):  | 
15 | 18 |     depends_on = [CoreUsersFactory]  | 
16 | 19 | 
 
  | 
17 | 20 |     @classmethod  | 
18 |  | -    async def create_association(cls, db: AsyncSession):  | 
19 |  | -        association_id_1 = str(uuid.uuid4())  | 
20 |  | -        await cruds_phonebook.create_association(  | 
21 |  | -            association=models_phonebook.Association(  | 
22 |  | -                id=association_id_1,  | 
23 |  | -                name="Eclair",  | 
24 |  | -                description="L'asso d'informatique la plus cool !",  | 
25 |  | -                deactivated=False,  | 
26 |  | -                kind=Kinds.section_ae,  | 
27 |  | -                mandate_year=2025,  | 
 | 21 | +    async def create_association_groupement(cls, db: AsyncSession) -> list[uuid.UUID]:  | 
 | 22 | +        groupement_ids = [uuid.uuid4() for _ in range(3)]  | 
 | 23 | +        await cruds_phonebook.create_groupement(  | 
 | 24 | +            schemas_phonebook.AssociationGroupement(  | 
 | 25 | +                id=groupement_ids[0],  | 
 | 26 | +                name="Section AE",  | 
28 | 27 |             ),  | 
29 | 28 |             db=db,  | 
30 | 29 |         )  | 
31 |  | - | 
32 |  | -        await cruds_phonebook.create_membership(  | 
33 |  | -            membership=models_phonebook.Membership(  | 
34 |  | -                id=str(uuid.uuid4()),  | 
35 |  | -                user_id=CoreUsersFactory.demo_users_id[0],  | 
36 |  | -                association_id=association_id_1,  | 
37 |  | -                mandate_year=2025,  | 
38 |  | -                role_name="Prez",  | 
39 |  | -                role_tags=RoleTags.president.name,  | 
40 |  | -                member_order=1,  | 
 | 30 | +        await cruds_phonebook.create_groupement(  | 
 | 31 | +            schemas_phonebook.AssociationGroupement(  | 
 | 32 | +                id=groupement_ids[1],  | 
 | 33 | +                name="Club AE",  | 
41 | 34 |             ),  | 
42 | 35 |             db=db,  | 
43 | 36 |         )  | 
44 |  | - | 
45 |  | -        association_id_2 = str(uuid.uuid4())  | 
46 |  | -        await cruds_phonebook.create_association(  | 
47 |  | -            association=models_phonebook.Association(  | 
48 |  | -                id=association_id_2,  | 
49 |  | -                name="Association 2",  | 
50 |  | -                description="Description de l'asso 2",  | 
51 |  | -                associated_groups=[],  | 
52 |  | -                deactivated=False,  | 
53 |  | -                kind=Kinds.section_use,  | 
54 |  | -                mandate_year=2025,  | 
 | 37 | +        await cruds_phonebook.create_groupement(  | 
 | 38 | +            schemas_phonebook.AssociationGroupement(  | 
 | 39 | +                id=groupement_ids[2],  | 
 | 40 | +                name="Section USE",  | 
55 | 41 |             ),  | 
56 | 42 |             db=db,  | 
57 | 43 |         )  | 
58 |  | -        users = await cruds_users.get_users(db=db)  | 
59 |  | -        tags = list(RoleTags)  | 
60 |  | -        for i, user in enumerate(random.sample(users, 10)):  | 
61 |  | -            await cruds_phonebook.create_membership(  | 
62 |  | -                membership=models_phonebook.Membership(  | 
63 |  | -                    id=str(uuid.uuid4()),  | 
64 |  | -                    user_id=user.id,  | 
65 |  | -                    association_id=association_id_2,  | 
 | 44 | +        return groupement_ids  | 
 | 45 | + | 
 | 46 | +    @classmethod  | 
 | 47 | +    async def create_association(  | 
 | 48 | +        cls,  | 
 | 49 | +        db: AsyncSession,  | 
 | 50 | +        groupement_ids: list[uuid.UUID],  | 
 | 51 | +    ):  | 
 | 52 | +        for i in range(5):  | 
 | 53 | +            association_id = str(uuid.uuid4())  | 
 | 54 | +            await cruds_phonebook.create_association(  | 
 | 55 | +                association=schemas_phonebook.AssociationComplete(  | 
 | 56 | +                    id=association_id,  | 
 | 57 | +                    groupement_id=groupement_ids[i % len(groupement_ids)],  | 
 | 58 | +                    name=faker.company(),  | 
 | 59 | +                    description="Description de l'association",  | 
 | 60 | +                    associated_groups=[],  | 
 | 61 | +                    deactivated=False,  | 
66 | 62 |                     mandate_year=2025,  | 
67 |  | -                    role_name=f"VP {i}",  | 
68 |  | -                    role_tags=tags[i].name if i < len(tags) else "",  | 
69 |  | -                    member_order=i,  | 
70 | 63 |                 ),  | 
71 | 64 |                 db=db,  | 
72 | 65 |             )  | 
 | 66 | +            users = await cruds_users.get_users(db=db)  | 
 | 67 | +            tags = list(RoleTags)  | 
 | 68 | +            for j, user in enumerate(random.sample(users, 10)):  | 
 | 69 | +                await cruds_phonebook.create_membership(  | 
 | 70 | +                    membership=schemas_phonebook.MembershipComplete(  | 
 | 71 | +                        id=str(uuid.uuid4()),  | 
 | 72 | +                        user_id=user.id,  | 
 | 73 | +                        association_id=association_id,  | 
 | 74 | +                        mandate_year=2025,  | 
 | 75 | +                        role_name=f"VP {j}",  | 
 | 76 | +                        role_tags=tags[j].name if j < len(tags) else "",  | 
 | 77 | +                        member_order=j,  | 
 | 78 | +                    ),  | 
 | 79 | +                    db=db,  | 
 | 80 | +                )  | 
73 | 81 | 
 
  | 
74 | 82 |     @classmethod  | 
75 | 83 |     async def run(cls, db: AsyncSession, settings: Settings) -> None:  | 
76 |  | -        await cls.create_association(db)  | 
 | 84 | +        groupement_ids = await cls.create_association_groupement(db=db)  | 
 | 85 | +        await cls.create_association(db, groupement_ids=groupement_ids)  | 
77 | 86 | 
 
  | 
78 | 87 |     @classmethod  | 
79 | 88 |     async def should_run(cls, db: AsyncSession):  | 
 | 
0 commit comments