@@ -3,6 +3,7 @@ package controllers
33import (
44 "fmt"
55 "net/http"
6+ "strconv"
67
78 "github.com/labstack/echo/v4"
89 "github.com/ockibagusp/golang-website-example/middleware"
@@ -48,28 +49,28 @@ func (controller *Controller) DeletePermanently(c echo.Context) error {
4849 )
4950
5051 if c .QueryParam ("admin" ) == "all" {
51- log .Infof (`for GET to admin delete permanently: admin models.User{}.FindAll (db, "admin")` )
52+ log .Infof (`for GET to admin delete permanently: admin models.User{}.FindDeleteAll (db, "admin")` )
5253 typing = "Admin"
53- users , err = models.User {}.FindAll (controller .DB , "admin" )
54+ users , err = models.User {}.FindDeleteAll (controller .DB , "admin" )
5455 } else if c .QueryParam ("user" ) == "all" {
55- log .Infof (`for GET to admin delete permanently: user models.User{}.FindAll (db, "user")` )
56+ log .Infof (`for GET to admin delete permanently: user models.User{}.FindDeleteAll (db, "user")` )
5657 typing = "User"
57- users , err = models.User {}.FindAll (controller .DB , "user" )
58+ users , err = models.User {}.FindDeleteAll (controller .DB , "user" )
5859 } else {
59- log .Infof (`for GET to admin delete permanently: models.User{}.FindAll (db) or models.User{}.FindAll (db, "all")` )
60+ log .Infof (`for GET to admin delete permanently: models.User{}.FindDeleteAll (db) or models.User{}.FindDeleteAll (db, "all")` )
6061 typing = "All"
6162 // models.User{} or (models.User{}) or var user models.User or user := models.User{}
62- users , err = models.User {}.FindAll (controller .DB )
63+ users , err = models.User {}.FindDeleteAll (controller .DB )
6364 }
6465
6566 if err != nil {
66- log .Warnf ("for GET to admin delete permanently without models.User{}.FindAll () errors: `%v`" , err )
67+ log .Warnf ("for GET to admin delete permanently without models.User{}.FindDeleteAll () errors: `%v`" , err )
6768 log .Warn ("END request method GET for admin delete permanently: [-]failure" )
6869 // HTTP response status: 404 Not Found
6970 return c .HTML (http .StatusNotFound , err .Error ())
7071 }
7172
72- log .Info ("END request method GET for users : [+]success" )
73+ log .Info ("END request method GET to admin delete permanently : [+]success" )
7374 return c .Render (http .StatusOK , "admin/admin-delete-permanently.html" , echo.Map {
7475 "name" : fmt .Sprintf ("Users: %v" , typing ),
7576 "nav" : "users" , // (?)
@@ -90,3 +91,62 @@ func (controller *Controller) DeletePermanently(c echo.Context) error {
9091 "users" : users ,
9192 })
9293}
94+
95+ /*
96+ * Delete Permanently By ID
97+ *
98+ * @target: [Admin] Delete Permanently By ID
99+ * @method: GET
100+ * @route: /admin/delete-permanently/:id
101+ */
102+ func (controller * Controller ) DeletePermanentlyByID (c echo.Context ) error {
103+ session , _ := middleware .GetAuth (c )
104+ log := log .WithFields (log.Fields {
105+ "username" : session .Values ["username" ],
106+ "route" : c .Path (),
107+ })
108+ log .Info ("START request method GET for admin delete permanently by id" )
109+
110+ is_auth_type := session .Values ["is_auth_type" ]
111+ if is_auth_type == - 1 {
112+ log .Warn ("for GET to admin delete permanently by id without no-session [@route: /login]" )
113+ middleware .SetFlashError (c , "login process failed!" )
114+ log .Warn ("END request method GET for admin delete permanently by id: [-]failure" )
115+ return c .Redirect (http .StatusFound , "/login" )
116+ }
117+
118+ id , _ := strconv .Atoi (c .Param ("id" ))
119+
120+ // why?
121+ // delete permanently not for admin
122+ if id == 1 {
123+ log .Warn ("END request method GET for admin delete permanently by id [admin]: [-]failure" )
124+ // HTTP response status: 403 Forbidden
125+ return c .HTML (http .StatusForbidden , "403 Forbidden" )
126+ }
127+
128+ if ! middleware .IsAdmin (is_auth_type ) {
129+ log .Warn ("END request method GET for admin delete permanently by id: [-]failure" )
130+ // HTTP response status: 404 Not Found
131+ return c .HTML (http .StatusNotFound , "404 Not Found" )
132+ }
133+
134+ user , err := (models.User {}).UnscopedFirstUserByID (controller .DB , id )
135+ if err != nil {
136+ log .Warnf ("for GET to admin delete permanently by id without models.User{}.FirstByID() errors: `%v`" , err )
137+ log .Warn ("END request method GET for admin delete permanently by id: [-]failure" )
138+ // HTTP response status: 404 Not Found
139+ return c .HTML (http .StatusNotFound , err .Error ())
140+ }
141+
142+ if err := user .DeletePermanently (controller .DB , id ); err != nil {
143+ log .Warnf ("for GET to admin delete permanently by id without models.User{}.Delete() errors: `%v`" , err )
144+ log .Warn ("END request method GET for admin delete permanently by id: [-]failure" )
145+ // HTTP response status: 403 Forbidden
146+ return c .HTML (http .StatusForbidden , err .Error ())
147+ }
148+
149+ // delete permanently admin
150+ log .Info ("END request method GET for admin delete permanently by id: [+]success" )
151+ return c .Redirect (http .StatusMovedPermanently , "/admin/delete-permanently" )
152+ }
0 commit comments