
    i-1                    Z   d Z ddlmZ ddlmZmZmZmZ ddlm	Z	 ddl
mZmZ  G d de          Z G d d	e          Z G d
 de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d  d!e          Z G d" d#e          Z G d$ d%e          Z G d& d'e          Z G d( d)e          Z G d* d+e          Z G d, d-e          Z  G d. d/e          Z! G d0 d1e          Z" G d2 d3e          Z# G d4 d5e          Z$ G d6 d7e          Z% G d8 d9e          Z& G d: d;e          Z' G d< d=e          Z(d>S )?un  
Nom du script : issues.py
Chemin : /gitlab-bridge/app/schemas/issues.py
Description : Schémas Pydantic liés à la création d'issues GitLab.
Options éventuelles : Aucune.
Exemples d'utilisation : Endpoint POST /api/v1/issues/create.
Prérequis : Python 3.11+, Pydantic 2.x.
Auteur : Sylvain SCATTOLINI
Date de création / modification : 2026-03-25
Version : 1.1
    )annotations)	BaseModel
ConfigDictFieldfield_validator)AuthContext)MilestoneCandidateItemMilestoneItemc                  n   e Zd ZU  ed          Z eddd          Zded<    eddd          Zded	<    ed
d          Z	ded<    ee
d          Zded<    ed
d          Zded<    edd          Zded<    ed
d          Zded<    ed          Zded<    ed
d          Zded<   dS )IssueAssistantCreateRequestforbidextra.      
min_length
max_lengthstrproject_hinttitle  N  defaultr   description2   default_factoryr   	list[str]labelsmilestone_hintr   r   geintresolved_milestone_id	root_hintFr   boolconfirmresolved_project_pathN)__name__
__module____qualname__r   model_configr   r   __annotations__r   r   listr!   r"   r&   r'   r*   r+        1/var/www/html/gitlab-bridge/app/schemas/issues.pyr   r      sH        :H---LcaC@@@L@@@@sqS999E9999uRE:::K::::drBBBFBBBB%s;;;N;;;;!&qQ!7!7!77777U2#666I6666E%(((G((((!&rc!B!B!BBBBBBBr3   r   c                     e Zd ZU dZ edd          Zded<    edd	          Zd
ed<    edd	          Z	d
ed<    edd	          Z
d
ed<    eed          Zded<    ed          edd                        ZdS )IssueCreateRequestu   Payload de création d'issue.r   T)r   str_strip_whitespacer   authr   r   r   r   project_pathr   r   r   r   r   r    r!   valuereturnc                r    g }|D ]1}|                                 }|r||vr|                    |           2|S )N)stripappend)clsr:   cleanedlabels       r4   validate_labelsz"IssueCreateRequest.validate_labels.   sO       	& 	&EKKMME &g--u%%%r3   N)r:   r    r;   r    )r,   r-   r.   __doc__r   r/   r0   r   r9   r   r   r1   r!   r   classmethodrB   r2   r3   r4   r6   r6   #   s         '':H4HHHLs;;;L;;;;!444E4444ue<<<K<<<<drBBBFBBBB_X   [   r3   r6   c                  <    e Zd ZU dZded<   ded<   ded<   ded<   dS )	IssuePayloadu   Issue créée par GitLab.r%   idiidr   r   web_urlN)r,   r-   r.   rC   r0   r2   r3   r4   rF   rF   9   s:         ##GGGHHHJJJLLLLLr3   rF   c                  ,    e Zd ZU dZdZded<   ded<   dS )IssueCreateResponseu   Réponse de création d'issue.Tr)   successrF   issueN)r,   r-   r.   rC   rL   r0   r2   r3   r4   rK   rK   B   s5         ((Gr3   rK   c                  Z    e Zd ZU  ed          Zded<   ded<   ded<   ded<   ded	<   d
S )IssueListItemr   r   r%   rG   rH   r   r   staterI   Nr,   r-   r.   r   r/   r0   r2   r3   r4   rO   rO   H   sO         :H---LGGGHHHJJJJJJLLLLLr3   rO   c                     e Zd ZU  ed          Z eddd          Zded<    ed	d
          Zded<    edd          Z	ded<    ed          Z
ded<    ed	d
          Zded<    eddd          Zded<   dS )IssueAssistantListRequestr   r   .r   r   r   r   r   r   r   r'   all^(all|opened|closed)$r   patternrP   Fr(   r)   r*   r+   d      r   r$   ler%   limitN)r,   r-   r.   r   r/   r   r   r0   r'   rP   r*   r+   r\   r2   r3   r4   rS   rS   Q   s         :H---LcaC@@@L@@@@U2#666I6666u.EFFFEFFFFE%(((G((((!&rc!B!B!BBBBBsqS111E111111r3   rS   c                      e Zd ZU  ed          ZdZded<   ded<   ded<   d	Zd
ed<    ee	          Z
ded<    ee	          Zded<   d	S )IssueAssistantListResponser   r   Tr)   rL   r   statusmessageNdict | Noneprojectr   zlist[IssueListItem]issues
list[dict]candidate_projects)r,   r-   r.   r   r/   rL   r0   rb   r   r1   rd   rf   r2   r3   r4   r^   r^   [   s         :H---LGKKKLLLG"'%"="="=F====%*U4%@%@%@@@@@@@r3   r^   c                  &   e Zd ZU  ed          Z eddd          Zded<    ed	d
          Zded<    ed	d
          Z	ded<    ed          Z
ded<    ed	d
          Zded<    edd          Zded<    eddd          Zded<   dS )IssueAssistantCloseRequestr   r   .r   r   r   r   
issue_hintr   r   r   r'   Fr(   r)   r*   r+   r   r#   r%   resolved_issue_iid   rX   rZ   r\   Nr,   r-   r.   r   r/   r   ri   r0   r   r'   r*   r+   rj   r\   r2   r3   r4   rh   rh   e           :H---LeCA#>>>J>>>>bS999L9999U2#666I6666E%(((G((((!&rc!B!B!BBBBB#eA!4444444raC000E000000r3   rh   c                  d    e Zd ZU  ed          Zded<   ded<   ded<   ded<   ded	<   ded
<   dS )IssueCandidateItemr   r   r%   rG   rH   r   r   rP   rI   scoreNrQ   r2   r3   r4   ro   ro   p   X         :H---LGGGHHHJJJJJJLLLJJJJJr3   ro   c                      e Zd ZU  ed          ZdZded<   ded<   ded<   d	Zd
ed<   d	Zded<    e	e
          Zded<    e	e
          Zded<   d	S )IssueAssistantCloseResponser   r   Tr)   rL   r   r_   r`   Nra   rb   IssueListItem | NonerM   rc   re   rf   list[IssueCandidateItem]candidate_issuesr,   r-   r.   r   r/   rL   r0   rb   rM   r   r1   rf   rv   r2   r3   r4   rs   rs   z            :H---LGKKKLLLG"&E&&&&%*U4%@%@%@@@@@16t1L1L1LLLLLLLr3   rs   c                  &   e Zd ZU  ed          Z eddd          Zded<    ed	d
          Zded<    ed	d
          Z	ded<    ed          Z
ded<    ed	d
          Zded<    edd          Zded<    eddd          Zded<   dS )IssueAssistantReopenRequestr   r   .r   r   r   r   ri   r   r   r   r'   Fr(   r)   r*   r+   r   r#   r%   rj   rk   rX   rZ   r\   Nrl   r2   r3   r4   rz   rz      rm   r3   rz   c                      e Zd ZU  ed          ZdZded<   ded<   ded<   d	Zd
ed<   d	Zded<    e	e
          Zded<    e	e
          Zded<   d	S )IssueAssistantReopenResponser   r   Tr)   rL   r   r_   r`   Nra   rb   rt   rM   rc   re   rf   ru   rv   rw   r2   r3   r4   r|   r|      rx   r3   r|   c                  d    e Zd ZU  ed          Zded<   ded<   ded<   ded<   ded	<   ded
<   dS )IssueDuplicateItemr   r   r%   rG   rH   r   r   rP   rI   rp   NrQ   r2   r3   r4   r~   r~      rq   r3   r~   c                      e Zd ZU  ed          ZdZded<   ded<   ded<   d	Zd
ed<    ee	          Z
ded<    ee	          Zded<   d	S )IssueAssistantCreateResponser   r   Tr)   rL   r   r_   r`   NIssuePayload | NonerM   rc   re   rf   zlist[IssueDuplicateItem]duplicate_issues)r,   r-   r.   r   r/   rL   r0   rM   r   r1   rf   r   r2   r3   r4   r   r      s         :H---LGKKKLLL!%E%%%%%*U4%@%@%@@@@@16t1L1L1LLLLLLLr3   r   c                      e Zd ZU  ed          Z eddd          Zded<    ed	d
          Zded<    ed          Z	ded<    ed	d
          Z
ded<    eddd          Zded<   dS )IssueAssistantListLabelsRequestr   r   .r   r   r   r   r   r   r   r'   Fr(   r)   r*   r+   rX   rY   rZ   r%   r\   N)r,   r-   r.   r   r/   r   r   r0   r'   r*   r+   r\   r2   r3   r4   r   r      s         :H---LcaC@@@L@@@@U2#666I6666E%(((G((((!&rc!B!B!BBBBBsqS111E111111r3   r   c                  j    e Zd ZU  ed          ZdZded<   ded<   dZded	<   dZded
<   dZ	ded<   dS )	LabelItemr   r   Nz
int | NonerG   r   namez
str | Nonecolorr   
text_color)
r,   r-   r.   r   r/   rG   r0   r   r   r   r2   r3   r4   r   r      sq         :H---LBIIIE"K""""!J!!!!!!r3   r   c                      e Zd ZU  ed          ZdZded<   ded<   ded<   d	Zd
ed<    ee	          Z
ded<    ee	          Zded<   d	S ) IssueAssistantListLabelsResponser   r   Tr)   rL   r   r_   r`   Nra   rb   rc   zlist[LabelItem]r!   re   rf   )r,   r-   r.   r   r/   rL   r0   rb   r   r1   r!   rf   r2   r3   r4   r   r      s         :H---LGKKKLLLG#eD999F9999%*U4%@%@%@@@@@@@r3   r   c                  n   e Zd ZU  ed          Z eddd          Zded<    eddd          Zded	<    ed
d          Z	ded<    ed
d          Z
ded<    ed          Zded<    ed          Zded<    ed
d          Zded<    edd          Zded<    eddd          Zded<   dS )IssueAssistantAddLabelRequestr   r   .r   r   r   r   ri   
label_namer   r   r   r'   Tr(   r)   create_label_if_missingFr*   r+   r   r#   r%   rj   rk   rX   rZ   r\   N)r,   r-   r.   r   r/   r   ri   r0   r   r   r'   r   r*   r+   rj   r\   r2   r3   r4   r   r      sI        :H---LeCA#>>>J>>>>eCA#>>>J>>>>bS999L9999U2#666I6666$)E$$7$7$77777E%(((G((((!&rc!B!B!BBBBB#eA!4444444raC000E000000r3   r   c                      e Zd ZU  ed          ZdZded<   ded<   ded<   d	Zd
ed<   d	Zded<    e	e
          Zded<    e	e
          Zded<    e	e
          Zded<   d	S )IssueAssistantAddLabelResponser   r   Tr)   rL   r   r_   r`   Nra   rb   rt   rM   rc   r    r!   re   rf   ru   rv   )r,   r-   r.   r   r/   rL   r0   rb   rM   r   r1   r!   rf   rv   r2   r3   r4   r   r      s         :H---LGKKKLLLG"&E&&&&d333F3333%*U4%@%@%@@@@@16t1L1L1LLLLLLLr3   r   c                      e Zd ZU  ed          Zded<   ded<   ded<   dZded	<    ee
          Z	ded<    ee
          Z
ded<   dS )BulkIssueResultItemr   r   r   ri   r_   r`   Nrt   rM   rc   r    r!   ru   rv   )r,   r-   r.   r   r/   r0   rM   r   r1   r!   rv   r2   r3   r4   r   r      s         :H---LOOOKKKLLL"&E&&&&d333F333316t1L1L1LLLLLLLr3   r   c                  L   e Zd ZU  ed          Z eddd          Zded<    eddd	          Zd
ed<    eddd          Z	ded<    edd          Z
ded<    ed          Zded<    ed          Zded<    edd          Zded<    eddd          Zded<   dS )!IssueAssistantAddLabelBulkRequestr   r   .r   r   r   r   r   rY   r    issue_hintsr   r   r   r'   Tr(   r)   r   Fr*   r+   rk   rX   rZ   r%   r\   N)r,   r-   r.   r   r/   r   r   r0   r   r   r'   r   r*   r+   r\   r2   r3   r4   r   r      s*        :H---LcaC@@@L@@@@"U31EEEKEEEEeCA#>>>J>>>>U2#666I6666$)E$$7$7$77777E%(((G((((!&rc!B!B!BBBBBraC000E000000r3   r   c                      e Zd ZU  ed          ZdZded<   ded<   ded<   d	Zd
ed<   ded<    ee	          Z
ded<    ee	          Zded<   d	S )"IssueAssistantAddLabelBulkResponser   r   Tr)   rL   r   r_   r`   Nra   rb   r   rc   list[BulkIssueResultItem]resultsre   rf   )r,   r-   r.   r   r/   rL   r0   rb   r   r1   r   rf   r2   r3   r4   r   r      s         :H---LGKKKLLLGOOO).t)D)D)DGDDDD%*U4%@%@%@@@@@@@r3   r   c                  J   e Zd ZU  ed          Z eddd          Zded<    eddd          Zded	<    ed
d          Z	ded<    edd          Z
ded<    ed          Zded<    ed          Zded<    ed
d          Zded<    eddd          Zded<   dS ) IssueAssistantAddLabelAllRequestr   r   .r   r   r   r   r   r   r   r   r'   rT   rU   rV   rP   Tr(   r)   r   Fr*   r+   rY   i  rZ   r%   r\   N)r,   r-   r.   r   r/   r   r   r0   r   r'   rP   r   r*   r+   r\   r2   r3   r4   r   r     s)        :H---LcaC@@@L@@@@eCA#>>>J>>>>U2#666I6666u.EFFFEFFFF$)E$$7$7$77777E%(((G((((!&rc!B!B!BBBBBsqS111E111111r3   r   c                      e Zd ZU  ed          ZdZded<   ded<   ded<   d	Zd
ed<   ded<   dZded<   dZ	ded<    e
e          Zded<    e
e          Zded<   d	S )!IssueAssistantAddLabelAllResponser   r   Tr)   rL   r   r_   r`   Nra   rb   r   r   r%   total_issuesupdated_countrc   r   r   re   rf   )r,   r-   r.   r   r/   rL   r0   rb   r   r   r   r1   r   rf   r2   r3   r4   r   r     s         :H---LGKKKLLLGOOOLM).t)D)D)DGDDDD%*U4%@%@%@@@@@@@r3   r   c                      e Zd ZU dZ ed          Z eddd          Zded	<    ed
d          Z	ded<    ee
d          Zded<   dS )BatchIssueInputu    Une issue à créer dans le lot.r   r   .r   r   r   r   r   r   r   r   r   r   r   r    r!   N)r,   r-   r.   rC   r   r/   r   r   r0   r   r1   r!   r2   r3   r4   r   r   *  s         **:H---LsqS999E9999uRE:::K::::drBBBFBBBBBBr3   r   c                  f    e Zd ZU dZ ed          Zded<   ded<   ded<   dZd	ed
<   dZded<   dS )BatchIssueResultu-   Résultat de création pour une issue du lot.r   r   r   r   r_   r`   Nr   rM   Fr)   milestone_assigned)	r,   r-   r.   rC   r   r/   r0   rM   r   r2   r3   r4   r   r   3  sh         77:H---LJJJKKKLLL!%E%%%%$$$$$$$r3   r   c                  8   e Zd ZU dZ ed          Z edddd          Zd	ed
<    edddd          Z	ded<    eddd          Z
d	ed<    eddd          Zd	ed<    edd          Zded<    eddd          Zd	ed<    eddd          Zded <   d!S )" IssueAssistantBatchCreateRequestuS  
    Crée N issues en un seul appel, avec assignment optionnel à une milestone.

    Flux en deux temps (comme les autres endpoints assistant) :
    - confirm=False : résout le projet + la milestone, retourne les candidats si ambiguïté
    - confirm=True  : résolution confirmée, crée toutes les issues et assigne la milestone
    r   r   .r   r   z(Nom/path partiel du projet GitLab cible.)r   r   r   r   r   r   u$   Liste des issues à créer (max 50).zlist[BatchIssueInput]rd   r   u4   Nom partiel de la milestone à assigner (optionnel).)r   r   r   r"   u0   Préfixe de namespace pour filtrer la recherche.r'   Fu<   True = créer toutes les issues avec les resolved_* fournis.)r   r   r)   r*   z3Path exact du projet (obligatoire si confirm=True).r+   r   z*ID de la milestone (0 = aucune milestone).)r   r$   r   r%   r&   N)r,   r-   r.   rC   r   r/   r   r   r0   rd   r"   r'   r*   r+   r&   r2   r3   r4   r   r   >  s          :H---LcaC*TV V VL V V V V$)E#!6\%^ %^ %^F ^ ^ ^ ^%s,bd d dN d d d dU2#'Y[ [ [I [ [ [ [E%&df f fG f f f f!&rc3h"j "j "j j j j j!&qQ3_"a "a "a a a a a a ar3   r   c                      e Zd ZU dZ ed          ZdZded<   ded<   ded	<   d
Zded<   d
Z	ded<    e
e          Zded<   dZded<   dZded<    e
e          Zded<    e
e          Zded<   d
S )!IssueAssistantBatchCreateResponseu!   Résultat de la création en lot.r   r   Tr)   rL   r   r_   r`   Nra   rb   zMilestoneItem | None	milestonerc   zlist[BatchIssueResult]r   r   r%   created_counterror_countre   rf   zlist[MilestoneCandidateItem]candidate_milestones)r,   r-   r.   rC   r   r/   rL   r0   rb   r   r   r1   r   r   r   rf   r   r2   r3   r4   r   r   X  s         ++:H---LGKKKLLLG&*I****&+eD&A&A&AGAAAAMK%*U4%@%@%@@@@@9>t9T9T9TTTTTTTr3   r   N))rC   
__future__r   pydanticr   r   r   r   app.schemas.commonr   app.schemas.milestonesr	   r
   r   r6   rF   rK   rO   rS   r^   rh   ro   rs   rz   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r3   r4   <module>r      s}  
 
 # " " " " " B B B B B B B B B B B B * * * * * * H H H H H H H HC C C C C) C C C       ,    9       )       I   2 2 2 2 2	 2 2 2A A A A A A A A	1 	1 	1 	1 	1 	1 	1 	1       	M 	M 	M 	M 	M) 	M 	M 	M	1 	1 	1 	1 	1) 	1 	1 	1	M 	M 	M 	M 	M9 	M 	M 	M       M M M M M9 M M M2 2 2 2 2i 2 2 2" " " " "	 " " "A A A A Ay A A A1 1 1 1 1I 1 1 1
M 
M 
M 
M 
MY 
M 
M 
MM M M M M) M M M
1 
1 
1 
1 
1	 
1 
1 
1	A 	A 	A 	A 	A 	A 	A 	A
2 
2 
2 
2 
2y 
2 
2 
2A A A A A	 A A A$C C C C Ci C C C% % % % %y % % %a a a a ay a a a4U U U U U	 U U U U Ur3   