| import datetime |
|
|
| from peewee import * |
|
|
| import resources.Environment as Env |
| from src.model.BaseModel import BaseModel |
| from src.model.Crew import Crew |
| from src.model.User import User |
| from src.model.enums.crew.CrewJoinRequestStatus import CrewJoinRequestStatus |
|
|
|
|
| class CrewJoinRequest(BaseModel): |
| """ |
| CrewJoinRequest class |
| """ |
|
|
| user: User | ForeignKeyField = ForeignKeyField(User, backref="crew_join_requests") |
| crew: Crew | ForeignKeyField = ForeignKeyField(Crew, backref="crew_join_requests") |
| status: CrewJoinRequestStatus | SmallIntegerField = SmallIntegerField( |
| default=CrewJoinRequestStatus.PENDING |
| ) |
|
|
| class Meta: |
| db_table = "crew_join_request" |
|
|
| @staticmethod |
| def get_all_requests_in_cooldown_period(user: User) -> list["CrewJoinRequest"]: |
| """ |
| Get all requests of a user in the cooldown period |
| :param user: The user object |
| :return: The list of requests |
| """ |
| return ( |
| CrewJoinRequest.select() |
| .where( |
| CrewJoinRequest.user == user, |
| CrewJoinRequest.date |
| > datetime.datetime.now() |
| - datetime.timedelta(hours=Env.CREW_JOIN_REQUEST_COOLDOWN_DURATION.get_int()), |
| ) |
| .order_by(CrewJoinRequest.date.asc()) |
| ) |
|
|
| @staticmethod |
| def get_all_requests_in_cooldown_period_for_crew( |
| user: User, crew: Crew |
| ) -> list["CrewJoinRequest"]: |
| """ |
| Get all requests of a user for a given crew in the cooldown period |
| :param user: The user object |
| :param crew: The crew object |
| :return: The list of requests |
| """ |
| return CrewJoinRequest.select().where( |
| CrewJoinRequest.user == user, |
| CrewJoinRequest.crew == crew, |
| CrewJoinRequest.date |
| > datetime.datetime.now() |
| - datetime.timedelta( |
| hours=Env.CREW_JOIN_REQUEST_COOLDOWN_SAME_CREW_DURATION.get_int() |
| ), |
| ) |
|
|
|
|
| CrewJoinRequest.create_table() |
|
|