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(¶ms); 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 }