github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/vote/views.go (about)

     1  package vote
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  
     7  	"github.com/benoitkugler/goACVE/logs"
     8  	"github.com/benoitkugler/goACVE/server/documents"
     9  	"github.com/benoitkugler/goACVE/server/shared"
    10  	"github.com/labstack/echo"
    11  )
    12  
    13  // ------------------- admin -------------------------
    14  
    15  func PageAdmin(c echo.Context) error {
    16  	return c.File("server/static/bv/vote_admin.html")
    17  }
    18  
    19  func (ct Controller) GetMembres(c echo.Context) error {
    20  	if key := c.Param("key"); key != logs.KeyVoteAdmin {
    21  		return fmt.Errorf("Clé d'identification invalide : %s", key)
    22  	}
    23  	out, err := ct.getMembres(c.Request().Host)
    24  	if err != nil {
    25  		return err
    26  	}
    27  	return c.JSON(200, out)
    28  }
    29  
    30  func (ct Controller) InviteOne(c echo.Context) error {
    31  	if key := c.Param("key"); key != logs.KeyVoteAdmin {
    32  		return fmt.Errorf("Clé d'identification invalide : %s", key)
    33  	}
    34  	var membre Membre
    35  	if err := c.Bind(&membre); err != nil {
    36  		return err
    37  	}
    38  	err := ct.inviteOne(membre)
    39  	if err != nil {
    40  		return err
    41  	}
    42  	return c.NoContent(200)
    43  }
    44  
    45  func (ct Controller) InviteAll(c echo.Context) error {
    46  	if key := c.Param("key"); key != logs.KeyVoteAdmin {
    47  		return fmt.Errorf("Clé d'identification invalide : %s", key)
    48  	}
    49  	err := ct.inviteAll(c.Request().Host)
    50  	if err != nil {
    51  		return err
    52  	}
    53  	return c.NoContent(200)
    54  }
    55  
    56  func (ct Controller) GetVotes(c echo.Context) error {
    57  	if key := c.Param("key"); key != logs.KeyVoteAdmin {
    58  		return fmt.Errorf("Clé d'identification invalide : %s", key)
    59  	}
    60  
    61  	out, err := ct.getVotesWithDecompte()
    62  	if err != nil {
    63  		return err
    64  	}
    65  	return c.JSON(200, out)
    66  }
    67  
    68  func (ct Controller) CreateVote(c echo.Context) error {
    69  	if key := c.Param("key"); key != logs.KeyVoteAdmin {
    70  		return fmt.Errorf("Clé d'identification invalide : %s", key)
    71  	}
    72  	var vote VoteCandidats
    73  	if err := c.Bind(&vote); err != nil {
    74  		return err
    75  	}
    76  
    77  	err := ct.createVote(vote)
    78  	if err != nil {
    79  		return err
    80  	}
    81  	out, err := ct.getVotesWithDecompte()
    82  	if err != nil {
    83  		return err
    84  	}
    85  	return c.JSON(200, out)
    86  }
    87  
    88  func (ct Controller) UpdateVote(c echo.Context) error {
    89  	if key := c.Param("key"); key != logs.KeyVoteAdmin {
    90  		return fmt.Errorf("Clé d'identification invalide : %s", key)
    91  	}
    92  	var vote VoteCandidats
    93  	if err := c.Bind(&vote); err != nil {
    94  		return err
    95  	}
    96  	err := ct.updateVote(vote)
    97  	if err != nil {
    98  		return err
    99  	}
   100  	out, err := ct.getVotesWithDecompte()
   101  	if err != nil {
   102  		return err
   103  	}
   104  	return c.JSON(200, out)
   105  }
   106  
   107  func (ct Controller) LockVote(c echo.Context) error {
   108  	if key := c.Param("key"); key != logs.KeyVoteAdmin {
   109  		return fmt.Errorf("Clé d'identification invalide : %s", key)
   110  	}
   111  	var params LockVote
   112  	if err := c.Bind(&params); err != nil {
   113  		return err
   114  	}
   115  	_, err := ct.lockVote(params)
   116  	if err != nil {
   117  		return err
   118  	}
   119  	out, err := ct.getVotesWithDecompte()
   120  	if err != nil {
   121  		return err
   122  	}
   123  	return c.JSON(200, out)
   124  }
   125  
   126  // ClearVote supprime les voix exprimées sur le vote donné.
   127  func (ct Controller) ClearVote(c echo.Context) error {
   128  	if key := c.Param("key"); key != logs.KeyVoteAdmin {
   129  		return fmt.Errorf("Clé d'identification invalide : %s", key)
   130  	}
   131  
   132  	id, err := strconv.Atoi(c.QueryParam("id"))
   133  	if err != nil {
   134  		return err
   135  	}
   136  	err = ct.clearVote(int64(id))
   137  	if err != nil {
   138  		return err
   139  	}
   140  	out, err := ct.getVotesWithDecompte()
   141  	if err != nil {
   142  		return err
   143  	}
   144  	return c.JSON(200, out)
   145  }
   146  
   147  func (ct Controller) DeleteVote(c echo.Context) error {
   148  	if key := c.Param("key"); key != logs.KeyVoteAdmin {
   149  		return fmt.Errorf("Clé d'identification invalide : %s", key)
   150  	}
   151  
   152  	id, err := strconv.Atoi(c.QueryParam("id"))
   153  	if err != nil {
   154  		return err
   155  	}
   156  	err = ct.deleteVote(int64(id))
   157  	if err != nil {
   158  		return err
   159  	}
   160  	out, err := ct.getVotes()
   161  	if err != nil {
   162  		return err
   163  	}
   164  	return c.JSON(200, out)
   165  }
   166  
   167  func (ct Controller) ExportBilanVotes(c echo.Context) error {
   168  	if key := c.Param("key"); key != logs.KeyVoteAdmin {
   169  		err := fmt.Errorf("Clé d'identification invalide : %s", key)
   170  		return shared.RedirectError(c, err)
   171  	}
   172  	out, err := ct.exportBilanVotes()
   173  	if err != nil {
   174  		return shared.RedirectError(c, err)
   175  	}
   176  	return documents.Attachment(c, "Bilan des votes.pdf", out, true)
   177  }
   178  
   179  // ------------------- vote -------------------------
   180  
   181  func (ct Controller) PageVote(c echo.Context) error {
   182  	idPersonne, err := logs.LienVote.Parse(c.Param("key"))
   183  	if err != nil {
   184  		return fmt.Errorf("Le lien de vote semble invalide : %s", err)
   185  	}
   186  	meta, err := ct.getPersonneMeta(idPersonne)
   187  	if err != nil {
   188  		return err
   189  	}
   190  	return shared.HtmlWithPayload(c, "server/static/bv/vote.html", meta)
   191  }
   192  
   193  func (ct Controller) LoadVotes(c echo.Context) error {
   194  	idPersonne, err := logs.LienVote.Parse(c.Param("key"))
   195  	if err != nil {
   196  		return fmt.Errorf("Le lien de vote semble invalide : %s", err)
   197  	}
   198  	out, err := ct.getStatutPersonne(idPersonne)
   199  	if err != nil {
   200  		return err
   201  	}
   202  	return c.JSON(200, out)
   203  }
   204  
   205  func (ct Controller) EffectueVote(c echo.Context) error {
   206  	idPersonne, err := logs.LienVote.Parse(c.Param("key"))
   207  	if err != nil {
   208  		return fmt.Errorf("Le lien de vote semble invalide : %s", err)
   209  	}
   210  	var args VotePersonneComplet
   211  	if err := c.Bind(&args); err != nil {
   212  		return err
   213  	}
   214  	err = ct.effectueVote(idPersonne, args)
   215  	if err != nil {
   216  		return err
   217  	}
   218  	out, err := ct.getStatutPersonne(idPersonne)
   219  	if err != nil {
   220  		return err
   221  	}
   222  	return c.JSON(200, out)
   223  }
   224  
   225  // ResetVote supprime un éventuel vote actuel (aucune trace n'est gardée)
   226  func (ct Controller) ResetVote(c echo.Context) error {
   227  	idPersonne, err := logs.LienVote.Parse(c.Param("key"))
   228  	if err != nil {
   229  		return fmt.Errorf("Le lien de vote semble invalide : %s", err)
   230  	}
   231  
   232  	id, err := strconv.Atoi(c.QueryParam("id"))
   233  	if err != nil {
   234  		return err
   235  	}
   236  
   237  	err = ct.resetVotePersonne(idPersonne, int64(id))
   238  	if err != nil {
   239  		return err
   240  	}
   241  	out, err := ct.getStatutPersonne(idPersonne)
   242  	if err != nil {
   243  		return err
   244  	}
   245  	return c.JSON(200, out)
   246  }
   247  
   248  func (ct Controller) ExportBilanPersonne(c echo.Context) error {
   249  	idPersonne, err := logs.LienVote.Parse(c.Param("key"))
   250  	if err != nil {
   251  		err = fmt.Errorf("Le lien de vote semble invalide : %s", err)
   252  		return shared.RedirectError(c, err)
   253  	}
   254  
   255  	membre, out, err := ct.exportBilanPersonne(idPersonne)
   256  	if err != nil {
   257  		return shared.RedirectError(c, err)
   258  	}
   259  	return documents.Attachment(c, fmt.Sprintf("Capture %s.pdf", membre.PrenomNom), out, true)
   260  }