package view import ( "github.com/valyala/fasthttp" "git.sr.ht/~gabrielgio/img" "git.sr.ht/~gabrielgio/img/pkg/components/settings" "git.sr.ht/~gabrielgio/img/pkg/components/user" "git.sr.ht/~gabrielgio/img/pkg/ext" ) type ( SettingsView struct { // there is not need to create a controller for this settingsRepository settings.Repository userRepository user.Repository } SettingsPage struct { Settings *settings.Settings Users []*user.User } ) func NewSettingsView( settingsRespository settings.Repository, userRepository user.Repository, ) *SettingsView { return &SettingsView{ settingsRepository: settingsRespository, userRepository: userRepository, } } func (self *SettingsView) Index(ctx *fasthttp.RequestCtx) error { s, err := self.settingsRepository.Load(ctx) if err != nil { return err } users, err := self.userRepository.List(ctx) if err != nil { return err } return img.Render(ctx, "settings.html", &img.HTMLView[*SettingsPage]{ Title: "Settings", Data: &SettingsPage{ Settings: s, Users: users, }, }) } func (self *SettingsView) Save(ctx *fasthttp.RequestCtx) error { var ( showMode = string(ctx.FormValue("showMode")) == "on" showOwner = string(ctx.FormValue("showOwner")) == "on" ) err := self.settingsRepository.Save(ctx, &settings.Settings{ ShowMode: showMode, ShowOwner: showOwner, }) if err != nil { return err } return self.Index(ctx) } func (self *SettingsView) SetMyselfIn(r *ext.Router) { r.GET("/settings/", self.Index) r.POST("/settings/", self.Save) }