
    soj                         d dl Z d dlT d dlmZ d dlmZ  G d de          Zdadd	Ze	                    d
           dS )    N)*)	BaseModel)Userc                      e Zd ZdZ eeddd          Z edd          Z edd          Z	 e
d	          Z e
d	          Z edd          Z ed
          Z G d d          Zeded          fd            ZdefdZedee         fd            Zeded          fd            Zeded          fd            Zededdfd            ZdS )LegendaryPiratez 
    Legendary Pirate class
    legendary_piratesCASCADE)backref	on_delete	on_updatec   T)
max_lengthnulli  )r   F)defaultc                       e Zd ZdZdS )LegendaryPirate.Metalegendary_pirateN)__name__
__module____qualname__db_table     !/app/src/model/LegendaryPirate.pyMetar      s        %r   r   returnc                     t                       t          j                                        } t                                                              t          j                                        t          j        | k    z            S )zX
        Get active legendary pirates
        :return: Active legendary pirates
        )ensure_legendary_pirate_schemadatetimenowr   selectwhereend_dateis_nullr    s    r   
get_activezLegendaryPirate.get_active   sg     	'(((##%%%%''--%--//O4Ls4RS
 
 	
r   c                 b    | j         du p&| j         t          j                                        k    S )zx
        Returns True if the legendary pirate is active
        :return: True if the legendary pirate is active
        N)r#   r   r    )selfs    r   	is_activezLegendaryPirate.is_active(   s,     }$O8I8M8M8O8O(OOr   c                  H    d t                                           D             S )zh
        Get active legendary pirate user ids
        :return: Active legendary pirate user ids
        c                 &    g | ]}|j         j        S r   )userid).0r   s     r   
<listcomp>z7LegendaryPirate.get_active_user_ids.<locals>.<listcomp>7   s     ^^^-= %(^^^r   )r   r&   r   r   r   get_active_user_idsz#LegendaryPirate.get_active_user_ids0   s%     _^A[A[A]A]^^^^r   c                     t                       t          j                                        } t          t                                                              t                                        t          j	        
                                t          j	        | k    z                                t          j                                                            S )zj
        Get active legendary pirates ordered by bounty
        :return: Active legendary pirates
        )r   r   r    listr   r!   joinr   r"   r#   r$   order_bybountydescr%   s    r   get_active_order_by_bountyz*LegendaryPirate.get_active_order_by_bounty9   s     	'(((##%%""$$T$ZZUO,4466?;SVY;YZ[[Xdk&&(())	
 
 	
r   c                     t                       t          j                                        } t          t                                                              t                                        t          j	        dk    t          j
                                        t          j
        | k    z  z                                t          j                                                            S )z~
        Get active permanent legendary pirates ordered by bounty
        :return: Active permanent legendary pirates
        T)r   r   r    r2   r   r!   r3   r   r"   is_permanentr#   r$   r4   r5   r6   r%   s    r   $get_active_permanent_order_by_bountyz4LegendaryPirate.get_active_permanent_order_by_bountyI   s     	'(((##%%""$$T$ZZU -5#,4466?;SVY;YZ\  Xdk&&(())
 
 	
r   r,   zLegendaryPirate | Nonec                    t                       t          j                                        }t                                                              t          j        | k    t          j                                        t          j        |k    z  z            	                    t          j
                                                                                  S )z
        Get the latest active legendary pirate record for a user
        :param user: The user
        :return: The legendary pirate record
        )r   r   r    r   r!   r"   r,   r#   r$   r4   dater6   first)r,   r    s     r   get_latest_active_by_userz)LegendaryPirate.get_latest_active_by_user\   s     	'(((##%%""$$U %-#,4466?;SVY;YZ\  Xo*//1122UWW	
r   N)r   r   r   __doc__ForeignKeyFieldr   r,   	CharFieldepithetreasonDateTimeFieldr#   original_end_daterevoke_reasonBooleanFieldr9   r   staticmethodr2   r&   boolr)   intr0   r7   r:   r>   r   r   r   r   r   	   s         ?)Y)  D i2D111GY#D111F}$'''H%4000I4888M<...L& & & & & & & & 

./ 

 

 

 \

P4 P P P P _c _ _ _ \_ 
->(? 
 
 
 \
 
$7H2I 
 
 
 \
$ 
 
1I 
 
 
 \
 
 
r   r   Fr   c                     t           rdS t          j        j        } |                     d           |                     d          st                                           da dS d |                     d          D             }dddd	d
}|                                D ]\  }}||vr| 	                    |           d|v sd|v r| 	                    d           da dS )zA
    Ensure legendary_pirate table has all required columns.
    NT)reuse_if_openr   c                     h | ]	}|j         
S r   )name)r.   columns     r   	<setcomp>z1ensure_legendary_pirate_schema.<locals>.<setcomp>   s    UUUUUUr   z>ALTER TABLE legendary_pirate ADD COLUMN end_date DATETIME NULLzGALTER TABLE legendary_pirate ADD COLUMN original_end_date DATETIME NULLzGALTER TABLE legendary_pirate ADD COLUMN revoke_reason VARCHAR(999) NULLzRALTER TABLE legendary_pirate ADD COLUMN is_permanent TINYINT(1) NOT NULL DEFAULT 0)r#   rE   rF   r9   r9   zrUPDATE legendary_pirate SET is_permanent = 1 WHERE end_date IS NULL AND revoke_reason IS NULL AND is_permanent = 0)
_schema_ensuredr   _metadatabaseconnecttable_existscreate_tableget_columnsitemsexecute_sql)dbexisting_columns
migrationscolumn_name	alter_sqls        r   r   r   t   s     			'BJJTJ"""??-.. $$&&&UU"..AS2T2TUUUTfbl	 J #-"2"2"4"4 & &Y...NN9%%%)))^z-I-I
T	
 	
 	

 OOOr   T)safe)r   N)
r   peeweesrc.model.BaseModelr   src.model.Userr   r   rQ   r   rV   r   r   r   <module>rc      s         ) ) ) ) ) )      e
 e
 e
 e
 e
i e
 e
 e
P # # # #L   $  ' ' ' ' 'r   